@nxgt/material 3.8.1 → 3.9.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 (365) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +28 -4
  3. package/dist/background-CAWV_qSk.js +247 -0
  4. package/dist/backgrounds/backgrounds.css +4 -0
  5. package/dist/backgrounds/css-react/celestial.css +200 -0
  6. package/dist/backgrounds/css-react/icons.css +175 -0
  7. package/dist/backgrounds.js +1 -1
  8. package/dist/celestial-scene-DaOsRFF3.js +30 -0
  9. package/dist/components/components.css +2 -5
  10. package/dist/components/ui/feedback/feedback.css +7 -0
  11. package/dist/components/ui/feedback/state-frame/illustration.css +171 -0
  12. package/dist/{components-DNUYg8QM.js → components-DiaPdu-E.js} +35 -28
  13. package/dist/components.js +16 -15
  14. package/dist/editor.js +1 -1
  15. package/dist/empty-state-COAV2d-R.js +98 -0
  16. package/dist/hooks.js +1 -1
  17. package/dist/icon-sprites-CZ3vcD7P.js +17 -0
  18. package/dist/icons-scene-bA7I4wdP.js +24 -0
  19. package/dist/illustration-DfPJtkFY.js +86 -0
  20. package/dist/illustrations-education.js +2 -0
  21. package/dist/illustrations-health.js +2 -0
  22. package/dist/illustrations.js +4 -0
  23. package/dist/lib/backgrounds/background/available.d.ts +8 -3
  24. package/dist/lib/backgrounds/background/background.d.ts +4 -4
  25. package/dist/lib/backgrounds/background/partials/background-layers.d.ts +17 -6
  26. package/dist/lib/backgrounds/background/partials/celestial-scene.d.ts +22 -0
  27. package/dist/lib/backgrounds/background/partials/icons-check.d.ts +8 -0
  28. package/dist/lib/backgrounds/background/partials/icons-keys.d.ts +3 -0
  29. package/dist/lib/backgrounds/background/partials/icons-layer.d.ts +8 -0
  30. package/dist/lib/backgrounds/background/partials/icons-scene.d.ts +19 -0
  31. package/dist/lib/backgrounds/background/partials/scene-options.d.ts +23 -0
  32. package/dist/lib/backgrounds/background/partials/use-icons-scene.d.ts +22 -0
  33. package/dist/lib/backgrounds/background/types.d.ts +28 -2
  34. package/dist/lib/backgrounds/index.d.ts +1 -1
  35. package/dist/lib/components/ui/collections/data-table/empty-types.d.ts +20 -0
  36. package/dist/lib/components/ui/collections/data-table/layout-types.d.ts +12 -0
  37. package/dist/lib/components/ui/collections/data-table/partials/data-table-body.d.ts +3 -1
  38. package/dist/lib/components/ui/collections/data-table/partials/data-table-empty-row.d.ts +5 -2
  39. package/dist/lib/components/ui/collections/data-table/partials/layouts/data-table-items-empty.d.ts +2 -2
  40. package/dist/lib/components/ui/collections/data-table/types.d.ts +4 -26
  41. package/dist/lib/components/ui/feedback/empty-state/empty-state.d.ts +8 -3
  42. package/dist/lib/components/ui/feedback/error-state/error-state.d.ts +3 -3
  43. package/dist/lib/components/ui/feedback/state-frame/illustration-defaults.d.ts +46 -0
  44. package/dist/lib/components/ui/feedback/state-frame/scene-registry.d.ts +14 -0
  45. package/dist/lib/components/ui/feedback/state-frame/state-frame.d.ts +10 -2
  46. package/dist/lib/components/ui/feedback/state-frame/state-scene-illustration.d.ts +5 -0
  47. package/dist/lib/components/ui/feedback/state-frame/state-scenes.d.ts +15 -0
  48. package/dist/lib/components/ui/layout/app-shell/use-keep-shapes-inside.d.ts +3 -0
  49. package/dist/lib/components/ui/primitives/icon/icon-sprites.d.ts +17 -0
  50. package/dist/lib/components/ui/primitives/icon/index.d.ts +1 -0
  51. package/dist/lib/illustrations/illustration.d.ts +38 -0
  52. package/dist/lib/illustrations/index.d.ts +11 -0
  53. package/dist/lib/illustrations/plated-illustration.d.ts +11 -0
  54. package/dist/lib/illustrations/use-illustration.d.ts +22 -0
  55. package/dist/lib/illustrations-education/index.d.ts +16 -0
  56. package/dist/lib/illustrations-health/index.d.ts +16 -0
  57. package/dist/lib/theme-picker/partials/mini-background.d.ts +3 -0
  58. package/dist/lib/theme-picker/partials/tile-icons.d.ts +9 -0
  59. package/dist/main.js +28 -27
  60. package/dist/material.css +1 -1
  61. package/dist/{nxgt-theme-CgSb9Obl.js → nxgt-theme-ZS945iMP.js} +1 -1
  62. package/dist/pdf-reader.js +1 -1
  63. package/dist/plated-illustration-C3z0hP9U.js +19 -0
  64. package/dist/{public-Ce30uvp0.js → public-DGvtAz7M.js} +1 -1
  65. package/dist/scene-options-CCy3V7XS.js +60 -0
  66. package/dist/scene-svg-DJKa5vsg.js +9 -0
  67. package/dist/state-scenes-Be9w_3an.js +130 -0
  68. package/dist/{theme-context-BagPvRcz.js → theme-context-Cofk6vgs.js} +2 -2
  69. package/dist/theme-picker.js +69 -45
  70. package/dist/{theme-toggle-C8os82b4.js → theme-toggle-oU-fh6WE.js} +2 -2
  71. package/dist/themes.js +2 -2
  72. package/dist/{use-chat-composer-CDrgWGMM.js → use-chat-composer-CkEPJo5I.js} +4236 -4230
  73. package/dist/{use-theme-Cd-aiDJo.js → use-theme-DMcyJ52N.js} +1 -1
  74. package/docs/README.md +2 -0
  75. package/docs/components/README.md +2 -0
  76. package/docs/components/data-table-filter-and-lists.md +1 -0
  77. package/docs/components/feedback-and-status.md +2 -2
  78. package/docs/components/foundations.md +2 -2
  79. package/docs/components/navigation-and-layout.md +1 -1
  80. package/docs/components/primitives.md +14 -1
  81. package/docs/getting-started.md +7 -2
  82. package/docs/guides/app-shell.md +1 -1
  83. package/docs/guides/backgrounds.md +93 -6
  84. package/docs/guides/icon-motifs.md +198 -0
  85. package/docs/guides/illustrations.md +172 -0
  86. package/docs/guides/themes.md +35 -0
  87. package/docs/guides/theming.md +1 -1
  88. package/docs/previews/backgrounds-background-from-theme.webp +0 -0
  89. package/docs/previews/backgrounds-celestial.webp +0 -0
  90. package/docs/previews/backgrounds-geometry-more.webp +0 -0
  91. package/docs/previews/backgrounds-geometry.webp +0 -0
  92. package/docs/previews/backgrounds-icons.webp +0 -0
  93. package/docs/previews/backgrounds-illustrated-scenes.webp +0 -0
  94. package/docs/previews/backgrounds-light-more.webp +0 -0
  95. package/docs/previews/backgrounds-light.webp +0 -0
  96. package/docs/previews/backgrounds-material-more.webp +0 -0
  97. package/docs/previews/backgrounds-matrix.webp +0 -0
  98. package/docs/previews/backgrounds-moon.webp +0 -0
  99. package/docs/previews/backgrounds-motif-shapes.webp +0 -0
  100. package/docs/previews/backgrounds-motifs.webp +0 -0
  101. package/docs/previews/backgrounds-sky-overlay.webp +0 -0
  102. package/docs/previews/buttons-actions-actioncard.webp +0 -0
  103. package/docs/previews/buttons-actions-button.webp +0 -0
  104. package/docs/previews/buttons-actions-buttongroup.webp +0 -0
  105. package/docs/previews/buttons-actions-copybutton.webp +0 -0
  106. package/docs/previews/buttons-actions-fab.webp +0 -0
  107. package/docs/previews/buttons-actions-fabmenu.webp +0 -0
  108. package/docs/previews/buttons-actions-highlighttext.webp +0 -0
  109. package/docs/previews/buttons-actions-iconbutton.webp +0 -0
  110. package/docs/previews/buttons-actions-languageswitcher.webp +0 -0
  111. package/docs/previews/buttons-actions-linkbutton.webp +0 -0
  112. package/docs/previews/buttons-actions-loadmorebutton.webp +0 -0
  113. package/docs/previews/buttons-actions-responsivebutton.webp +0 -0
  114. package/docs/previews/buttons-actions-scrolltolatestbutton.webp +0 -0
  115. package/docs/previews/buttons-actions-scrolltotop.webp +0 -0
  116. package/docs/previews/buttons-actions-splitbutton.webp +0 -0
  117. package/docs/previews/buttons-actions-themetoggle.webp +0 -0
  118. package/docs/previews/buttons-actions-toolbar-overflow.webp +0 -0
  119. package/docs/previews/buttons-actions-toolbar.webp +0 -0
  120. package/docs/previews/data-display-accordioncard.webp +0 -0
  121. package/docs/previews/data-display-apiendpoint.webp +0 -0
  122. package/docs/previews/data-display-apioperation.webp +0 -0
  123. package/docs/previews/data-display-avatar.webp +0 -0
  124. package/docs/previews/data-display-avatargroup.webp +0 -0
  125. package/docs/previews/data-display-badge.webp +0 -0
  126. package/docs/previews/data-display-barecode.webp +0 -0
  127. package/docs/previews/data-display-card-presets.webp +0 -0
  128. package/docs/previews/data-display-chip.webp +0 -0
  129. package/docs/previews/data-display-codeblock.webp +0 -0
  130. package/docs/previews/data-display-codegroup.webp +0 -0
  131. package/docs/previews/data-display-countbadge.webp +0 -0
  132. package/docs/previews/data-display-dayseparator.webp +0 -0
  133. package/docs/previews/data-display-description.webp +0 -0
  134. package/docs/previews/data-display-enrolmentsecret.webp +0 -0
  135. package/docs/previews/data-display-entityheader.webp +0 -0
  136. package/docs/previews/data-display-eventchip.webp +0 -0
  137. package/docs/previews/data-display-figure.webp +0 -0
  138. package/docs/previews/data-display-jsonviewer.webp +0 -0
  139. package/docs/previews/data-display-listtile.webp +0 -0
  140. package/docs/previews/data-display-markdown.webp +0 -0
  141. package/docs/previews/data-display-metric-cards.webp +0 -0
  142. package/docs/previews/data-display-paramtable.webp +0 -0
  143. package/docs/previews/data-display-periodcards.webp +0 -0
  144. package/docs/previews/data-display-recoverycodes.webp +0 -0
  145. package/docs/previews/data-display-shape.webp +0 -0
  146. package/docs/previews/data-display-statcard.webp +0 -0
  147. package/docs/previews/data-display-statusindicator.webp +0 -0
  148. package/docs/previews/data-display-summarydata.webp +0 -0
  149. package/docs/previews/data-display-terminal.webp +0 -0
  150. package/docs/previews/data-display-timeline.webp +0 -0
  151. package/docs/previews/data-table-filter-lists-datagrid.webp +0 -0
  152. package/docs/previews/data-table-filter-lists-datatable.webp +0 -0
  153. package/docs/previews/data-table-filter-lists-daygroupedlist.webp +0 -0
  154. package/docs/previews/data-table-filter-lists-drag-and-drop.webp +0 -0
  155. package/docs/previews/data-table-filter-lists-facetgroup.webp +0 -0
  156. package/docs/previews/data-table-filter-lists-filter.webp +0 -0
  157. package/docs/previews/data-table-filter-lists-listempty.webp +0 -0
  158. package/docs/previews/data-table-filter-lists-listpane.webp +0 -0
  159. package/docs/previews/data-table-filter-lists-pagination.webp +0 -0
  160. package/docs/previews/data-table-filter-lists-servertable.webp +0 -0
  161. package/docs/previews/data-table-filter-lists-tree.webp +0 -0
  162. package/docs/previews/date-time-calendar.webp +0 -0
  163. package/docs/previews/date-time-datefield.webp +0 -0
  164. package/docs/previews/date-time-daterangefield.webp +0 -0
  165. package/docs/previews/date-time-durationfield.webp +0 -0
  166. package/docs/previews/date-time-minimonth.webp +0 -0
  167. package/docs/previews/date-time-nowindicator.webp +0 -0
  168. package/docs/previews/date-time-timefield.webp +0 -0
  169. package/docs/previews/date-time-timepicker.webp +0 -0
  170. package/docs/previews/feedback-status-alert.webp +0 -0
  171. package/docs/previews/feedback-status-alertdialog.webp +0 -0
  172. package/docs/previews/feedback-status-banner.webp +0 -0
  173. package/docs/previews/feedback-status-circularprogress.webp +0 -0
  174. package/docs/previews/feedback-status-confirmationdialog.webp +0 -0
  175. package/docs/previews/feedback-status-confirmdialog.webp +0 -0
  176. package/docs/previews/feedback-status-countdowntimer.webp +0 -0
  177. package/docs/previews/feedback-status-customalertdialog.webp +0 -0
  178. package/docs/previews/feedback-status-customdialog.webp +0 -0
  179. package/docs/previews/feedback-status-emptystate.webp +0 -0
  180. package/docs/previews/feedback-status-errorstate.webp +0 -0
  181. package/docs/previews/feedback-status-hydrateloading.webp +0 -0
  182. package/docs/previews/feedback-status-illustration-education.webp +0 -0
  183. package/docs/previews/feedback-status-illustration-health.webp +0 -0
  184. package/docs/previews/feedback-status-illustration.webp +0 -0
  185. package/docs/previews/feedback-status-loadingindicator.webp +0 -0
  186. package/docs/previews/feedback-status-notificationrow.webp +0 -0
  187. package/docs/previews/feedback-status-notifications.webp +0 -0
  188. package/docs/previews/feedback-status-progress.webp +0 -0
  189. package/docs/previews/feedback-status-scrollprogress.webp +0 -0
  190. package/docs/previews/feedback-status-skeleton.webp +0 -0
  191. package/docs/previews/feedback-status-spinner.webp +0 -0
  192. package/docs/previews/feedback-status-stepdots.webp +0 -0
  193. package/docs/previews/feedback-status-toast.webp +0 -0
  194. package/docs/previews/feedback-status-typingindicator.webp +0 -0
  195. package/docs/previews/form-fields-attributes.webp +0 -0
  196. package/docs/previews/form-fields-colorfield.webp +0 -0
  197. package/docs/previews/form-fields-contacts.webp +0 -0
  198. package/docs/previews/form-fields-countryfield.webp +0 -0
  199. package/docs/previews/form-fields-currencyfield.webp +0 -0
  200. package/docs/previews/form-fields-emailfield.webp +0 -0
  201. package/docs/previews/form-fields-field.webp +0 -0
  202. package/docs/previews/form-fields-formsection.webp +0 -0
  203. package/docs/previews/form-fields-inlineedit.webp +0 -0
  204. package/docs/previews/form-fields-inputgroupfield.webp +0 -0
  205. package/docs/previews/form-fields-localizedtextfields.webp +0 -0
  206. package/docs/previews/form-fields-numberfield.webp +0 -0
  207. package/docs/previews/form-fields-openinghours.webp +0 -0
  208. package/docs/previews/form-fields-otpfield.webp +0 -0
  209. package/docs/previews/form-fields-passwordfield.webp +0 -0
  210. package/docs/previews/form-fields-percentfield.webp +0 -0
  211. package/docs/previews/form-fields-phonefield.webp +0 -0
  212. package/docs/previews/form-fields-postaladdress.webp +0 -0
  213. package/docs/previews/form-fields-ratingfield.webp +0 -0
  214. package/docs/previews/form-fields-repeatablegroup.webp +0 -0
  215. package/docs/previews/form-fields-searchfield.webp +0 -0
  216. package/docs/previews/form-fields-slider.webp +0 -0
  217. package/docs/previews/form-fields-switch.webp +0 -0
  218. package/docs/previews/form-fields-textareafield.webp +0 -0
  219. package/docs/previews/form-fields-textfield.webp +0 -0
  220. package/docs/previews/form-fields-timezonefield.webp +0 -0
  221. package/docs/previews/form-fields-urlfield.webp +0 -0
  222. package/docs/previews/foundations-themes-icon-motifs.webp +0 -0
  223. package/docs/previews/foundations-themes-themepicker.webp +0 -0
  224. package/docs/previews/guides-i18n-i18nprovider.webp +0 -0
  225. package/docs/previews/guides-i18n-translated-components.webp +0 -0
  226. package/docs/previews/media-files-audioplayer.webp +0 -0
  227. package/docs/previews/media-files-camera.webp +0 -0
  228. package/docs/previews/media-files-carousel.webp +0 -0
  229. package/docs/previews/media-files-filelist.webp +0 -0
  230. package/docs/previews/media-files-filelistfield.webp +0 -0
  231. package/docs/previews/media-files-filepreview.webp +0 -0
  232. package/docs/previews/media-files-gallery-image-lists.webp +0 -0
  233. package/docs/previews/media-files-gallery-viewer.webp +0 -0
  234. package/docs/previews/media-files-gallery.webp +0 -0
  235. package/docs/previews/media-files-imagecropper.webp +0 -0
  236. package/docs/previews/media-files-imageeditor.webp +0 -0
  237. package/docs/previews/media-files-imagefield.webp +0 -0
  238. package/docs/previews/media-files-lightboxgallery.webp +0 -0
  239. package/docs/previews/media-files-map.webp +0 -0
  240. package/docs/previews/media-files-mediaplayer.webp +0 -0
  241. package/docs/previews/media-files-mediaplayerhost.webp +0 -0
  242. package/docs/previews/media-files-mediaplayerlightbox.webp +0 -0
  243. package/docs/previews/media-files-mediaplayermini.webp +0 -0
  244. package/docs/previews/media-files-minigallery.webp +0 -0
  245. package/docs/previews/media-files-networkuploadfield.webp +0 -0
  246. package/docs/previews/media-files-pdfreader.webp +0 -0
  247. package/docs/previews/media-files-s3uploadfield.webp +0 -0
  248. package/docs/previews/media-files-uploadfield.webp +0 -0
  249. package/docs/previews/navigation-layout-accountmenu.webp +0 -0
  250. package/docs/previews/navigation-layout-appshell-menu-badge.webp +0 -0
  251. package/docs/previews/navigation-layout-appshell.webp +0 -0
  252. package/docs/previews/navigation-layout-authcard.webp +0 -0
  253. package/docs/previews/navigation-layout-background.webp +0 -0
  254. package/docs/previews/navigation-layout-bottomappbar.webp +0 -0
  255. package/docs/previews/navigation-layout-breadcrumb.webp +0 -0
  256. package/docs/previews/navigation-layout-doc-api.webp +0 -0
  257. package/docs/previews/navigation-layout-doc-blocks.webp +0 -0
  258. package/docs/previews/navigation-layout-doc.webp +0 -0
  259. package/docs/previews/navigation-layout-hero.webp +0 -0
  260. package/docs/previews/navigation-layout-listdetailslayout.webp +0 -0
  261. package/docs/previews/navigation-layout-pager.webp +0 -0
  262. package/docs/previews/navigation-layout-panelayout.webp +0 -0
  263. package/docs/previews/navigation-layout-resizable.webp +0 -0
  264. package/docs/previews/navigation-layout-responsivegrid.webp +0 -0
  265. package/docs/previews/navigation-layout-seealso.webp +0 -0
  266. package/docs/previews/navigation-layout-sidebar.webp +0 -0
  267. package/docs/previews/navigation-layout-skiplink.webp +0 -0
  268. package/docs/previews/navigation-layout-stepper.webp +0 -0
  269. package/docs/previews/navigation-layout-steps.webp +0 -0
  270. package/docs/previews/navigation-layout-threadlayout.webp +0 -0
  271. package/docs/previews/navigation-layout-toc.webp +0 -0
  272. package/docs/previews/navigation-layout-topappbar.webp +0 -0
  273. package/docs/previews/overlays-menus-command.webp +0 -0
  274. package/docs/previews/overlays-menus-contextmenu.webp +0 -0
  275. package/docs/previews/overlays-menus-dialog.webp +0 -0
  276. package/docs/previews/overlays-menus-drawer.webp +0 -0
  277. package/docs/previews/overlays-menus-dropdownmenu.webp +0 -0
  278. package/docs/previews/overlays-menus-hovercard.webp +0 -0
  279. package/docs/previews/overlays-menus-menubar.webp +0 -0
  280. package/docs/previews/overlays-menus-popover.webp +0 -0
  281. package/docs/previews/overlays-menus-sheet.webp +0 -0
  282. package/docs/previews/overlays-menus-tooltip.webp +0 -0
  283. package/docs/previews/primitives-accordion.webp +0 -0
  284. package/docs/previews/primitives-anchorheading.webp +0 -0
  285. package/docs/previews/primitives-card.webp +0 -0
  286. package/docs/previews/primitives-collapsible.webp +0 -0
  287. package/docs/previews/primitives-extendedlabel.webp +0 -0
  288. package/docs/previews/primitives-helpertext.webp +0 -0
  289. package/docs/previews/primitives-icon.webp +0 -0
  290. package/docs/previews/primitives-input.webp +0 -0
  291. package/docs/previews/primitives-inputgroup.webp +0 -0
  292. package/docs/previews/primitives-kbd.webp +0 -0
  293. package/docs/previews/primitives-label.webp +0 -0
  294. package/docs/previews/primitives-scrollarea.webp +0 -0
  295. package/docs/previews/primitives-separator.webp +0 -0
  296. package/docs/previews/primitives-table.webp +0 -0
  297. package/docs/previews/primitives-tabs.webp +0 -0
  298. package/docs/previews/primitives-textarea.webp +0 -0
  299. package/docs/previews/primitives-toggle.webp +0 -0
  300. package/docs/previews/primitives-togglegroup.webp +0 -0
  301. package/docs/previews/primitives-typography.webp +0 -0
  302. package/docs/previews/rich-widgets-chat-advanced.webp +0 -0
  303. package/docs/previews/rich-widgets-chat-composer.webp +0 -0
  304. package/docs/previews/rich-widgets-chat-inbox.webp +0 -0
  305. package/docs/previews/rich-widgets-chat-overview.webp +0 -0
  306. package/docs/previews/rich-widgets-chat-thread.webp +0 -0
  307. package/docs/previews/rich-widgets-chat-widget.webp +0 -0
  308. package/docs/previews/rich-widgets-codeeditor-diff.webp +0 -0
  309. package/docs/previews/rich-widgets-codeeditor.webp +0 -0
  310. package/docs/previews/rich-widgets-compacteditor.webp +0 -0
  311. package/docs/previews/rich-widgets-documenteditor.webp +0 -0
  312. package/docs/previews/rich-widgets-drawing.webp +0 -0
  313. package/docs/previews/rich-widgets-emojipicker.webp +0 -0
  314. package/docs/previews/rich-widgets-eventcalendar.webp +0 -0
  315. package/docs/previews/rich-widgets-kanban.webp +0 -0
  316. package/docs/previews/rich-widgets-mentionlist.webp +0 -0
  317. package/docs/previews/rich-widgets-native-charts-areachart.webp +0 -0
  318. package/docs/previews/rich-widgets-native-charts-barchart.webp +0 -0
  319. package/docs/previews/rich-widgets-native-charts-combochart.webp +0 -0
  320. package/docs/previews/rich-widgets-native-charts-donutchart.webp +0 -0
  321. package/docs/previews/rich-widgets-native-charts-funnelchart.webp +0 -0
  322. package/docs/previews/rich-widgets-native-charts-gauge.webp +0 -0
  323. package/docs/previews/rich-widgets-native-charts-heatmapchart.webp +0 -0
  324. package/docs/previews/rich-widgets-native-charts-linechart.webp +0 -0
  325. package/docs/previews/rich-widgets-native-charts-piechart.webp +0 -0
  326. package/docs/previews/rich-widgets-native-charts-radarchart.webp +0 -0
  327. package/docs/previews/rich-widgets-native-charts-radialbarchart.webp +0 -0
  328. package/docs/previews/rich-widgets-native-charts-scatterchart.webp +0 -0
  329. package/docs/previews/rich-widgets-questioncard.webp +0 -0
  330. package/docs/previews/rich-widgets-quiz.webp +0 -0
  331. package/docs/previews/rich-widgets-richchatcomposer.webp +0 -0
  332. package/docs/previews/rich-widgets-richtexteditor.webp +0 -0
  333. package/docs/previews/rich-widgets-richtextviewer.webp +0 -0
  334. package/docs/previews/selection-choice-autocomplete.webp +0 -0
  335. package/docs/previews/selection-choice-checkbox.webp +0 -0
  336. package/docs/previews/selection-choice-checkboxgroup.webp +0 -0
  337. package/docs/previews/selection-choice-checkcardfield.webp +0 -0
  338. package/docs/previews/selection-choice-chipgroupfield.webp +0 -0
  339. package/docs/previews/selection-choice-choicecardgroup.webp +0 -0
  340. package/docs/previews/selection-choice-colorswatches.webp +0 -0
  341. package/docs/previews/selection-choice-combobox.webp +0 -0
  342. package/docs/previews/selection-choice-comboboxfield.webp +0 -0
  343. package/docs/previews/selection-choice-optiontile.webp +0 -0
  344. package/docs/previews/selection-choice-radiogroup.webp +0 -0
  345. package/docs/previews/selection-choice-select.webp +0 -0
  346. package/docs/previews/selection-choice-selectfield.webp +0 -0
  347. package/docs/previews/selection-choice-sortablelist.webp +0 -0
  348. package/docs/previews/selection-choice-switcher.webp +0 -0
  349. package/docs/previews/selection-choice-transferlist.webp +0 -0
  350. package/docs/previews/selection-choice-treeselectfield.webp +0 -0
  351. package/docs/roadmap.md +22 -0
  352. package/docs/troubleshooting.md +69 -4
  353. package/lib/backgrounds/backgrounds.css +4 -0
  354. package/lib/backgrounds/css-react/celestial.css +200 -0
  355. package/lib/backgrounds/css-react/icons.css +175 -0
  356. package/lib/components/components.css +2 -5
  357. package/lib/components/ui/feedback/feedback.css +7 -0
  358. package/lib/components/ui/feedback/state-frame/illustration.css +171 -0
  359. package/lib/theme-picker/theme-picker.css +1 -0
  360. package/lib/theme-picker/theme-tile-icons.css +50 -0
  361. package/lib/theme-picker/theme-tile-textures-night.css +107 -1
  362. package/lib/themes/teal.css +2 -3
  363. package/package.json +28 -4
  364. package/dist/background--Bf_EbFR.js +0 -159
  365. package/dist/empty-state-s2CSjKXJ.js +0 -126
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # @nxgt/material
2
2
 
