@nxgt/material 3.68.0 → 3.71.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 (163) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/README.md +13 -9
  3. package/dist/{alert-dialog-BhARh_qC.js → alert-dialog-y2pbowVh.js} +1 -1
  4. package/dist/{async-slice-CHyRU5V3.js → async-slice-CGfWBOaV.js} +1 -1
  5. package/dist/{button-Du7fJ9i_.js → button-D54Hrjo0.js} +1 -1
  6. package/dist/charts.js +3 -3
  7. package/dist/{chip-BVB6UYl-.js → chip-B5MhXBfm.js} +2 -2
  8. package/dist/{code-editor-D-GBs2yu.js → code-editor-mULs4SL8.js} +5 -5
  9. package/dist/code-editor.js +5 -5
  10. package/dist/{code-language-items-xrgq1Am0.js → code-language-items-BWDnqUqn.js} +2 -2
  11. package/dist/components/ui/collections/server-table/server-table-phone-row.css +6 -0
  12. package/dist/components/ui/display/code/code-moonlight.css +37 -0
  13. package/dist/{components-iNCh4A6M.js → components-B_taYVcd.js} +19740 -18682
  14. package/dist/components.js +28 -28
  15. package/dist/{dialog-DFY_nsqF.js → dialog-AjCYZ2Vz.js} +4 -4
  16. package/dist/dnd.js +1 -1
  17. package/dist/{dropdown-menu-B6Yh4XJu.js → dropdown-menu-LN60hu_3.js} +1 -1
  18. package/dist/editor.js +673 -673
  19. package/dist/{empty-state-DGtwE50c.js → empty-state-Bo8G8W8G.js} +2 -2
  20. package/dist/{field-blur-Br7ij-a1.js → field-blur-Cnd6FfCH.js} +1 -1
  21. package/dist/{field-blur-context-CucMAZLj.js → field-blur-context-bUFZj8iN.js} +1 -1
  22. package/dist/{hooks-CYQJkKGc.js → hooks-Dt4PkQiZ.js} +2 -2
  23. package/dist/hooks.js +3 -3
  24. package/dist/{hover-card-C2J0GwWf.js → hover-card-QtGnvsnc.js} +1 -1
  25. package/dist/i18n.js +3 -3
  26. package/dist/{icon-badge-LzO5K6Wu.js → icon-badge-DLbpCQIm.js} +3 -3
  27. package/dist/{icon-button-vLJ4YrEW.js → icon-button-C59DqL7L.js} +1 -1
  28. package/dist/lib/components/ui/actions/fab/fab-dock-inset.d.ts +29 -0
  29. package/dist/lib/components/ui/actions/fab/fab-dock.d.ts +6 -1
  30. package/dist/lib/components/ui/collections/data-table/select-checkbox.d.ts +3 -2
  31. package/dist/lib/components/ui/collections/filter/use-filter-field-config.d.ts +3 -3
  32. package/dist/lib/components/ui/collections/index.d.ts +1 -0
  33. package/dist/lib/components/ui/collections/record-actions-menu/index.d.ts +2 -0
  34. package/dist/lib/components/ui/collections/record-actions-menu/record-actions-dialogs.d.ts +15 -0
  35. package/dist/lib/components/ui/collections/record-actions-menu/record-actions-menu.d.ts +72 -0
  36. package/dist/lib/components/ui/collections/record-actions-menu/record-actions-rules.d.ts +68 -0
  37. package/dist/lib/components/ui/collections/record-actions-menu/record-actions-words.d.ts +52 -0
  38. package/dist/lib/components/ui/collections/record-actions-menu/use-record-actions.d.ts +51 -0
  39. package/dist/lib/components/ui/collections/record-actions-menu/use-record-flight.d.ts +16 -0
  40. package/dist/lib/components/ui/collections/row-menu/row-menu-column.d.ts +4 -0
  41. package/dist/lib/components/ui/collections/row-menu/row-menu.d.ts +1 -1
  42. package/dist/lib/components/ui/collections/server-table/partials/server-table-band-classes.d.ts +7 -5
  43. package/dist/lib/components/ui/collections/server-table/partials/server-table-column-sorting.d.ts +7 -0
  44. package/dist/lib/components/ui/collections/server-table/types.d.ts +3 -1
  45. package/dist/lib/components/ui/display/markdown/markdown.d.ts +12 -1
  46. package/dist/lib/components/ui/display/markdown/markdown.utils.d.ts +2 -0
  47. package/dist/lib/components/ui/display/markdown/mermaid-csp-scope.d.ts +8 -0
  48. package/dist/lib/components/ui/display/markdown/mermaid-markup.d.ts +20 -0
  49. package/dist/lib/components/ui/display/markdown/partials/markdown-code.d.ts +5 -1
  50. package/dist/lib/components/ui/feedback/confirm-dialog/action-refusal.d.ts +24 -0
  51. package/dist/lib/components/ui/feedback/confirm-dialog/confirm-alert.d.ts +17 -0
  52. package/dist/lib/components/ui/feedback/confirm-dialog/confirm-description.d.ts +10 -0
  53. package/dist/lib/components/ui/feedback/confirm-dialog/confirm-dialog.d.ts +24 -2
  54. package/dist/lib/components/ui/feedback/confirm-dialog/confirm-refusal.d.ts +7 -0
  55. package/dist/lib/components/ui/feedback/confirm-dialog/index.d.ts +1 -0
  56. package/dist/lib/components/ui/feedback/confirm-dialog/use-confirm-action.d.ts +6 -0
  57. package/dist/lib/components/ui/feedback/index.d.ts +1 -0
  58. package/dist/lib/components/ui/feedback/stale-notice/index.d.ts +1 -0
  59. package/dist/lib/components/ui/feedback/stale-notice/stale-notice.d.ts +15 -0
  60. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  61. package/dist/lib/components/ui/fields/country-field/index.d.ts +2 -0
  62. package/dist/lib/components/ui/fields/country-field/iso-countries.d.ts +2 -0
  63. package/dist/lib/components/ui/fields/index.d.ts +1 -0
  64. package/dist/lib/components/ui/fields/phone-field/index.d.ts +1 -1
  65. package/dist/lib/components/ui/fields/phone-field/parse-phone.d.ts +2 -0
  66. package/dist/lib/components/ui/fields/phone-field/phone-field.d.ts +8 -1
  67. package/dist/lib/components/ui/fields/phone-field/phone-form-field.d.ts +8 -1
  68. package/dist/lib/components/ui/fields/phone-field/use-phone-value.d.ts +2 -1
  69. package/dist/lib/components/ui/fields/postal-address/utils.d.ts +15 -0
  70. package/dist/lib/components/ui/fields/quantity-field/index.d.ts +3 -0
  71. package/dist/lib/components/ui/fields/quantity-field/quantity-field.d.ts +8 -0
  72. package/dist/lib/components/ui/fields/quantity-field/quantity-form-field.d.ts +8 -0
  73. package/dist/lib/components/ui/fields/quantity-field/quantity-row.d.ts +13 -0
  74. package/dist/lib/components/ui/fields/quantity-field/quantity-unit.d.ts +12 -0
  75. package/dist/lib/components/ui/fields/quantity-field/quantity-value.d.ts +9 -0
  76. package/dist/lib/components/ui/fields/quantity-field/types.d.ts +45 -0
  77. package/dist/lib/components/ui/forms/index.d.ts +1 -0
  78. package/dist/lib/components/ui/forms/use-server-field-errors.d.ts +21 -0
  79. package/dist/lib/components/ui/layout/index.d.ts +1 -0
  80. package/dist/lib/components/ui/layout/record-page/index.d.ts +2 -0
  81. package/dist/lib/components/ui/layout/record-page/record-details.d.ts +40 -0
  82. package/dist/lib/components/ui/layout/record-page/record-page.d.ts +27 -0
  83. package/dist/lib/components/ui/media/upload/index.d.ts +1 -0
  84. package/dist/lib/components/ui/media/upload/network-upload-field/network-upload-field.d.ts +6 -1
  85. package/dist/lib/components/ui/media/upload/network-upload-field/network-upload-field.errors.d.ts +8 -0
  86. package/dist/lib/components/ui/media/upload/network-upload-field/network-upload-field.utils.d.ts +2 -7
  87. package/dist/lib/components/ui/media/upload/network-upload-field/use-start-upload.d.ts +7 -3
  88. package/dist/lib/components/ui/media/upload/network-upload-field/use-upload-item-handlers.d.ts +2 -1
  89. package/dist/lib/components/ui/media/upload/s3-upload-field/s3-upload-field.d.ts +2 -5
  90. package/dist/lib/components/ui/media/upload/s3-upload-field/s3-upload-field.utils.d.ts +26 -1
  91. package/dist/lib/components/ui/media/upload/upload-error.d.ts +33 -0
  92. package/dist/lib/components/ui/selection/autocomplete/autocomplete-enter.d.ts +18 -0
  93. package/dist/lib/components/ui/selection/autocomplete/partials/autocomplete-chip-input.d.ts +2 -1
  94. package/dist/lib/components/ui/selection/autocomplete/partials/autocomplete-text-input.d.ts +2 -1
  95. package/dist/lib/components/ui/selection/autocomplete/types.d.ts +3 -1
  96. package/dist/lib/components/ui/widgets/chat/chat-conversation-item.d.ts +8 -2
  97. package/dist/lib/components/ui/widgets/chat/chat-markdown.d.ts +4 -0
  98. package/dist/lib/components/ui/widgets/chat/chat-message-list.d.ts +8 -1
  99. package/dist/lib/components/ui/widgets/chat/index.d.ts +2 -0
  100. package/dist/lib/components/ui/widgets/chat/partials/chat-conversation-item-text.d.ts +2 -1
  101. package/dist/lib/components/ui/widgets/chat/partials/chat-empty-thread.d.ts +2 -0
  102. package/dist/lib/components/ui/widgets/chat/proposal/chat-action-proposal-parts.d.ts +24 -0
  103. package/dist/lib/components/ui/widgets/chat/proposal/chat-action-proposal.d.ts +39 -0
  104. package/dist/lib/components/ui/widgets/chat/proposal/chat-action-proposal.rules.d.ts +17 -0
  105. package/dist/lib/components/ui/widgets/chat/proposal/chat-tool-activity.d.ts +16 -0
  106. package/dist/lib/components/ui/widgets/education/questions/partials/question-content.d.ts +1 -1
  107. package/dist/lib/components/ui/widgets/education/questions/question-text.d.ts +1 -1
  108. package/dist/lib/components/ui/widgets/education/questions/question.d.ts +1 -1
  109. package/dist/lib/components/ui/widgets/education/questions/types.d.ts +10 -0
  110. package/dist/lib/i18n/resources/en/en.d.ts +49 -0
  111. package/dist/lib/i18n/resources/en/material.json.d.ts +50 -1
  112. package/dist/lib/i18n/resources/fr/fr.d.ts +49 -0
  113. package/dist/lib/i18n/resources/fr/material.json.d.ts +50 -1
  114. package/dist/lib/i18n/resources/resources.d.ts +98 -0
  115. package/dist/lib/i18n/translator.d.ts +1 -1
  116. package/dist/lib/print/output/to-pdf-element.d.ts +6 -0
  117. package/dist/lib.js +1 -1
  118. package/dist/main.js +42 -42
  119. package/dist/map.js +8 -8
  120. package/dist/material.css +1 -1
  121. package/dist/pdf-reader.js +1 -1
  122. package/dist/print.js +135 -131
  123. package/dist/{public-BHthpdpe.js → public-BSaSCwy7.js} +9 -9
  124. package/dist/{rich-code-block-DoW7l2ND.js → rich-code-block-BFVj1GWz.js} +5 -5
  125. package/dist/{sortable-provider-FLNMfr0o.js → sortable-provider-REwyjiOZ.js} +2 -2
  126. package/dist/{spinner-DCgDw8eq.js → spinner-BFZxqdWC.js} +1 -1
  127. package/dist/theme-picker.js +2 -2
  128. package/dist/{theme-toggle-BMDAwMLh.js → theme-toggle-BHi6miz-.js} +1 -1
  129. package/dist/{toolbar-items-CkPEhQq7.js → toolbar-items-BTtoKVlx.js} +3 -3
  130. package/dist/{translate-material-DkcuQBNr.js → translate-material-R-uLthBy.js} +1 -1
  131. package/dist/{translator-DXdVRdMm.js → translator-ClbXOGQO.js} +100 -2
  132. package/dist/{typography-BNS_IbFI.js → typography-v-PJ4Zco.js} +1 -1
  133. package/dist/{use-chat-composer-B-tGRLkI.js → use-chat-composer-Rhan4Xv0.js} +2463 -2405
  134. package/dist/{use-heading-spy-DaqibCCm.js → use-heading-spy-CJnBkCY0.js} +179 -87
  135. package/dist/{use-material-translation-Bxl8sv1n.js → use-material-translation-CCWUeiEn.js} +1 -1
  136. package/dist/{use-return-focus-Y_Kx0QlW.js → use-return-focus-Duk40DZI.js} +1 -1
  137. package/docs/components/buttons-and-actions.md +24 -0
  138. package/docs/components/data-display.md +33 -0
  139. package/docs/components/data-table-filter-and-lists.md +117 -5
  140. package/docs/components/feedback-and-status.md +58 -2
  141. package/docs/components/form-fields.md +97 -3
  142. package/docs/components/media-and-files.md +55 -9
  143. package/docs/components/navigation-and-layout.md +58 -0
  144. package/docs/components/rich-widgets.md +37 -3
  145. package/docs/components/selection-and-choice.md +10 -3
  146. package/docs/guides/cards-and-tiles.md +4 -2
  147. package/docs/guides/csp.md +44 -6
  148. package/docs/guides/forms.md +55 -7
  149. package/docs/guides/i18n.md +6 -5
  150. package/docs/guides/printing.md +17 -7
  151. package/docs/previews/data-table-filter-lists-recordactionsmenu.webp +0 -0
  152. package/docs/previews/feedback-status-stalenotice.webp +0 -0
  153. package/docs/previews/form-fields-quantityfield.webp +0 -0
  154. package/docs/previews/media-files-networkuploadfield.webp +0 -0
  155. package/docs/previews/media-files-s3uploadfield.webp +0 -0
  156. package/docs/previews/media-files-uploadfield.webp +0 -0
  157. package/docs/previews/navigation-layout-recordpage.webp +0 -0
  158. package/docs/previews/rich-widgets-chat-action-proposal.webp +0 -0
  159. package/docs/roadmap.md +14 -1
  160. package/docs/troubleshooting.md +58 -11
  161. package/lib/components/ui/collections/server-table/server-table-phone-row.css +6 -0
  162. package/lib/components/ui/display/code/code-moonlight.css +37 -0
  163. package/package.json +2 -2