3
+ ## 3.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1413](https://github.com/softistx/nxgt-material/pull/1413) [`ffb9b9d`](https://github.com/softistx/nxgt-material/commit/ffb9b9dbce46bc9103d9b298fcf0d4a3eb392a7f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New entry `@nxgt/material/illustrations/education` exports `EDUCATION_SCENES`, `EDUCATION_SCENE_IDS`, `EDUCATION_SUGGESTED_ICONS` and the type `EducationScene`. `<IllustrationDefaults sets={[EDUCATION_SCENES]}>` registers the ten scenes (`classroom`, `homework`, `exam-grades`, `timetable`, `attendance`, `enrolment`, `library`, `graduation`, `no-students`, `report-card`), so `<Illustration scene="classroom" />` and `<EmptyState illustration="no-students" />` work; importing the entry adds the ids to `SceneId`. An app that does not import it does not carry the table.
8
+
9
+ - [#1410](https://github.com/softistx/nxgt-material/pull/1410) [`dbf208c`](https://github.com/softistx/nxgt-material/commit/dbf208cca40ae8e877c47dcefe9db01de28b1fd5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Illustration` draws five more scenes (`forbidden`, `maintenance`, `invitation`, `sign-in`, `empty-inbox`), and takes a `scenes` table. New entry `@nxgt/material/illustrations/health` exports `HEALTH_SCENES`, `HEALTH_SCENE_IDS`, `HEALTH_SUGGESTED_ICONS` and the type `HealthScene`. New types `SceneId`, `RegisteredScene`, `IllustrationSceneRegistry`, `SceneRow` and `SceneTable`. `<IllustrationDefaults sets={[HEALTH_SCENES]}>` registers any number of scene sets, so their ids work as strings in `Illustration`, a state's `illustration` and `emptyIllustration` (the `scenes` prop on one `Illustration` wins; an unknown id warns in development and draws the built-in art). Importing the health entry adds its ids to `SceneId` (module augmentation of `IllustrationSceneRegistry`); base ids stay strict, and an app that does not import it does not carry the table. `ErrorState` kinds `unauthorized` and `maintenance` now draw the `forbidden` and `maintenance` scenes where scenes are on, instead of `error`; `IllustrationDefaults` `icons` may name a domain scene's id.
10
+
11
+ - [#1407](https://github.com/softistx/nxgt-material/pull/1407) [`e619bf7`](https://github.com/softistx/nxgt-material/commit/e619bf7b936b19b289283c92e33e72ec7ffd8f45) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New entry `@nxgt/material/illustrations`: `Illustration` draws state scenes (`empty`, `no-results`, `not-found`, `error`, `offline`, `success`, `welcome`; the generic extras and the health and education sets are the entries below), a hero icon on a Material 3 Expressive plate with satellites and sparkles, from the Font Awesome sprites your app serves (`IconSpritesProvider` says where). It is decorative, or an image with an `aria-label` when it has a `title`, and has `size`, `animated`, `hero`, `satellites`, `iconStyle`, `tone` and `duotone`; the plate loads on demand and the server and client markup agree. `IllustrationDefaults` opts a subtree's `EmptyState` and `ErrorState` into the scenes (`icons: 'suggested'` or a table, `iconStyle`). `EmptyState`, `ErrorState` and the `DataTable` empty row (`emptyIllustration`) accept a scene id or `true` for `illustration`, next to a node or `false`; without it, and without the provider, they draw the same art as before. The `ill-*` classes ship in `styles.css`.
12
+
13
+ - [#1409](https://github.com/softistx/nxgt-material/pull/1409) [`c2e81f4`](https://github.com/softistx/nxgt-material/commit/c2e81f43b92f8c700d81b426e8c9ea70d2a4f114) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Background` draws the four celestial presets and a `sky` overlay (50 ids in `AVAILABLE_BACKGROUND_PRESETS`, 46 with `icons`). `preset="eclipse" | "meteor-shower" | "ringed-planet" | "northern-lights"` draws a discreet sky in the tone's colours (a faint multiplied watermark in light, silver light in dark, the body halved in a container under 640 px wide), and the new `sky` prop (`'moon'` or one of those four) lays one over any preset, after its layers and before the grain, with its own SVG ids. The theme's `background.sky` is read too, and a prop wins. The scenes come from `@nxgt/material-core/backgrounds/celestial`, loaded on demand: the first paint and the server's HTML hold the layers and the SVG fills in once the chunk has loaded (no hydration mismatch, and the registry bundle does not grow). `animated` twinkles the stars, glides and fades the meteors and drifts the ribbons, never under `prefers-reduced-motion`. New stylesheet `@nxgt/material/backgrounds/celestial.css` (also in `backgrounds.css`). `ThemePicker` draws a mini background for a theme that uses one of the four presets. React only.
14
+
15
+ - [#1408](https://github.com/softistx/nxgt-material/pull/1408) [`c64600e`](https://github.com/softistx/nxgt-material/commit/c64600e3271dd60383da60b67e666e3a3cf68bae) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Background` draws the new `icons` preset (46 ids in `AVAILABLE_BACKGROUND_PRESETS`, 50 with the celestial presets): Font Awesome icons as `<use>` of sprites your app serves, in four layouts (`scatter`, `grid`, `constellation`, `drift`). New props `icons` (a pack name, or up to 48 names and references; default the `school` pack), `iconStyle` (one style or a list of at most 8) and `iconMotif` (`layout`, `sizeRange`, `rotation`, `duotone`, `secondaryOpacity`, `calm`); a theme's `icons`, `iconStyle` and `iconMotif` are read too. The sprite base comes from `IconSpritesProvider`. The scene builder loads lazily, so the registry does not grow, and icons that cannot be drawn draw `scatter-icons` with a development warning. The stylesheet is `@nxgt/material/backgrounds/icons.css`, also in `backgrounds.css`; the animation is opt-in and never runs under `prefers-reduced-motion`. React only.
16
+
17
+ - [#1415](https://github.com/softistx/nxgt-material/pull/1415) [`b468b35`](https://github.com/softistx/nxgt-material/commit/b468b35e9ccea03a60297da1d2b32b4e056fc3ce) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A theme that names an icon motif (`background: { preset: 'icons', icons, iconStyle, iconMotif, sky }`) now shows it in `ThemePicker`: its tile draws the first four icons as `<use>` of the app's sprites (the `IconSpritesProvider` base, the `school` pack when the theme names none) in the tile's tones, and keeps its plain wash when a sprite or a name cannot be drawn. The picker stylesheet gains `theme-tile-icons.css`. `Background` and `ActivityLayout` already read the theme's icon keys; a new test pins that a theme alone dresses an `ActivityLayout`, and the theme guide has an "Icon motifs in a theme" section. The 14 shipped themes are unchanged.
18
+
19
+ - [#1397](https://github.com/softistx/nxgt-material/pull/1397) [`8ddec10`](https://github.com/softistx/nxgt-material/commit/8ddec1050129d8a964f7091310b5b2514cf209e6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `IconSpritesProvider` and `useSpriteBase` (from `@nxgt/material/components`): serve the Font Awesome sprites from another root-relative path, such as `<IconSpritesProvider base="/static/icons/">`; every `Icon` below it uses that base, and an unsafe base throws an `IconRefError`. `Icon` now renders `href` instead of `xlink:href` on its `<use>`. Fix: `<Icon family="duotone" type="solid" />` asked for the missing `duotone-solid.svg`; it now reads `duotone.svg`. Every other family and style keeps its URL. Needs `@nxgt/material-core` with the `/icons` subpath.
20
+
21
+ ### Patch Changes
22
+
23
+ - [#1425](https://github.com/softistx/nxgt-material/pull/1425) [`282e44d`](https://github.com/softistx/nxgt-material/commit/282e44db4a6e2b73580d348206540d2e79eecccf) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The docs preview images are drawn with Font Awesome Free sprites only, never Pro: `bun run docs:previews` serves Free sheets and fails when a story draws a Pro one.
24
+
25
+ - [#1428](https://github.com/softistx/nxgt-material/pull/1428) [`32c9151`](https://github.com/softistx/nxgt-material/commit/32c9151c2d2fbd1541abb64ef9177fda4ec5719f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Final polish of the icon motifs. The READMEs and the components gallery credit the icons of the previews: Font Awesome Free 7.3.1 by Fonticons, Inc., CC BY 4.0. `iconStyle` (`IconStyleRef`) takes `{ family?, type? }` or one of the 37 sprite file names (`IconSpriteFile`), which the editor completes; any other string is a type error (the run-time check is unchanged). `@nxgt/material/backgrounds` re-exports `IconMotifOptions`, `IconLayout`, `SkyPreset`, `CelestialPreset`, `IconsInput`, `IconStyleInput` and `IconStyleRef`, and `/illustrations` re-exports `IconStyleInput` and `IconStyleRef`.
26
+
27
+ - [#1424](https://github.com/softistx/nxgt-material/pull/1424) [`4b4ec0a`](https://github.com/softistx/nxgt-material/commit/4b4ec0a912434621424b3eafaa6dd1f1fc710315) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Docs for the icon motifs: a new guide, `docs/guides/icon-motifs.md`, ties together serving your own Font Awesome sprites (the packages ship none), `IconSpritesProvider`, icon backgrounds, the celestial presets and `sky`, the illustrations with the health and education sets, and a theme that names its motif; preview images drawn with the Free sprites; troubleshooting entries for blank icons, the `scatter-icons` fallback warning and an unknown scene; and the suggested icon names that exist in Font Awesome Pro only, with Free neighbours.
28
+
29
+ - [#1426](https://github.com/softistx/nxgt-material/pull/1426) [`d89cd18`](https://github.com/softistx/nxgt-material/commit/d89cd187296d4760b79f1ebd2c73f00fd030e767) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ActivityLayout` keeps the shapes of a background clear of the header strips that are rendered only: a strip with no client rects (the breadcrumb, hidden on a phone) no longer puts the app bar's resting line at 0, which had hidden every icon of the `icons` preset under it.
30
+
31
+ - [#1412](https://github.com/softistx/nxgt-material/pull/1412) [`c7ece6a`](https://github.com/softistx/nxgt-material/commit/c7ece6ae778830bfa1d3b39776c0a7110dfb4aa6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The `teal` preset's success colour no longer shares its primary's hue ([#1411](https://github.com/softistx/nxgt-material/issues/1411)). Success moves from hue 185 to 145 (a clearly greener `oklch(0.46 0.118 145)` in light, `oklch(0.6 0.118 145)` in dark), so a primary `Button` and a success `Badge` read as two colours; the lightness and chroma are the default's, so every success pair stays AA (light 6.77:1 on the page, dark 5.24:1). This is a visible change for apps on `teal` (success badges, alerts and toasts turn green); the primary and the 13 other presets are unchanged. `themeToCss` also judges `hue-near-status` against the status hue a theme's `tokens` end with, so the `teal` stylesheet no longer carries that warning.
32
+ - Updated dependencies [[`ffb9b9d`](https://github.com/softistx/nxgt-material/commit/ffb9b9dbce46bc9103d9b298fcf0d4a3eb392a7f), [`dbf208c`](https://github.com/softistx/nxgt-material/commit/dbf208cca40ae8e877c47dcefe9db01de28b1fd5), [`aa5c6f3`](https://github.com/softistx/nxgt-material/commit/aa5c6f3dcd9ebfb234d808080f437ddfed8bae38), [`54e50e0`](https://github.com/softistx/nxgt-material/commit/54e50e0a6026bf4943a3f0f57af1066897edc65b), [`3ba3551`](https://github.com/softistx/nxgt-material/commit/3ba3551b0612fb34514926ec8099289e7696476d), [`32c9151`](https://github.com/softistx/nxgt-material/commit/32c9151c2d2fbd1541abb64ef9177fda4ec5719f), [`4b4ec0a`](https://github.com/softistx/nxgt-material/commit/4b4ec0a912434621424b3eafaa6dd1f1fc710315), [`de6f680`](https://github.com/softistx/nxgt-material/commit/de6f6800cb2146f66d55efaa3b6fe2ea0ca56611), [`72e0865`](https://github.com/softistx/nxgt-material/commit/72e0865b07227fea1a3059f0807dc7aff0c07134), [`4d3b6d4`](https://github.com/softistx/nxgt-material/commit/4d3b6d4591907912c5922c390ea556f10d81052f), [`8ddec10`](https://github.com/softistx/nxgt-material/commit/8ddec1050129d8a964f7091310b5b2514cf209e6), [`1efc672`](https://github.com/softistx/nxgt-material/commit/1efc6721228e9684e13d734fe56403c058381816), [`c7ece6a`](https://github.com/softistx/nxgt-material/commit/c7ece6ae778830bfa1d3b39776c0a7110dfb4aa6)]:
33
+ - @nxgt/material-core@0.29.0
34
+
3
35
  ## 3.8.1
4
36
 
5
37
  ### Patch Changes
package/README.md CHANGED
@@ -151,6 +151,23 @@ the FA Pro licence covers use in your own products, not redistribution inside
151
151
  a library. `files` includes `"!dist/assets"` so a local build cannot leak them
152
152
  into a tarball. A missing sheet renders nothing, with no error and no fallback.
153
153
 
154
+ Serve them somewhere else with `IconSpritesProvider`, a root-relative path on
155
+ your own origin (a URL, `//host`, `..` or `:` throws an `IconRefError`):
156
+
157
+ ```tsx
158
+ import { Icon, IconSpritesProvider } from '@nxgt/material/components';
159
+
160
+ <IconSpritesProvider base="/static/icons/">
161
+ <Icon name="atom" type="solid" />
162
+ </IconSpritesProvider>;
163
+ // → /static/icons/solid.svg#atom
164
+ ```
165
+
166
+ `useSpriteBase()` reads the base. `family="duotone"` with `type="solid"` now
167
+ reads `duotone.svg`, the file that exists (it used to ask for the missing
168
+ `duotone-solid.svg`). The reference helpers (`spriteHref`, `resolveIcons`) are in
169
+ [`@nxgt/material-core/icons`](https://cdn.jsdelivr.net/npm/@nxgt/material-core@0/docs/icons.md).
170
+
154
171
  ## Subpaths
155
172
 
156
173
  | Specifier | What is in it |
@@ -165,7 +182,10 @@ into a tarball. A missing sheet renders nothing, with no error and no fallback.
165
182
  | `@nxgt/material/map` | Leaflet maps, markers, a location field — **its own entry, not in the barrel, and browser-only** ([maps guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/maps.md)) |
166
183
  | `@nxgt/material/themes` | `NxgtThemeProvider` (the registry, the persisted theme name, `<html data-nxgt-theme>`, `defaultMode`; renders no element; `useTheme({ defaultMode })` takes the first-visit mode too), `NxgtTheme` (a zone in another theme, `mode`, `asChild`), `useThemeContext`, `defineTheme`, `ThemeDefinitionError`, `themeBootScript` and `THEME_BOOT_SCRIPT` (with `ThemeBootOptions`), the 14 presets and `THEME_PRESETS`, `ThemeName` and `NxgtThemes` (augmentable), with the `NxgtThemeProps`, `NxgtThemeProviderProps`, `ThemeContextValue`, `Theme`, `ThemeDefinition` and `ThemeBackground` types ([guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/theming.md#the-provider-and-zones)). `Background` and `ActivityLayout` take their background from the nearest theme |
167
184
  | `@nxgt/material/theme-picker` | `ThemePicker`, the theme and mode chooser (swatches and a mini background per theme; `themes`, `value`, `onValueChange`, `showMode`, `showBackground`, `layout`) and `ThemePickerProps`; its own entry so `/themes` stays small ([guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/theming.md#let-users-choose)) |
168
- | `@nxgt/material/backgrounds` | Background presets: `Background` (a superset of the `/components` one: `preset`, `animated`, `grain`, `seed`, `fill` and `motif`), `AVAILABLE_BACKGROUND_PRESETS` and `AvailableBackgroundPreset` (the 45 ids `Background` draws), `MoonOptions` (the `moon` prop), `MOTIF_SHAPES_ALL` (the 22 motif shapes), the types and tables (`BACKGROUND_PRESETS`, `BACKGROUND_TONES`, ...) re-exported from `@nxgt/material-core/backgrounds`; its own entry, with an opt-in stylesheet ([backgrounds guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/backgrounds.md)) |
185
+ | `@nxgt/material/illustrations` | State illustrations: `Illustration` (`scene`: `empty`, `no-results`, `not-found`, `error`, `offline`, `success`, `welcome`, `forbidden`, `maintenance`, `invitation`, `sign-in`, `empty-inbox`, or an id of the `scenes` table it is given; `size`, `title`, `animated`, `hero`, `satellites`, `iconStyle`, `tone`, `duotone`) draws a hero icon on a Material 3 Expressive plate with satellites, from the Font Awesome sprites your app serves (no icon artwork ships); `IllustrationDefaults` (`icons`: `'suggested'` or a table, `iconStyle`, `sets`) opts a subtree's `EmptyState` and `ErrorState` into them; `ILLUSTRATION_SCENES`, `SUGGESTED_ICONS` and the types re-exported from `@nxgt/material-core/illustrations` (`SceneRow`, `SceneTable`), plus `IconStyleInput` and `IconStyleRef` (the `iconStyle` types: `{ family?, type? }` or one of the 37 sprite file names), `SceneId`, `RegisteredScene` and `IllustrationSceneRegistry`, the scene id type that an imported set's ids widen. `unauthorized` and `maintenance` states draw the `forbidden` and `maintenance` scenes. `EmptyState`, `ErrorState` and the `DataTable` empty row (`emptyIllustration`) also take `illustration` as a scene id or `true`. Colours are theme tones in `styles.css`; its own entry ([illustrations guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/illustrations.md)) |
186
+ | `@nxgt/material/illustrations/health` | The health scenes: `HEALTH_SCENES` (`patient-record`, `consultation`, `appointment`, `lab-sample`, `prescription`, `vaccination`, `hospitalisation`, `emergency`, `no-patients`, `lab-results`), `HEALTH_SCENE_IDS`, `HEALTH_SUGGESTED_ICONS`, `HealthScene`; register it with `<IllustrationDefaults sets={[HEALTH_SCENES]}>` so `<Illustration scene="patient-record" />` and `<EmptyState illustration="no-patients" />` work (or pass `scenes={HEALTH_SCENES}` to one `Illustration`); importing it adds the ids to `SceneId`. An app that does not import it does not carry it |
187
+ | `@nxgt/material/illustrations/education` | The education scenes: `EDUCATION_SCENES` (`classroom`, `homework`, `exam-grades`, `timetable`, `attendance`, `enrolment`, `library`, `graduation`, `no-students`, `report-card`), `EDUCATION_SCENE_IDS`, `EDUCATION_SUGGESTED_ICONS`, `EducationScene`; register it with `<IllustrationDefaults sets={[EDUCATION_SCENES]}>` so `<Illustration scene="classroom" />` and `<EmptyState illustration="no-students" />` work (or pass `scenes={EDUCATION_SCENES}` to one `Illustration`); importing it adds the ids to `SceneId`. An app that does not import it does not carry it |
188
+ | `@nxgt/material/backgrounds` | Background presets: `Background` (a superset of the `/components` one: `preset`, `animated`, `grain`, `seed`, `fill`, `motif`, and for `preset="icons"` `icons`, `iconStyle` and `iconMotif`), `AVAILABLE_BACKGROUND_PRESETS` and `AvailableBackgroundPreset` (the 50 ids `Background` draws), `MoonOptions` (the `moon` prop), `IconMotifOptions` (`iconMotif`), `IconLayout`, `SkyPreset` and `CelestialPreset` (the `sky` ids), `IconsInput` (`icons`), `IconStyleInput` and `IconStyleRef` (`iconStyle`: `{ family?, type? }` or one of the 37 sprite file names, completed by the editor, any other string is a type error), `sky` (`'moon'` or a celestial preset over any preset, also read from the theme's `background.sky`; the four celestial presets and `sky` share the opt-in `@nxgt/material/backgrounds/celestial.css`, also in `backgrounds.css`), `MOTIF_SHAPES_ALL` (the 22 motif shapes), the types and tables (`BACKGROUND_PRESETS`, `BACKGROUND_TONES`, ...) re-exported from `@nxgt/material-core/backgrounds`; its own entry, with an opt-in stylesheet ([backgrounds guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/backgrounds.md)) |
169
189
  | `@nxgt/material/editor` | The rich text editor: `DocumentEditor` and `DocumentEditorFormField` (with an `outline`, a block handle, focus mode, find and replace, `onUpload`, `onAssist` and `comments`), `CompactEditor` and `CompactEditorFormField`, `RichChatComposer`, `EditorRoot` and the parts (`EditorToolbar`, `EditorContent`, `EditorFooter`, `EditorAssistantPanel`, ...), `useEditor`, the kits (`documentKit`, `compactKit`, `chatKit`, `formNodesKit`), `withFeatures` / `withoutFeatures` and `defineFeature`, and the converters `toHtml`, `toJson`, `toMarkdown`, `fromMarkdown` and `looksLikeMarkdown` — **its own entry, and not in the barrel above**. **Client-only**: import it from a `'use client'` file; `/editor/viewer` is the server-safe one. The `.nxgt-prose` page styles ship in `styles.css` with the component CSS ([DocumentEditor](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#documenteditor)) |
170
190
  | `@nxgt/material/editor/viewer` | `RichTextViewer`: shows a saved document (HTML, JSON or Markdown) read-only, **server-safe**, with no editor instance and no `'use client'` ([RichTextViewer](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#richtextviewer)) |
171
191
  | `@nxgt/material/code-editor` | `CodeEditor`, `CodeEditorFormField` and `CodeDiff` on Monaco, their theme presets (`theme`: `'app'`, `'moonlight'`, `'soft'`, `CODE_THEMES`), `defineCodeTheme` for your own, the `CodeMarker` and `CodeMarkerSeverity` types of the `markers` prop, `CodeEditorHandle` (its `ref`), `CodeFile` (its `files`), and `configureMonaco` to bundle Monaco instead of loading it from the CDN. **Client-only**: import it from a `'use client'` file. They are no longer exported from the barrels (removed in 3.0; [guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/code-editor.md)) |
@@ -185,7 +205,7 @@ into a tarball. A missing sheet renders nothing, with no error and no fallback.
185
205
  | `@nxgt/material/styles.css` | source Tailwind v4 tokens. **This** is the file the app imports |
186
206
  | `@nxgt/material/map.css` | leaflet's stylesheet, for the apps that use `./map`. Not part of `styles.css` |
187
207
  | `@nxgt/material/galleries.css` | the Gallery's shaped tiles (`shape`, `preset="shaped"`): `clip-path: shape()` for twelve shapes, about 9 KB gzipped. Opt-in, not part of `styles.css`; without it a shaped tile keeps a rounded corner |
188
- | `@nxgt/material/backgrounds.css` | every background preset's CSS, for the apps that use `./backgrounds`; `@nxgt/material/backgrounds/<preset>.css` loads one (the illustrated scenes share `backgrounds/illustrated.css`). Not part of `styles.css` |
208
+ | `@nxgt/material/backgrounds.css` | every background preset's CSS, for the apps that use `./backgrounds`; `@nxgt/material/backgrounds/<preset>.css` loads one (`icons.css` for `preset="icons"`, `celestial.css` for the sky) (the illustrated scenes share `backgrounds/illustrated.css`). Not part of `styles.css` |
189
209
  | `@nxgt/material/theme-picker.css` | the tiles of `ThemePicker` (the mini backgrounds included), for the apps that use `@nxgt/material/theme-picker`. Import it after `styles.css`. Not part of `styles.css` |
190
210
  | `@nxgt/material/themes/<name>.css` | one shipped theme (`lavande`, `ocean`, `foret`, `ambre`, `ardoise`, `corail`, `menthe`, `prune`, `sable`, `slate`, `pink`, `bleumono`, `bluemoon`, `teal`) under `[data-nxgt-theme="<name>"]`, on `<html>` or on a zone. Import it after `styles.css`. Not part of `styles.css`: the default Lavande stays in `:root` ([guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/theming.md#themes)) |
191
211
 
@@ -391,6 +411,8 @@ Each area a consumer starts from has its own page under `docs/guides/`.
391
411
  | [Charts](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/charts.md) | drawing charts with `@nxgt/material/charts` (client-only): the twelve charts, shared props, legend, View data, `onPointClick`, zoom and phone scroll, right-to-left pages, keyboard and accessibility, theming the `--chart-*` tokens, and migrating from the Nivo charts, removed in 3.0 |
392
412
  | [Drawing](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/drawing.md) | drawing diagrams, badges and illustrations from code with `@nxgt/material/draw`: a scene or JSX, theme roles and tones, strict CSP, accessibility, events, sketch, animation, PNG, PDF and e-mail |
393
413
  | [Backgrounds](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/backgrounds.md) | tones, intensity, the opt-in `backgrounds.css` and per-preset files, custom tone tokens, motion and CSP |
414
+ | [Illustrations](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/illustrations.md) | `@nxgt/material/illustrations`: the twelve scenes and the health and education sets, icons from your sprites, `EmptyState` / `ErrorState` / `DataTable` with `illustration`, `IllustrationDefaults` for an app, sizes, motion and CSP |
415
+ | [Icon motifs](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/icon-motifs.md) | icon backgrounds, celestial skies, illustrations and themes together: serving your own Font Awesome sprites (the package ships none), `IconSpritesProvider`, `icons` / `iconStyle` / `iconMotif`, `sky`, the health and education sets, a theme naming its motif, Free fallbacks for Pro-only names |
394
416
  | [Media players](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/media.md) | `MediaPlayer`, `AudioPlayer`, playlists, chapters and transcript, sound that keeps playing across pages (`MediaPlayerHost`), the lightbox, HLS, CSP and keyboard |
395
417
  | [Streaming (HLS)](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/media-streaming.md) | `hlsStreaming()` from `@nxgt/material/media-hls`, the optional `hls.js` peer, native HLS, the quality menu, the CSP worker line |
396
418
  | [SSR](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/ssr.md) | rendering on a server: what the barrels guarantee, and `import()` + `clientOnly` (React's `use(browser())`) for browser-only code |
@@ -417,6 +439,8 @@ preview, an example and the options that matter. In the
417
439
  *Component* column, `·` separates a field from its React Hook Form wrapper.
418
440
  The last column gives the matching export in `@nxgt/material-vue`, or `—` when
419
441
  Vue has none. "(same parts)" means Vue exports the same sub-components.
442
+
443
+ Icons in the previews: Font Awesome Free 7.3.1 by Fonticons, Inc., CC BY 4.0 — https://fontawesome.com/license/free
420
444
  React-only today: `Combobox` (not planned in Vue), `StepperIndicator`, and for now `Fab`, `FabDock`, `FabMenu`, `Toolbar` and `ToolbarPair` (#866); Vue's `SplitButton` keeps the earlier look until then.
421
445
 
422
446
  ### Foundations
@@ -426,7 +450,7 @@ Not components: what the stylesheet gives any element.
426
450
  | Preview | Component | What it does | @nxgt/material-vue |
427
451
  | --- | --- | --- | --- |
428
452
  | — | [`animate-*` classes](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/animations.md) | Tailwind 4 animations and their modifiers, pure CSS: `animate-fade-in-up animate-duration-500 animate-delay-200`, with the Material 3 springs by default. Entrances and exits, attention seekers, loops and ambient motion, stagger (`animate-stagger-100`), text reveals, scroll-driven animation (`animate-on-view`) and appear/disappear (`animate-appear-*`); under reduced motion a short fade, or no motion for loops and scroll. | — |
429
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/foundations-themes-themepicker.webp" width="120" alt="ThemePicker"> | [`ThemePicker`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/foundations.md#themepicker) (from `@nxgt/material/theme-picker`) | A radiogroup of theme tiles, each previewing its own theme (three swatches and a mini background, drawn by CSS) beside the light / dark / system control; `grid` or `list` layout, controlled or stored. | — |
453
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/foundations-themes-themepicker.webp" width="120" alt="ThemePicker"> | [`ThemePicker`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/foundations.md#themepicker) (from `@nxgt/material/theme-picker`) | A radiogroup of theme tiles, each previewing its own theme (three swatches and a mini background, drawn by CSS, with a few icons for a theme that names an icon motif) beside the light / dark / system control; `grid` or `list` layout, controlled or stored. | — |
430
454
 
431
455
  ### Primitives
432
456
 
@@ -618,7 +642,7 @@ Not components: what the stylesheet gives any element.
618
642
  | <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` |
619
643
  | <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. | `Hero` |
620
644
  | <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) |
621
- | <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; 45 presets on `/backgrounds`. | `Background` |
645
+ | <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; 50 presets on `/backgrounds`, and a `sky` overlay. | `Background` |
622
646
  | — | [`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` |
623
647
 
624
648
  ### Overlays & menus
@@ -0,0 +1,247 @@
1
+ import { r as e } from "./rolldown-runtime-BFFgcFxR.js";
2
+ import { t } from "./is-production-GLw59WU8.js";
3
+ import { n } from "./icon-sprites-CZ3vcD7P.js";
4
+ import { a as r, t as i } from "./theme-context-Cofk6vgs.js";
5
+ import { t as a } from "./compose-refs-DZ0iIVF-.js";
6
+ import { t as o } from "./use-background-activity-KxQgelFF.js";
7
+ import { t as s } from "./scene-svg-DJKa5vsg.js";
8
+ import { n as c, r as l, t as u } from "./scene-options-CCy3V7XS.js";
9
+ import { Suspense as d, lazy as f, memo as p, useId as ee, useMemo as m, useRef as h } from "react";
10
+ import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
11
+ import { IconRefError as y, resolveIconStyles as b, resolveIcons as x } from "@nxgt/material-core/icons";
12
+ import { SCENE_LAYER as S, buildBackgroundScene as C, presetLayers as w, resolveBackgroundPreset as T, svgIdPrefix as E } from "@nxgt/material-core/backgrounds";
13
+ //#region lib/backgrounds/background/available.ts
14
+ var D = [
15
+ "gradient",
16
+ "grain",
17
+ "mesh",
18
+ "aurora",
19
+ "spotlight",
20
+ "bokeh",
21
+ "rays",
22
+ "halo",
23
+ "plasma",
24
+ "glass",
25
+ "ripples",
26
+ "blobs",
27
+ "paper",
28
+ "linen",
29
+ "concrete",
30
+ "marble"
31
+ ], O = [
32
+ "isometric",
33
+ "blueprint",
34
+ "dots",
35
+ "stripes",
36
+ "low-poly",
37
+ "topography",
38
+ "waves",
39
+ "hexagons",
40
+ "circuit",
41
+ "graph-paper",
42
+ "checker",
43
+ "diagonal-checker",
44
+ "chevrons"
45
+ ], k = [
46
+ "shapes",
47
+ "confetti-grid",
48
+ "constellation",
49
+ "halftone",
50
+ "truchet",
51
+ "floating",
52
+ "scatter-icons",
53
+ "school",
54
+ "night-sky",
55
+ "bubbles",
56
+ "leaves",
57
+ "science",
58
+ "music",
59
+ "travel",
60
+ "sport",
61
+ "moon",
62
+ "icons"
63
+ ], A = [
64
+ "eclipse",
65
+ "meteor-shower",
66
+ "ringed-planet",
67
+ "northern-lights"
68
+ ], j = (e) => A.includes(e), M = [
69
+ ...D,
70
+ ...O,
71
+ ...k,
72
+ ...A
73
+ ], N = f(() => import("./icons-scene-bA7I4wdP.js"));
74
+ function P(e) {
75
+ return /* @__PURE__ */ _("div", {
76
+ "data-scene": "",
77
+ "aria-hidden": "true",
78
+ children: /* @__PURE__ */ _(d, {
79
+ fallback: null,
80
+ children: /* @__PURE__ */ _(N, { ...e })
81
+ })
82
+ });
83
+ }
84
+ //#endregion
85
+ //#region lib/backgrounds/background/partials/background-layers.tsx
86
+ var F = f(() => import("./celestial-scene-DaOsRFF3.js")), I = p(function({ preset: e, scene: t, grain: n, sky: r, icons: i, ...a }) {
87
+ return /* @__PURE__ */ v(g, { children: [
88
+ w(e).map((n) => n === S ? i ? /* @__PURE__ */ _(P, { ...i }, n) : j(e) ? /* @__PURE__ */ _("div", {
89
+ "data-scene": "",
90
+ "data-celestial": "",
91
+ "aria-hidden": "true",
92
+ children: /* @__PURE__ */ _(d, {
93
+ fallback: null,
94
+ children: /* @__PURE__ */ _(F, {
95
+ name: e,
96
+ as: "preset",
97
+ ...a
98
+ })
99
+ })
100
+ }, n) : t && /* @__PURE__ */ _("div", {
101
+ "data-scene": "",
102
+ "aria-hidden": "true",
103
+ children: /* @__PURE__ */ _(s, { node: t })
104
+ }, n) : /* @__PURE__ */ _("div", {
105
+ "data-layer": n,
106
+ "aria-hidden": "true"
107
+ }, n)),
108
+ r && /* @__PURE__ */ _("div", {
109
+ "data-layer": "sky-scene",
110
+ "data-scene": "",
111
+ "data-celestial": "",
112
+ "aria-hidden": "true",
113
+ children: /* @__PURE__ */ _(d, {
114
+ fallback: null,
115
+ children: /* @__PURE__ */ _(F, {
116
+ name: r,
117
+ as: "sky",
118
+ base: e,
119
+ ...a
120
+ })
121
+ })
122
+ }),
123
+ n && /* @__PURE__ */ _("div", {
124
+ "data-overlay": "grain",
125
+ "aria-hidden": "true",
126
+ children: /* @__PURE__ */ _(s, { node: n })
127
+ })
128
+ ] });
129
+ });
130
+ //#endregion
131
+ //#region lib/backgrounds/background/partials/icons-check.ts
132
+ function L(e, t) {
133
+ try {
134
+ return e !== void 0 && x(e), b(t), null;
135
+ } catch (e) {
136
+ if (e instanceof y) return e.message;
137
+ throw e;
138
+ }
139
+ }
140
+ //#endregion
141
+ //#region lib/backgrounds/background/partials/icons-keys.ts
142
+ var R = Object.keys({
143
+ layout: 1,
144
+ sizeRange: 1,
145
+ rotation: 1,
146
+ duotone: 1,
147
+ secondaryOpacity: 1,
148
+ calm: 1
149
+ });
150
+ function z(e) {
151
+ return JSON.stringify(Object.fromEntries(R.flatMap((t) => e?.[t] === void 0 ? [] : [[t, e[t]]])));
152
+ }
153
+ //#endregion
154
+ //#region lib/backgrounds/background/partials/use-icons-scene.ts
155
+ function B(e, { icons: r, iconStyle: i, iconMotif: a, seed: o, animated: s }) {
156
+ let c = n(), l = JSON.stringify(r ?? null), u = JSON.stringify(i ?? null), d = z(a), f = m(() => {
157
+ if (e !== "icons") return null;
158
+ let n = L(JSON.parse(l) ?? void 0, JSON.parse(u) ?? void 0);
159
+ return n && !t() && console.warn(`Background: icons cannot be drawn (${n}); drawing "scatter-icons" instead.`), n;
160
+ }, [
161
+ e,
162
+ l,
163
+ u
164
+ ]) ? "scatter-icons" : e;
165
+ return {
166
+ preset: f,
167
+ iconsScene: m(() => f === "icons" ? {
168
+ seed: o,
169
+ iconsKey: l,
170
+ styleKey: u,
171
+ motifKey: d,
172
+ spriteBase: c,
173
+ animated: s
174
+ } : void 0, [
175
+ f,
176
+ o,
177
+ l,
178
+ u,
179
+ d,
180
+ c,
181
+ s
182
+ ])
183
+ };
184
+ }
185
+ //#endregion
186
+ //#region lib/backgrounds/background/background.tsx
187
+ var V = /* @__PURE__ */ e({ Background: () => G }), H = (e) => console.warn(e);
188
+ function U(e, t, n, r, i, a) {
189
+ return e === "grain" ? null : C(e, l(t, n, r, i, a));
190
+ }
191
+ function W(e, t) {
192
+ return C("grain", {
193
+ idPrefix: `${e}-grain`,
194
+ seed: t
195
+ });
196
+ }
197
+ function G({ children: e, ref: n, preset: s, tone: l, intensity: d, animated: f, grain: p, seed: g, motif: y, moon: b, sky: x, icons: S, iconStyle: C, iconMotif: w, fill: D = "viewport", ...O }) {
198
+ let k = r()?.background || i, A = s ?? k.preset, j = l ?? k.tone ?? i.tone, N = d ?? k.intensity ?? i.intensity, P = f ?? k.animated ?? !1, F = p ?? k.grain ?? !1, L = g ?? k.seed ?? 0, R = y ?? k.motif, z = b ?? k.moon, V = x ?? k.sky, G = h(null), K = m(() => a(G, n), [n]), q = o(G, P), J = E(ee()), { preset: Y, iconsScene: te } = B(T(A, M, t() ? void 0 : H), {
199
+ icons: S ?? k.icons,
200
+ iconStyle: C ?? k.iconStyle,
201
+ iconMotif: w ?? k.iconMotif,
202
+ seed: L,
203
+ animated: P
204
+ }), X = F || Y === "grain", Z = R?.shapes ? [...new Set(R.shapes)].sort().join(",") : void 0, Q = JSON.stringify(c(R)), $ = JSON.stringify(u(z)), ne = m(() => U(Y, J, L, Z, Q, $), [
205
+ Y,
206
+ J,
207
+ L,
208
+ Z,
209
+ Q,
210
+ $
211
+ ]), re = m(() => X ? W(J, L) : null, [
212
+ X,
213
+ J,
214
+ L
215
+ ]);
216
+ return /* @__PURE__ */ v("div", {
217
+ "data-slot": "background",
218
+ ...O,
219
+ ref: K,
220
+ "data-background": Y === "grain" ? "gradient" : Y,
221
+ "data-preset": Y,
222
+ "data-tone": j,
223
+ "data-intensity": N,
224
+ "data-fill": D === "container" ? D : void 0,
225
+ "data-animated": P ? "" : void 0,
226
+ "data-grain": X ? "" : void 0,
227
+ "data-sky": V,
228
+ "data-paused": P && q ? "" : void 0,
229
+ children: [/* @__PURE__ */ _(I, {
230
+ preset: Y,
231
+ scene: ne,
232
+ grain: re,
233
+ sky: V,
234
+ idPrefix: J,
235
+ seed: L,
236
+ shapesKey: Z,
237
+ scalarsKey: Q,
238
+ moonKey: $,
239
+ icons: te
240
+ }), /* @__PURE__ */ _("div", {
241
+ "data-slot": "background-content",
242
+ children: e
243
+ })]
244
+ });
245
+ }
246
+ //#endregion
247
+ export { V as n, M as r, G as t };
@@ -51,6 +51,10 @@
51
51
  @import "./css-react/sport.css";
52
52
  /* the moon (React only) */
53
53
  @import "./css-react/moon.css";
54
+ /* the celestial presets and the sky overlay (React only) */
55
+ @import "./css-react/celestial.css";
56
+ /* icons (React only) */
57
+ @import "./css-react/icons.css";
54
58
  /* motifs */
55
59
  @import "./css/motifs.css";
56
60
  @import "./css/shapes.css";
@@ -0,0 +1,200 @@
1
+ /* The celestial presets (`eclipse`, `meteor-shower`, `ringed-planet`,
2
+ * `northern-lights`) and the `sky` overlay, which draws the moon or one of
3
+ * them over any preset. Core's `/backgrounds/celestial` builds the scenes: the
4
+ * root is `mn cl-<preset>`, the colours are the `k1..k3` and `s1..s3` classes
5
+ * of scene.css, and a scene holds no inline style. Both kinds of scene sit in
6
+ * a `[data-scene][data-celestial]` div, which is what this file styles, so the
7
+ * look is the same alone and as a sky. Discreet like `moon.css`: a faint
8
+ * watermark in light (multiplied into the page), silver light in dark.
9
+ *
10
+ * Motion (opt-in, `animated`): stars twinkle, meteors glide, ribbons drift;
11
+ * never under `prefers-reduced-motion`. React only. */
12
+ @import "../css/scene.css";
13
+
14
+ @layer components {
15
+ /* The wash behind a celestial preset, as the moon's: two faint pools of
16
+ * the tone, the strength each intensity sets. */
17
+ :is(
18
+ [data-background="eclipse"],
19
+ [data-background="meteor-shower"],
20
+ [data-background="ringed-planet"]
21
+ ) > [data-layer="wash"] {
22
+ position: absolute;
23
+ inset: 0;
24
+ background:
25
+ radial-gradient(
26
+ ellipse 70% 60% at 80% 16%,
27
+ color-mix(in oklab, var(--nxgt-bg-c3) var(--nxgt-bg-a1), transparent),
28
+ transparent 72%
29
+ ),
30
+ radial-gradient(
31
+ ellipse 60% 55% at 12% 92%,
32
+ color-mix(in oklab, var(--nxgt-bg-c1) var(--nxgt-bg-a1), transparent),
33
+ transparent 70%
34
+ );
35
+ }
36
+
37
+ /* The lights hang from the top edge: a pool across it, one at the foot. */
38
+ [data-background="northern-lights"] > [data-layer="wash"] {
39
+ position: absolute;
40
+ inset: 0;
41
+ background:
42
+ radial-gradient(
43
+ ellipse 90% 45% at 50% 0%,
44
+ color-mix(in oklab, var(--nxgt-bg-c3) var(--nxgt-bg-a1), transparent),
45
+ transparent 75%
46
+ ),
47
+ radial-gradient(
48
+ ellipse 60% 50% at 14% 96%,
49
+ color-mix(in oklab, var(--nxgt-bg-c1) var(--nxgt-bg-a1), transparent),
50
+ transparent 70%
51
+ );
52
+ }
53
+
54
+ [data-background] > [data-scene][data-celestial] {
55
+ overflow: hidden;
56
+ container: nxgt-sky / inline-size;
57
+ /* In light the scene is multiplied into the page: a faint watermark. */
58
+ mix-blend-mode: multiply;
59
+ }
60
+
61
+ /* The scene is written for 0.8 at the default strength: subtle 0.47,
62
+ * vivid the full 1. */
63
+ [data-background] > [data-scene][data-celestial] > .mn :is(.mo, .mh) {
64
+ opacity: calc(var(--nxgt-bg-op) / 0.9);
65
+ }
66
+
67
+ /* The scene has no viewBox (lengths are pixels, positions shares of the
68
+ * container): its bodies, halos and stars draw past their own origin. */
69
+ [data-background] > [data-scene][data-celestial] .pt {
70
+ overflow: visible;
71
+ }
72
+
73
+ /* The lit part of the body is lighter still. */
74
+ [data-background] > [data-scene][data-celestial] .md {
75
+ opacity: 0.55;
76
+ }
77
+
78
+ /* A narrow container: the moon and the eclipse at half size and the
79
+ * planet and its ring at two thirds, so they stay whole in their corner
80
+ * (the cut-out of an eclipse or a planet is in its halo too). */
81
+ @container nxgt-sky (max-width: 640px) {
82
+ [data-background]
83
+ > [data-scene][data-celestial]
84
+ .mn:not(.cl-ringed-planet)
85
+ .mg
86
+ > .mo,
87
+ [data-background] > [data-scene][data-celestial] .cl-eclipse .mh > circle {
88
+ transform: scale(0.5);
89
+ }
90
+ [data-background]
91
+ > [data-scene][data-celestial]
92
+ .cl-ringed-planet
93
+ :is(.mg > .mo, .mh > circle) {
94
+ transform: scale(0.65);
95
+ }
96
+ }
97
+
98
+ /* In dark it adds nothing but light, and the body is silver, lighter than the lifted tone. */
99
+ :is(.dark, [data-theme="dark"])
100
+ [data-background]
101
+ > [data-scene][data-celestial],
102
+ [data-background]:is(.dark, [data-theme="dark"])
103
+ > [data-scene][data-celestial] {
104
+ mix-blend-mode: normal;
105
+ }
106
+ :is(.dark, [data-theme="dark"])
107
+ [data-background]
108
+ > [data-scene][data-celestial]
109
+ .md,
110
+ [data-background]:is(.dark, [data-theme="dark"])
111
+ > [data-scene][data-celestial]
112
+ .md {
113
+ color: color-mix(in oklab, var(--nxgt-bg-c2) 30%, white);
114
+ opacity: 0.78;
115
+ }
116
+
117
+ /* The delay classes (`l1..l4`) only set a number, which the animations
118
+ * above read: one rule each, whatever an animation's own specificity. */
119
+ [data-background] > [data-scene][data-celestial] .l1 {
120
+ --nxgt-sky-delay: 0s;
121
+ }
122
+ [data-background] > [data-scene][data-celestial] .l2 {
123
+ --nxgt-sky-delay: -2.5s;
124
+ }
125
+ [data-background] > [data-scene][data-celestial] .l3 {
126
+ --nxgt-sky-delay: -5s;
127
+ }
128
+ [data-background] > [data-scene][data-celestial] .l4 {
129
+ --nxgt-sky-delay: -7.5s;
130
+ }
131
+
132
+ /* The ribbons and the meteors move from their own box. */
133
+ [data-background] > [data-scene][data-celestial] .cl-northern-lights .au {
134
+ transform-box: fill-box;
135
+ transform-origin: 50% 0;
136
+ }
137
+ }
138
+
139
+ @media (prefers-reduced-motion: no-preference) {
140
+ @keyframes nxgt-bg-sky-twinkle {
141
+ to {
142
+ opacity: 0.3;
143
+ }
144
+ }
145
+ @keyframes nxgt-bg-sky-meteor-fade {
146
+ 0%,
147
+ 100% {
148
+ opacity: 0;
149
+ }
150
+ 6% {
151
+ opacity: 1;
152
+ }
153
+ 30% {
154
+ opacity: 0;
155
+ }
156
+ }
157
+ @keyframes nxgt-bg-sky-meteor-glide {
158
+ 0%,
159
+ 100% {
160
+ transform: translate(0, 0);
161
+ }
162
+ 30% {
163
+ transform: translate(-72px, 48px);
164
+ }
165
+ }
166
+ @keyframes nxgt-bg-sky-drift {
167
+ to {
168
+ transform: translate(3px, 1px) scaleY(1.1);
169
+ }
170
+ }
171
+
172
+ @layer components {
173
+ [data-background][data-animated] > [data-scene][data-celestial] .tw {
174
+ animation: nxgt-bg-sky-twinkle 8s ease-in-out var(--nxgt-sky-delay, 0s)
175
+ infinite alternate var(--nxgt-bg-play, running);
176
+ }
177
+ [data-background][data-animated]
178
+ > [data-scene][data-celestial]
179
+ .cl-meteor-shower
180
+ .mt {
181
+ animation: nxgt-bg-sky-meteor-fade 10s linear var(--nxgt-sky-delay, 0s)
182
+ infinite var(--nxgt-bg-play, running);
183
+ }
184
+ [data-background][data-animated]
185
+ > [data-scene][data-celestial]
186
+ .cl-meteor-shower
187
+ .mt
188
+ > .mo {
189
+ animation: nxgt-bg-sky-meteor-glide 10s ease-out var(--nxgt-sky-delay, 0s)
190
+ infinite var(--nxgt-bg-play, running);
191
+ }
192
+ [data-background][data-animated]
193
+ > [data-scene][data-celestial]
194
+ .cl-northern-lights
195
+ .au {
196
+ animation: nxgt-bg-sky-drift 14s ease-in-out var(--nxgt-sky-delay, 0s)
197
+ infinite alternate var(--nxgt-bg-play, running);
198
+ }
199
+ }
200
+ }