@@ -66,6 +66,7 @@ words in your error.
66
66
  - [A Button's label overflows a card on a phone](#a-buttons-label-overflows-a-card-on-a-phone)
67
67
  - [A ResponsiveButton no longer shows its tooltip next to its visible label](#a-responsivebutton-no-longer-shows-its-tooltip-next-to-its-visible-label)
68
68
  - [An input now has `placeholder=" "` in the DOM](#an-input-now-has-placeholder--in-the-dom)
69
+ - ["Select all" runs under the sort, "Filters" or the actions in a cards or tiles list on a phone](#select-all-runs-under-the-sort-filters-or-the-actions-in-a-cards-or-tiles-list-on-a-phone)
69
70
  - [A dialog or sheet scrolls, or clips a child, after upgrading](#a-dialog-or-sheet-scrolls-or-clips-a-child-after-upgrading)
70
71
  - [A form's fields no longer scroll in their own box after upgrading](#a-forms-fields-no-longer-scroll-in-their-own-box-after-upgrading)
71
72
  - [My activity content lost its side padding, or the rail's entries moved up](#my-activity-content-lost-its-side-padding-or-the-rails-entries-moved-up)
@@ -1427,6 +1428,18 @@ your own through `className`. With `asChild`, put the label in a `<span>` (on a
1427
1428
  </Button>
1428
1429
  ```
1429
1430
 
1431
+ ### "Select all" runs under the sort, "Filters" or the actions in a cards or tiles list on a phone
1432
+
1433
+ **When:** below 768px, a `ServerTable` in `cards` or `tiles` with `filter` and
1434
+ `actions` draws "Select all" over the sort menu and "Filters (N)" when an action
1435
+ has a long label ("Add a measurement unit").
1436
+ **Why:** up to 3.70.0, the label of row 2 neither shrank nor truncated, and the
1437
+ end group (sort, "Filters (N)", actions) never gave up its width.
1438
+ **Fix:** update. The "Select all" text now ends in "…" (the box keeps its name,
1439
+ "Select all on this page"), and an end group too wide for the row wraps to its
1440
+ own line under it. Until then, use a `Fab` for the create action on phones, or
1441
+ a short or icon-only label.
1442
+
1430
1443
  ### A dialog or sheet scrolls, or clips a child, after upgrading
1431
1444
 
1432
1445
  **When:** after upgrading, a tall `DialogContent`, `AlertDialogContent` or
@@ -2128,6 +2141,12 @@ settles, with `focusRef` on the table. It matches the row by id, not by label.
2128
2141
  See "Handing the focus back to a row" in
2129
2142
  [RowMenu](components/data-table-filter-and-lists.md#handing-the-focus-back-to-a-row).
2130
2143
 
2144
+ ### A `RecordActionsMenu` or `ConfirmDialog` refusal shows no action, or its link reloads the page
2145
+
2146
+ **When:** `send` rejects (or a `ConfirmDialog`'s `onConfirm` throws) with an error that should offer a link, but the dialog or toast shows only the message; or the link of a toast action reloads the whole app.
2147
+ **Why:** only an `ActionRefusal` carries an action (a plain `Error`, or a rethrown copy of its message, does not). A toast's `href` is a plain navigation (`window.location.assign`), since a toast is outside your router.
2148
+ **Fix:** reject with `new ActionRefusal(message, { action: { label, href } })` and keep it as thrown (do not wrap it in another `Error`). For a client-side navigation use `action: { label, onAction: () => navigate(...) }`. A `ConfirmDialog` renders it by default; a `refusal` prop of your own replaces that rendering, so it must show the details and the action itself. See [ConfirmDialog](components/feedback-and-status.md#confirmdialog) and [RecordActionsMenu](components/data-table-filter-and-lists.md#recordactionsmenu).
2149
+
2131
2150
  ### A `ConfirmationDialog` reopened with new content blocks clicks
2132
2151
 
2133
2152
  **When:** a `ConfirmationDialog` or a `ConfirmDialog` (or a `Dialog`,
@@ -3649,6 +3668,26 @@ fill is now left empty, and the title stays centred.
3649
3668
  <PrintHeader title="Invoice" logoText="LOGO" />
3650
3669
  ```
3651
3670
 
3671
+ ### A `keepTogether` block is cut off at the bottom of the page
3672
+
3673
+ **When:** the console shows `Node of type VIEW can't wrap between pages and
3674
+ it's bigger than available page height` and the rows of a `PrintSection` or
3675
+ a `section` / `stack` with `keepTogether` run past the page edge.
3676
+ **Why:** react-pdf keeps a block whole with `wrap={false}` and cannot split
3677
+ one taller than a page, nor measure it ahead.
3678
+ **Fix:** for a document as data, render it with `renderPdfBuffer`,
3679
+ `renderPdfBlob`, `renderPdfStream`, `downloadPdf` or `pdfResponse`: they
3680
+ measure each `keepTogether` block and let a too-tall one break normally. For a
3681
+ `<PrintSection keepTogether>` in a `PrintDocument`, or your own call to
3682
+ `renderPdfElement`, remove `keepTogether` from blocks that can outgrow a page,
3683
+ or resolve the document first:
3684
+
3685
+ ```ts
3686
+ import { resolveKeepTogether } from '@nxgt/material-core/pdf/render';
3687
+
3688
+ const element = renderPdfElement(await resolveKeepTogether(doc));
3689
+ ```
3690
+
3652
3691
  ### French amounts print with a slash, as in `1/234,50`
3653
3692
 
3654
3693
  **When:** before 2.2.0, `formatAmount(1234.5, 'EUR', { locale: 'fr-FR' })`
@@ -4675,7 +4714,12 @@ expect(await within(button.parentElement!).findByRole('status')).toHaveTextConte
4675
4714
  error)`. The status may be any non-2xx.
4676
4715
  **Why:** the storage rejected the `PUT` to the presigned URL. For `403` the
4677
4716
  usual causes are an expired URL, or a `Content-Type` that differs from the
4678
- one the URL was signed with.
4717
+ one the URL was signed with. With a presigned POST target, the policy refused
4718
+ the file (size, content type, expiry) and the message names the S3 code when
4719
+ it is readable, such as `Upload failed with status 400 (EntityTooLarge)`.
4720
+ The field shows it translated (`material.upload.error-status`, `error-status-code`);
4721
+ `error.message` in `onError` stays English, and `error` is an `UploadError`
4722
+ (`kind`, `status`, `code`).
4679
4723
  **Fix:**
4680
4724
 
4681
4725
  ```ts
@@ -4690,12 +4734,14 @@ const getPresignedUrl = async (file: File) => {
4690
4734
 
4691
4735
  **When:** an `S3UploadField` upload fails immediately. The browser console
4692
4736
  shows a CORS error for the storage host.
4693
- **Why:** the browser blocked the cross-origin `PUT`. The bucket's CORS rules
4694
- do not allow your origin, the `PUT` method, or the headers you send.
4737
+ **Why:** the browser blocked the cross-origin `PUT` (or `POST` with a presigned
4738
+ POST target). The bucket's CORS rules do not allow your origin, the method, or
4739
+ the headers you send; a `Content-Security-Policy` without the bucket host in
4740
+ `connect-src` fails the same way.
4695
4741
  **Fix:**
4696
4742
 
4697
4743
  ```json
4698
- [{ "AllowedOrigins": ["https://app.example.com"], "AllowedMethods": ["PUT"], "AllowedHeaders": ["*"] }]
4744
+ [{ "AllowedOrigins": ["https://app.example.com"], "AllowedMethods": ["PUT", "POST"], "AllowedHeaders": ["*"] }]
4699
4745
  ```
4700
4746
 
4701
4747
  Apply it on the bucket, with your own origin.
@@ -5135,7 +5181,7 @@ such as `getByRole('navigation', { name: 'pagination' })`,
5135
5181
  | `No filters available`, `+2 more` | `Aucun filtre disponible`, `+2 de plus` | `filter.empty`, `filter.more` |
5136
5182
  | `Yes` / `No`, `From 5`, `Until …`, `Up to 9` (filter chips) | `Oui` / `Non`, `À partir de 5`, `Jusqu'au …`, `Jusqu'à 9` | `filter.value.*` |
5137
5183
  | `Unread` (`MessageCard`) | `Non lu` | `cards.unread` |
5138
- | `Replace {name}`, `Upload failed` | `Remplacer {name}`, `Échec de l'envoi` | `upload.replace-named`, `upload.failed` |
5184
+ | `Replace {name}`, `Remove {name}`, `Upload failed` | `Remplacer {name}`, `Supprimer {name}`, `Échec de l'envoi` | `upload.replace-named`, `upload.remove-named`, `upload.failed` |
5139
5185
  | `File type not accepted`, `File exceeds maximum size of …`, `Maximum of 3 files reached` | `Type de fichier non accepté`, `Le fichier dépasse la taille maximale de …`, `Maximum de 3 fichiers atteint` | `upload.invalid-type`, `upload.too-large`, `upload.max-files` |
5140
5186
  | `Write something …`, `Insert {name} emoji` (editor) | `Écrire quelque chose…`, `Insérer l'emoji {name}` | `rich-text-editor.placeholder`, `rich-text-editor.insert-emoji` |
5141
5187
  | `Progress: 40%` | `Progression : 40 %` | `circular-progress.label` |
@@ -7741,8 +7787,13 @@ one. The usual sources are the components listed in
7741
7787
  [the guide](guides/csp.md#style-elements-the-components-inject).
7742
7788
  `ScrollArea`, `Select`, `RichTextEditor` and the scroll lock of dialogs and
7743
7789
  sheets take the nonce from `NonceProvider`, and report this when the app has
7744
- none (or gives it another nonce than the header's). A `<style>` in mermaid's
7745
- SVG is a [known gap](guides/csp.md#known-gaps). `Toaster`, `Drawer`,
7790
+ none (or gives it another nonce than the header's). Mermaid and KaTeX
7791
+ need none of this on a client render
7792
+ ([Markdown under a strict CSP](guides/csp.md#markdown-katex-mermaid-and-code-under-a-strict-csp));
7793
+ the two left are a server-rendered page with math (KaTeX's `style` attributes
7794
+ need `style-src-attr 'unsafe-inline'`) and the `<style>` cytoscape adds to
7795
+ `<head>` for mermaid's mindmap and architecture diagrams.
7796
+ `Toaster`, `Drawer`,
7746
7797
  `InputOTP`, `ImageCropper`, `Spinner` and `PdfReader` create none: their CSS is in the stylesheet, so if one of them looks unstyled, the
7747
7798
  app imports neither `styles.css` nor `dist/material.css`.
7748
7799
  **Fix:** for `style-src-attr`, allow attributes: they cannot be nonced.
@@ -7763,10 +7814,6 @@ import { NonceProvider } from '@nxgt/material';
7763
7814
  </NonceProvider>;
7764
7815
  ```
7765
7816
 
7766
- For a mermaid diagram, serve that route with `'unsafe-inline'` in
7767
- `style-src-elem` instead of the nonce (a nonce in the same directive makes
7768
- browsers ignore `'unsafe-inline'`).
7769
-
7770
7817
  Once a page has a header-delivered CSP, browsers blank the `nonce` attribute, so React's development build may warn of an attribute mismatch when it hydrates a server-rendered `<style nonce>`. The warning is harmless.
7771
7818
 
7772
7819
  ### `Refused to load the font 'data:font/woff2…' because it violates the following Content Security Policy directive: "font-src 'self'"`
@@ -187,3 +187,9 @@
187
187
  gap: 0.75rem;
188
188
  }
189
189
  }
190
+ /* A wide action (#2168): the actions may shrink within the row, so a long
191
+ * label ends in "..." (the button's own ellipsis) instead of overflowing. */
192
+ [data-slot="server-table-phone-row-end"] > [data-slot="server-table-actions"] {
193
+ flex-shrink: 1;
194
+ min-width: 0;
195
+ }
@@ -1,3 +1,40 @@
1
+ /* The scheme's colours as custom properties on the block: classes of the
2
+ stylesheet, never an inline `style` (strict CSP). Same values as
3
+ moonlight-tokens.ts; code-block-scheme.test.ts keeps them equal. */
4
+ [data-slot="code-block"][data-scheme="dark"] {
5
+ --code-bg: #222436;
6
+ --code-fg: #c8d3f5;
7
+ --code-comment: #7a88cf;
8
+ --code-blue: #82aaff;
9
+ --code-cyan: #86e1fc;
10
+ --code-green: #c3e88d;
11
+ --code-orange: #ff966c;
12
+ --code-yellow: #ffc777;
13
+ --code-red: #ff757f;
14
+ --code-magenta: #c099ff;
15
+ --code-pink: #fca7ea;
16
+ --code-selection: #2f334d;
17
+ }
18
+
19
+ [data-slot="code-block"][data-scheme="light"] {
20
+ --code-bg: #f5f7ff;
21
+ --code-fg: #383a51;
22
+ --code-comment: #7a88cf;
23
+ --code-blue: #3e68d7;
24
+ --code-cyan: #0b8ec2;
25
+ --code-green: #4db380;
26
+ --code-orange: #c44c22;
27
+ --code-yellow: #ac8300;
28
+ --code-red: #c53b40;
29
+ --code-magenta: #7a5af5;
30
+ --code-pink: #b04d9a;
31
+ --code-selection: #d4daf0;
32
+ }
33
+
34
+ [data-slot="code-block"] [data-code-scroll] {
35
+ max-height: var(--code-max-height, none);
36
+ }
37
+
1
38
  [data-slot="code-block"] {
2
39
  background: var(--code-bg);
3
40
  color: var(--code-fg);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxgt/material",
3
- "version": "3.68.0",
3
+ "version": "3.71.0",
4
4
  "license": "MIT",
5
5
  "bugs": {
6
6
  "email": "stevegires@gmail.com"
@@ -372,7 +372,7 @@
372
372
  "docs:previews": "rm -rf node_modules/.cache/nxgt-preview-free/missing && NXGT_PREVIEW_FREE=1 vitest run --project previews && bun .storybook/preview-free-report.ts"
373
373
  },
374
374
  "dependencies": {
375
- "@nxgt/material-core": "^0.45.1",
375
+ "@nxgt/material-core": "^0.46.0",
376
376
  "@base-ui/react": "^1.6.0",
377
377
  "@dnd-kit/core": "^6.3.1",
378
378
  "@dnd-kit/sortable": "^10.0.0",