@nxgt/material 3.55.0 → 3.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +7 -3
- package/dist/{async-slice-yhXT9cml.js → async-slice-CORlM_wu.js} +2 -2
- package/dist/{button-CD7f4KFL.js → button-CdpVEza0.js} +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-Cl7Wm8Pn.js → chip-C0yNYz9m.js} +2 -2
- package/dist/{code-editor-tOhXy6Qo.js → code-editor-Bwzp2038.js} +6 -6
- package/dist/code-editor.js +5 -5
- package/dist/{code-language-items-BxlY6onk.js → code-language-items-nP-pF7yH.js} +2 -2
- package/dist/components/components.css +4 -0
- package/dist/components/ui/display/secret-card/secret-card.css +65 -0
- package/dist/components/ui/display/vote-tally/vote-tally.css +94 -0
- package/dist/{components-B58ZWZYR.js → components-Dl2hVfzt.js} +16817 -16226
- package/dist/components.js +26 -26
- package/dist/{dialog-BzfHcRo6.js → dialog-BVgsN9Ch.js} +4 -4
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-DUZF4xAJ.js → dropdown-menu-C8PBmMIa.js} +1 -1
- package/dist/editor.js +9 -9
- package/dist/{empty-state-D9o2id1p.js → empty-state-C5wfbbW9.js} +2 -2
- package/dist/{escape-owner-BYs2_7T5.js → escape-owner-CYnfySUl.js} +1 -1
- package/dist/{field-blur-r1tHwqdF.js → field-blur-Nid7-bt_.js} +1 -1
- package/dist/{field-blur-context-ZsK8OTNg.js → field-blur-context-DxdIuHAY.js} +1 -1
- package/dist/hooks.js +28 -28
- package/dist/{hover-card-NfF8taLj.js → hover-card-C_9jiwp1.js} +2 -2
- package/dist/{i18n-provider-TQAEPlJ5.js → i18n-provider-CLVZK6tQ.js} +1 -1
- package/dist/i18n.js +5 -5
- package/dist/{icon-badge-BlaY_a-P.js → icon-badge-Dcjg_SKJ.js} +3 -3
- package/dist/{icon-button-B8tdlP6R.js → icon-button-Bo-VuZ2n.js} +1 -1
- package/dist/lib/components/ui/actions/link/link.d.ts +8 -0
- package/dist/lib/components/ui/collections/data-table/partials/data-table-page-control.d.ts +1 -1
- package/dist/lib/components/ui/collections/data-table/partials/data-table-row.d.ts +1 -1
- package/dist/lib/components/ui/collections/data-table/partials/layouts/data-table-card.d.ts +1 -1
- package/dist/lib/components/ui/collections/server-table/partials/server-table-past-end.d.ts +1 -1
- package/dist/lib/components/ui/display/index.d.ts +2 -0
- package/dist/lib/components/ui/display/list-tile/partials/list-tile-line.d.ts +1 -1
- package/dist/lib/components/ui/display/period-cards/period-cards.d.ts +1 -1
- package/dist/lib/components/ui/display/secret-card/index.d.ts +2 -0
- package/dist/lib/components/ui/display/secret-card/secret-card.d.ts +11 -0
- package/dist/lib/components/ui/display/secret-card/types.d.ts +49 -0
- package/dist/lib/components/ui/display/secret-card/use-secret-card.d.ts +20 -0
- package/dist/lib/components/ui/display/vote-tally/announcer.d.ts +11 -0
- package/dist/lib/components/ui/display/vote-tally/index.d.ts +2 -0
- package/dist/lib/components/ui/display/vote-tally/partials/tally-bar.d.ts +8 -0
- package/dist/lib/components/ui/display/vote-tally/partials/tally-row.d.ts +9 -0
- package/dist/lib/components/ui/display/vote-tally/partials/tally-voters.d.ts +9 -0
- package/dist/lib/components/ui/display/vote-tally/types.d.ts +73 -0
- package/dist/lib/components/ui/display/vote-tally/use-announcement.d.ts +7 -0
- package/dist/lib/components/ui/display/vote-tally/use-tally-summary.d.ts +3 -0
- package/dist/lib/components/ui/display/vote-tally/vote-tally.d.ts +10 -0
- package/dist/lib/components/ui/display/vote-tally/vote-tally.utils.d.ts +18 -0
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/layout/account-menu/account-menu.d.ts +1 -1
- package/dist/lib/components/ui/layout/app-shell/app-sidebar-icon-item.d.ts +1 -1
- package/dist/lib/components/ui/layout/app-shell/app-sidebar-label-item.d.ts +1 -1
- package/dist/lib/components/ui/layout/app-shell/app-sidebar.d.ts +1 -1
- package/dist/lib/components/ui/layout/pager/pager.d.ts +1 -1
- package/dist/lib/components/ui/layout/see-also/see-also.d.ts +1 -1
- package/dist/lib/components/ui/layout/toc/toc.d.ts +1 -1
- package/dist/lib/components/ui/primitives/index.d.ts +1 -0
- package/dist/lib/components/ui/primitives/link/index.d.ts +2 -0
- package/dist/lib/components/ui/primitives/link/link-component-provider.d.ts +26 -0
- package/dist/lib/components/ui/widgets/education/index.d.ts +1 -0
- package/dist/lib/components/ui/widgets/education/navigator/index.d.ts +2 -0
- package/dist/lib/components/ui/widgets/education/navigator/partials/navigator-item.d.ts +10 -0
- package/dist/lib/components/ui/widgets/education/navigator/question-navigator.d.ts +27 -0
- package/dist/lib/components/ui/widgets/education/questions/index.d.ts +1 -1
- package/dist/lib/components/ui/widgets/education/questions/partials/question-media.d.ts +5 -0
- package/dist/lib/components/ui/widgets/education/questions/partials/question-verdict.d.ts +12 -0
- package/dist/lib/components/ui/widgets/education/questions/question-options.d.ts +2 -2
- package/dist/lib/components/ui/widgets/education/questions/question-text.d.ts +1 -1
- package/dist/lib/components/ui/widgets/education/questions/question.d.ts +1 -1
- package/dist/lib/components/ui/widgets/education/questions/types.d.ts +33 -1
- package/dist/lib/hooks/index.d.ts +1 -0
- package/dist/lib/hooks/use-countdown.d.ts +18 -0
- package/dist/lib/i18n/resources/en/en.d.ts +31 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +31 -0
- package/dist/lib/i18n/resources/fr/fr.d.ts +31 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +31 -0
- package/dist/lib/i18n/resources/resources.d.ts +62 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +1 -1
- package/dist/main.js +43 -43
- package/dist/map.js +8 -8
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/print.js +2 -2
- package/dist/{public-tWgM204K.js → public-BtKAthSs.js} +9 -9
- package/dist/{rich-code-block-0OcsqURY.js → rich-code-block-BZYZ6ewr.js} +5 -5
- package/dist/{sortable-provider-DzFAlPU_.js → sortable-provider-hUCwt69K.js} +2 -2
- package/dist/{spinner-GKZcQmrR.js → spinner-BmUXTzvJ.js} +1 -1
- package/dist/{stored-language-B39mABN7.js → stored-language-_OGPBCn0.js} +62 -0
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-C8idk_jQ.js → theme-toggle-DdvEafno.js} +1 -1
- package/dist/{toolbar-items-BrJI-BCs.js → toolbar-items-DKfY_6AG.js} +4 -4
- package/dist/{translate-material-hUA-UAP6.js → translate-material-DzBMPErh.js} +2 -2
- package/dist/{translator-1ql2sxrx.js → translator-BIVSiq4X.js} +1 -1
- package/dist/{use-chat-composer-DQpb8ZXV.js → use-chat-composer-DCQW2EJ8.js} +16 -16
- package/dist/{use-heading-spy-vlPOI1Aj.js → use-heading-spy-Cr2C_Px8.js} +32 -5
- package/dist/{use-material-translation-B1p5y3s9.js → use-material-translation-C_bAxfvp.js} +2 -2
- package/docs/components/README.md +1 -1
- package/docs/components/buttons-and-actions.md +1 -0
- package/docs/components/data-display.md +147 -2
- package/docs/components/data-table-filter-and-lists.md +3 -3
- package/docs/components/feedback-and-status.md +5 -3
- package/docs/components/navigation-and-layout.md +4 -4
- package/docs/components/primitives.md +62 -0
- package/docs/components/rich-widgets.md +51 -0
- package/docs/components/selection-and-choice.md +1 -1
- package/docs/guides/app-shell.md +2 -2
- package/docs/guides/helpers.md +40 -0
- package/docs/previews/data-display-secretcard.webp +0 -0
- package/docs/previews/data-display-votetally.webp +0 -0
- package/lib/components/components.css +4 -0
- package/lib/components/ui/display/secret-card/secret-card.css +65 -0
- package/lib/components/ui/display/vote-tally/vote-tally.css +94 -0
- package/package.json +1 -1
- package/dist/lib/components/ui/feedback/countdown-timer/use-countdown.d.ts +0 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @nxgt/material
|
|
2
2
|
|
|
3
|
+
## 3.56.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1952](https://github.com/softistx/nxgt-material/pull/1952) [`1f3d75d`](https://github.com/softistx/nxgt-material/commit/1f3d75dc6fec114442c911b57de69b5c882cd37e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `LinkComponentProvider` in `@nxgt/material/components`: set your router's link once (`<LinkComponentProvider component={RouterLink}>`) and `LinkButton`, `IconLinkButton`, `ResponsiveLinkButton`, the sidebar and app shell, `AccountMenu`, `Pager`, `SeeAlso`, `Toc`, `PeriodCards`, `NotificationRow`, `Doc`, `DataTable`, `ServerTable`, `ListEmpty`, `Switcher`, `ListTile`, `PageFooter`, `Notifications`, `Breadcrumb`, `Pagination`, `LinkCard` and `QuestionNavigator` render their links with it. A component's own `linkComponent` prop still wins, and nothing changes without the provider. `LinkComponent` and `LinkComponentProps` are now exported, and `useLinkComponent()` reads the provider's link in your own components. The link buttons gain a `linkComponent` prop. Fixes [#1950](https://github.com/softistx/nxgt-material/issues/1950).
|
|
8
|
+
|
|
9
|
+
- [#1936](https://github.com/softistx/nxgt-material/pull/1936) [`4078fc4`](https://github.com/softistx/nxgt-material/commit/4078fc456d91eafdb4622b6edd3762adb1f89fcc) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `QuestionCard`: a server-given `verdict` (`'correct' | 'incorrect' | 'pending'`) is shown as given, with no comparison against `question.correct` in the browser (the correct choices can still be passed to highlight them). `points` (`{ awarded, possible }`) and `feedback` fill the verdict banner, and `pending` reads "Awaiting grading" with a clock icon. `question.media` also accepts audio (an `AudioPlayer`) and a document link (a `FilePreview`) through `kind` or a MIME `type` and a `name` as text alternative. New types `QuestionMedia`, `QuestionMediaKind`, `QuestionVerdict`, `QuestionPoints`. `revealed` without `verdict` is unchanged ([#1933](https://github.com/softistx/nxgt-material/issues/1933)).
|
|
10
|
+
|
|
11
|
+
- [#1949](https://github.com/softistx/nxgt-material/pull/1949) [`1a1b722`](https://github.com/softistx/nxgt-material/commit/1a1b722b7fe8091ac811611d2dd32797f25c484c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `QuestionNavigator` in `@nxgt/material/widgets/education`: the numbered questions of a quiz or exam player, with `count`, `current` (from 1), `answered` and `flagged` (arrays or Sets), and `onSelect(n)` or `getHref(n)` for a link variant. Targets are at least 44px, the current one has `aria-current="step"`, answered and flagged show an icon and are named in the accessible label, and it stays one scrolling row that keeps the current number in view. Labels under `material.question-navigator.*` (en, fr). Fixes [#1947](https://github.com/softistx/nxgt-material/issues/1947).
|
|
12
|
+
|
|
13
|
+
- [#1939](https://github.com/softistx/nxgt-material/pull/1939) [`1693f0f`](https://github.com/softistx/nxgt-material/commit/1693f0fb28053603a02bb101473b63b239770f81) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `SecretCard`: a card whose secret (`back`) is not rendered, so it is not in the markup, read out or copied, until a deliberate click or tap on its reveal button, a disclosure with one name and `aria-expanded` (and `aria-controls`). Hide it again with the same button, or let `autoHideMs` do it. `revealed` with `onRevealedChange` controls it, `defaultRevealed` starts it open; the two never go together. `title`, `description` (a hint shown while hidden), `icon`, `tone`, `front` (the hidden face), `actions` and `labels` shape it. Changes a click does not explain (auto-hide, the parent) are announced through a polite live region, focus moves to the button when the face that held it is swapped, the flip runs only after a change and without reduced motion, and it is full width up to 28rem with a 44px button. New `material.secret-card.*` keys in English and French. Closes [#1912](https://github.com/softistx/nxgt-material/issues/1912).
|
|
14
|
+
|
|
15
|
+
- [#1946](https://github.com/softistx/nxgt-material/pull/1946) [`5e2b8c9`](https://github.com/softistx/nxgt-material/commit/5e2b8c99c3e95cf08c5ce29baaaa1afc3f14f44a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `useCountdown` is public, from `@nxgt/material/hooks`: the clock behind `CountdownTimer`, for a button or a message that waits (a rate limit's `retryAfter`, a resend delay). `useCountdown(duration, { paused, onExpire, key })` returns the seconds left, ticking on the client only; a new `duration` **or a new `key`** starts over, so the same duration twice restarts it. `CountdownTimer` is unchanged.
|
|
16
|
+
|
|
17
|
+
- [#1942](https://github.com/softistx/nxgt-material/pull/1942) [`803afd5`](https://github.com/softistx/nxgt-material/commit/803afd57f5215b7d48081799015549b61632da16) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `VoteTally`: a live ranked tally of a vote, poll or ballot. One row per option with its count and share written as text ("Ada Example, 3 votes, 60%"), a decorative bar, and who voted for it as an avatar group or a line of names. `sort` ranks by count (equal counts share a rank), a single top option is marked "Leader" and several are each marked "Tie" (never an arbitrary leader), `selectedId` marks "Your vote", and `abstainCount` shows abstentions beneath the bars. Bars ease only without `prefers-reduced-motion` (`animated` turns it off); a polite, debounced live status (`announceDelay`) says where the vote stands after live changes. `renderOption`, `renderVoters`, `header` and `footer` replace the defaults. Bar widths are SVG attributes, so server markup carries no `style`. New `material.vote-tally.*` keys in English and French. Closes [#1913](https://github.com/softistx/nxgt-material/issues/1913).
|
|
18
|
+
|
|
3
19
|
## 3.55.0
|
|
4
20
|
|
|
5
21
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -19,7 +19,8 @@ drag-and-drop, i18n, and `Icon`. Tailwind CSS v4 + Base UI.
|
|
|
19
19
|
- **Helpers** ([helpers guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md)): `cn`, `clientOnly`,
|
|
20
20
|
date, number, storage and URL utilities, a Zod error map, and Redux Toolkit
|
|
21
21
|
slice factories in `/lib`. Theme, i18n-aware formatting, option, focus
|
|
22
|
-
(`useFocusOnMount`)
|
|
22
|
+
(`useFocusOnMount`), countdown (`useCountdown`) and one-submit
|
|
23
|
+
(`useSubmitOnce`) hooks are in `/hooks`.
|
|
23
24
|
- **i18n** ([i18n guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/i18n.md)): an `I18nProvider` with ICU
|
|
24
25
|
messages and shipped `en` / `fr` strings. Your app merges in its own
|
|
25
26
|
resources.
|
|
@@ -217,7 +218,7 @@ reads `duotone.svg`, the file that exists (it used to ask for the missing
|
|
|
217
218
|
| `@nxgt/material/draw/png` | `drawingToPng(sceneOrSvg, { scale?, background?, colorsFrom? })` and `downloadDrawingPng(source, fileName)` — a drawing (a scene, or a live `<svg>` such as `svgRef.current` of a `<Drawing ref={svgRef}>`) as a PNG `Blob` in the browser, with the page's theme colours resolved, `data:` images inlined and CORS errors named; its own entry, DOM only when called ([drawing guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/drawing.md#png), [reference](https://cdn.jsdelivr.net/npm/@nxgt/material-core@0/docs/draw.md#png-nxgtmaterial-coredrawpng)) |
|
|
218
219
|
| `@nxgt/material/vite` | build-time helpers for consumers: `nxgtMaterial()` (a strict CSP by hash or nonce, self-hosted fonts, a styles check, serves the pdf.js worker on the Vite 5–7 dev server, generates your app themes' stylesheets with `nxgtMaterial({ themes })` and the `nxgt-theme` bin: [Themes guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/themes.md), a reduced backdrop icon sprite from your Font Awesome install with `nxgtMaterial({ backdropSprite })` and the `nxgt-backdrop-sprite` bin, PDFs on a bundled server with `nxgtMaterial({ pdf: { bundle: true } })`: [Vite plugin guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/vite-plugin.md)), `pdfkitStandardFonts()` ([printing guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/printing.md)), `cspAssetsInlineLimit`, a `build.assetsInlineLimit` that never inlines a font ([CSP guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/csp.md#katex-fonts)) |
|
|
219
220
|
| `@nxgt/material/next` | `withNxgtPrint(nextConfig)`: the `next.config.ts` a Next.js route handler that imports `/print` needs, `output: 'standalone'` included. Node only, no dependency on `next` ([printing guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/printing.md#nextjs-serverexternalpackages-and-output-standalone)) |
|
|
220
|
-
| `@nxgt/material/hooks` | `useTheme`, `useIsClient`, `useIsMobile`, `useLocalizedDate`, `useCspNonce`, `useFocusOnMount`, `useSubmitOnce`, … ([helpers](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md#nxgtmaterialhooks)) |
|
|
221
|
+
| `@nxgt/material/hooks` | `useTheme`, `useIsClient`, `useIsMobile`, `useLocalizedDate`, `useCspNonce`, `useFocusOnMount`, `useCountdown`, `useSubmitOnce`, … ([helpers](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md#nxgtmaterialhooks)) |
|
|
221
222
|
| `@nxgt/material/dnd` | `@dnd-kit` primitives ([helpers](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md#nxgtmaterialdnd)) |
|
|
222
223
|
| `@nxgt/material/i18n` | `I18nProvider`, `mergeResources`, `createTranslator`, `translateMaterial`, `formatMessage` ([i18n guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/i18n.md)) |
|
|
223
224
|
| `@nxgt/material/lib` | `cn`, `clientOnly`, date, number and storage utilities, `useSliceReducer`, `getCspNonce` / `setCspNonce`, the server-side CSP helpers (`createCspNonce`, `cspPolicy`, `cspHash`, `applyCspNonce`, `CSP_NONCE_PLACEHOLDER`, `ZOD_JITLESS_SCRIPT`, `zodJitlessTag`: [CSP, SSR](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/csp.md#ssr)) ([helpers](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md#nxgtmateriallib)) |
|
|
@@ -500,6 +501,7 @@ Not components: what the stylesheet gives any element.
|
|
|
500
501
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/primitives-togglegroup.webp" width="120" alt="ToggleGroup"> | [`ToggleGroup`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/primitives.md#togglegroup), `ToggleGroupItem`, `ToggleGroupSeparator` | Toggle group in three looks: connected (pill morph), segmented (sliding pill), separate; sizes sm, md, lg; horizontal or vertical. | `ToggleGroup`, `ToggleGroupItem` |
|
|
501
502
|
| — | [`Activity`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/primitives.md#activity) | React `<Activity>` switched by a boolean `visible`. | `Activity` |
|
|
502
503
|
| — | [`NonceProvider`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/primitives.md#nonceprovider) | Gives the page's CSP nonce to every component below; `useCspNonce()` reads it ([CSP guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/csp.md#nonceprovider)). | `NonceProvider` |
|
|
504
|
+
| — | [`LinkComponentProvider`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/primitives.md#linkcomponentprovider) | Sets, once, the link component (your router's `Link`) of the components that render a link (buttons, shell, tables, pager, notifications, doc); `LinkComponentProps` types the adapter and `useLinkComponent()` reads it. | `LinkComponentProvider`, `useLinkComponent`, `LinkComponent`, `LinkComponentProps` |
|
|
503
505
|
|
|
504
506
|
### Buttons & actions
|
|
505
507
|
|
|
@@ -600,6 +602,7 @@ Not components: what the stylesheet gives any element.
|
|
|
600
602
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-avatar.webp" width="120" alt="Avatar"> | [`Avatar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#avatar), `AvatarImage`, `AvatarFallback`, `AvatarBase` | Image with a fallback and an optional online / offline dot; `shape` clips it to an expressive shape; the initials scale with the size (40 % of the diameter); `tone` colours the fallback. | `Avatar`, `AvatarImage`, `AvatarFallback` |
|
|
601
603
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-avatargroup.webp" width="120" alt="AvatarGroup"> | [`AvatarGroup`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#avatargroup) | Overlapping avatars with a `+N` overflow. | `AvatarGroup` |
|
|
602
604
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-seatring.webp" width="120" alt="SeatRing"> | [`SeatRing`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#seatring) | Participants as seats around a circle, or in a grid on a narrow box; avatar, name, status, badge and centre slots; optionally a listbox to pick one or several (`selectionMode`). | — |
|
|
605
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-secretcard.webp" width="120" alt="SecretCard"> | [`SecretCard`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#secretcard) | A card whose secret is not rendered until a deliberate tap or click reveals it (a role, a one-time code, a recovery key); hide again, optional `autoHideMs`, controlled or not, polite announcement. | — |
|
|
603
606
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-shape.webp" width="120" alt="Shape"> | [`Shape`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#shape) | Material 3 Expressive's 35 shapes and a squircle as a backdrop, an icon container or a mask for a photo, with a morph; eight tones or an app tone. | — |
|
|
604
607
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-badge.webp" width="120" alt="Badge"> | [`Badge`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#badge) | Status pill, 20 px: default, secondary, error, success, info, warning, `soft` (tonal, for states), outlined; an optional decorative `icon` before the words. | `Badge` |
|
|
605
608
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-countbadge.webp" width="120" alt="CountBadge"> | [`CountBadge`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#countbadge) | Count in the corner of its children, capped at `99+` and hidden at 0; `animated` pops it in when it changes. | `CountBadge` |
|
|
@@ -619,6 +622,7 @@ Not components: what the stylesheet gives any element.
|
|
|
619
622
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-timeline.webp" width="120" alt="Timeline"> | [`Timeline`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#timeline), `TimelineItem`, `RelativeTime` | Vertical event timeline with shaped, toned markers, cards, alternating sides in a wide container, optional day groups and relative times. | `Timeline`, `TimelineItem`, `RelativeTime` |
|
|
620
623
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-changehistory.webp" width="120" alt="ChangeHistory"> | [`ChangeHistory`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#changehistory) | History of the changes made to anything (a document, a project's settings, a file): a rail of toned dots or tinted cards with a Before / After block, a heading per day (sticky on the rail), long entries collapsed behind "N fields changed", redacted values shown as "Hidden", the exact time on hover and focus, load more. | — (later, #1626) |
|
|
621
624
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-zonedtime.webp" width="120" alt="ZonedTime"> | [`ZonedTime`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#zonedtime) | A moment in a named IANA zone, with the zone as a computed offset (`Mar 12, 2026, 4:04 PM UTC+1`), identical on the server and the client (no hydration warning): the date and the time are formatted apart, `seconds` and `dateStyle` are optional, in a `<time dateTime>`. | — |
|
|
625
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-votetally.webp" width="120" alt="VoteTally"> | [`VoteTally`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#votetally) | A live ranked tally of a vote: one row per option with its count and share as text, a decorative bar, and who voted for it (avatars or names); marks the leader, a tie and the viewer's own vote in words, counts abstentions, eases bars only without reduced motion, and announces changes through a debounced polite status. | — |
|
|
622
626
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-eventchip.webp" width="120" alt="EventChip"> | [`EventChip`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#eventchip) | Calendar event pill — soft, solid or outlined — with its times, all-day and continuation edges. | `EventChip` |
|
|
623
627
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-codeblock.webp" width="120" alt="CodeBlock"> | [`CodeBlock`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#codeblock), `JsonViewer`, `CodeGroup` | Highlighted code with line numbers and copy, a collapsible JSON tree, and tabbed samples (`Tabs`, underlined). `CodeDiff` is under Rich widgets. | `CodeBlock`, `JsonViewer`, `CodeGroup` |
|
|
624
628
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-markdown.webp" width="120" alt="Markdown"> | [`Markdown`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#markdown), `MermaidDiagram` | GFM markdown with KaTeX math and mermaid diagrams (`clientOnly`). Fences reuse `CodeBlock`. `ChatMarkdown` renders through it. | `Markdown`, `MermaidDiagram` |
|
|
@@ -759,7 +763,7 @@ Not components: what the stylesheet gives any element.
|
|
|
759
763
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-richtextviewer.webp" width="120" alt="RichTextViewer"> | [`RichTextViewer`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#richtextviewer) | Read-only view of a saved document (HTML, JSON or Markdown) with the editor's typography; sanitised, server-safe, no editor. From `@nxgt/material/editor/viewer`. | — (a `vue` issue, not a port) |
|
|
760
764
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-codeeditor.webp" width="120" alt="CodeEditor"> | [`CodeEditor`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#codeeditor) · `CodeEditorFormField` | Monaco code field in theme presets (App, Moonlight, Soft, or your own `defineCodeTheme`), with a floating tool pill, a status bar, `markers` for your own problems, a `readOnly` reader look, view props, a `ref` handle, file tabs (`files`) and full screen. From `@nxgt/material/code-editor`. | `CodeEditor`, `CodeEditorFormField` |
|
|
761
765
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-codeeditor-diff.webp" width="120" alt="CodeDiff"> | [`CodeDiff`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#codediff) | A Monaco diff in the code editor's frame and themes: side by side or inline (always inline on a phone), previous/next change, `+N −M` counts and copy. From `@nxgt/material/code-editor`. | `CodeDiff` |
|
|
762
|
-
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-quiz.webp" width="120" alt="Quiz"> | [`Quiz`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#quiz), `QuestionCard` | Exam or practice quizzes: step progress, instant feedback with explanations and hints, a time limit, keyboard shortcuts, and a results screen with a score ring, a breakdown and a retry of the misses. Container queries. | `Quiz`, `QuestionCard` (modes and results: React only for now) |
|
|
766
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-quiz.webp" width="120" alt="Quiz"> | [`Quiz`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#quiz), `QuestionCard` · [`QuestionNavigator`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#questionnavigator) | Exam or practice quizzes: step progress, instant feedback with explanations and hints, a time limit, keyboard shortcuts, and a results screen with a score ring, a breakdown and a retry of the misses. Container queries. | `Quiz`, `QuestionCard` (modes and results: React only for now); `QuestionNavigator` React only for now |
|
|
763
767
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-drawing.webp" width="120" alt="Drawing"> | [`Drawing`, `Rect`, `Ellipse`, `Circle`, `Line`, `Polygon`, `Path`, `Text`, `Group`, `Image`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#drawing) from `@nxgt/material/draw` | Vector drawings from a scene of plain data or from JSX: theme-role colours that follow light and dark, no inline style (strict CSP), a `title` or `decorative` enforced by the type, focusable nodes with `onClick` and a focus ring, text that wraps with Inter's metrics and is refined by the browser. Client-only entry. | React only for now |
|
|
764
768
|
|
|
765
769
|
`RadioGroupField`, `SliderField` and `SwitchField` are aliases of the
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as e, r as t, t as n } from "./stored-language-
|
|
2
|
-
import { r } from "./translator-
|
|
1
|
+
import { i as e, r as t, t as n } from "./stored-language-_OGPBCn0.js";
|
|
2
|
+
import { r } from "./translator-BIVSiq4X.js";
|
|
3
3
|
import { t as i } from "./_baseIsEqual-C6ksIHya.js";
|
|
4
4
|
import { useMemo as a } from "react";
|
|
5
5
|
import { asyncThunkCreator as o, buildCreateSlice as s } from "@reduxjs/toolkit";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { t } from "./is-production-GLw59WU8.js";
|
|
3
3
|
import { n, t as r } from "./dist-DVRQkaTK.js";
|
|
4
|
-
import { n as i, r as a, t as o } from "./spinner-
|
|
4
|
+
import { n as i, r as a, t as o } from "./spinner-BmUXTzvJ.js";
|
|
5
5
|
import { a as s, i as c, n as l, o as u, s as d, t as f } from "./use-click-lock-BZYtTmVt.js";
|
|
6
6
|
import { t as p } from "./button-group-context-CaP0X5p_.js";
|
|
7
7
|
import { t as m } from "./has-text-content-Ds2dkHX_.js";
|
package/dist/charts.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { t as e } from "./ui.utils-CAnKTCw5.js";
|
|
2
2
|
import { t } from "./utils-BLfntITJ.js";
|
|
3
3
|
import { t as n } from "./warn-once-C_e47JM8.js";
|
|
4
|
-
import { t as r } from "./use-material-translation-
|
|
5
|
-
import { t as i } from "./button-
|
|
4
|
+
import { t as r } from "./use-material-translation-C_bAxfvp.js";
|
|
5
|
+
import { t as i } from "./button-CdpVEza0.js";
|
|
6
6
|
import { t as a } from "./use-ssr-media-query-C6M5m8sf.js";
|
|
7
7
|
import { i as o, n as s, r as c, t as l } from "./util-4heV2LPI.js";
|
|
8
8
|
import { t as u } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
|
|
9
|
-
import { t as d } from "./chip-
|
|
9
|
+
import { t as d } from "./chip-C0yNYz9m.js";
|
|
10
10
|
import { c as f, d as p, f as m, i as h, o as g, p as _, s as v, t as y } from "./line-path-C5pZGC49.js";
|
|
11
11
|
import { t as b } from "./live-status-BGPaN8r8.js";
|
|
12
12
|
import { t as x } from "./linear-G97mfnKF.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
|
-
import { r as t } from "./spinner-
|
|
2
|
+
import { r as t } from "./spinner-BmUXTzvJ.js";
|
|
3
3
|
import { s as n } from "./use-click-lock-BZYtTmVt.js";
|
|
4
|
-
import { t as r } from "./use-material-translation-
|
|
4
|
+
import { t as r } from "./use-material-translation-C_bAxfvp.js";
|
|
5
5
|
import { t as i } from "./react-node-text-Crkpfpco.js";
|
|
6
6
|
import { cloneElement as a, isValidElement as o } from "react";
|
|
7
7
|
import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
@@ -2,13 +2,13 @@ import { r as e } from "./rolldown-runtime-BFFgcFxR.js";
|
|
|
2
2
|
import { t } from "./utils-BLfntITJ.js";
|
|
3
3
|
import { t as n } from "./is-production-GLw59WU8.js";
|
|
4
4
|
import { a as r } from "./dist-lmHmz_bu.js";
|
|
5
|
-
import { c as i, d as a, f as o, n as s, t as c } from "./dropdown-menu-
|
|
6
|
-
import { a as l, i as u, n as d } from "./field-blur-context-
|
|
7
|
-
import { a as f, d as p, r as m, t as h, u as g } from "./toolbar-items-
|
|
8
|
-
import { t as _ } from "./use-material-translation-
|
|
9
|
-
import { i as v, n as y, o as b, t as x } from "./code-language-items-
|
|
5
|
+
import { c as i, d as a, f as o, n as s, t as c } from "./dropdown-menu-C8PBmMIa.js";
|
|
6
|
+
import { a as l, i as u, n as d } from "./field-blur-context-DxdIuHAY.js";
|
|
7
|
+
import { a as f, d as p, r as m, t as h, u as g } from "./toolbar-items-DKfY_6AG.js";
|
|
8
|
+
import { t as _ } from "./use-material-translation-C_bAxfvp.js";
|
|
9
|
+
import { i as v, n as y, o as b, t as x } from "./code-language-items-nP-pF7yH.js";
|
|
10
10
|
import { t as S } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
|
|
11
|
-
import { n as C, t as w } from "./escape-owner-
|
|
11
|
+
import { n as C, t as w } from "./escape-owner-CYnfySUl.js";
|
|
12
12
|
import { t as T } from "./skeleton-DSdtr2qc.js";
|
|
13
13
|
import { t as E } from "./react-node-text-Crkpfpco.js";
|
|
14
14
|
import D, { memo as O, useCallback as ee, useEffect as k, useId as A, useImperativeHandle as j, useMemo as M, useRef as N, useState as P } from "react";
|
package/dist/code-editor.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { a as t } from "./dist-lmHmz_bu.js";
|
|
3
|
-
import { d as n, r, t as i, u as a } from "./toolbar-items-
|
|
4
|
-
import { t as o } from "./use-material-translation-
|
|
5
|
-
import { i as s, n as c, o as l } from "./code-language-items-
|
|
6
|
-
import { r as u, t as d } from "./field-blur-
|
|
3
|
+
import { d as n, r, t as i, u as a } from "./toolbar-items-DKfY_6AG.js";
|
|
4
|
+
import { t as o } from "./use-material-translation-C_bAxfvp.js";
|
|
5
|
+
import { i as s, n as c, o as l } from "./code-language-items-nP-pF7yH.js";
|
|
6
|
+
import { r as u, t as d } from "./field-blur-Nid7-bt_.js";
|
|
7
7
|
import { t as f } from "./skeleton-DSdtr2qc.js";
|
|
8
8
|
import { t as p } from "./live-status-BGPaN8r8.js";
|
|
9
9
|
import { t as m } from "./use-mobile-BDro060N.js";
|
|
10
10
|
import { t as h } from "./react-node-text-Crkpfpco.js";
|
|
11
|
-
import { a as g, c as _, d as v, f as y, i as b, l as x, m as S, o as C, p as w, r as T, s as E, t as D, u as O } from "./code-editor-
|
|
11
|
+
import { a as g, c as _, d as v, f as y, i as b, l as x, m as S, o as C, p as w, r as T, s as E, t as D, u as O } from "./code-editor-Bwzp2038.js";
|
|
12
12
|
import { useEffect as k, useRef as A, useState as j } from "react";
|
|
13
13
|
import { Fragment as M, jsx as N, jsxs as P } from "react/jsx-runtime";
|
|
14
14
|
import { ChevronDown as F, ChevronUp as I, Columns2 as L } from "lucide-react";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as e, f as t } from "./dropdown-menu-
|
|
2
|
-
import { t as n } from "./use-material-translation-
|
|
1
|
+
import { d as e, f as t } from "./dropdown-menu-C8PBmMIa.js";
|
|
2
|
+
import { t as n } from "./use-material-translation-C_bAxfvp.js";
|
|
3
3
|
import { t as r } from "./live-status-BGPaN8r8.js";
|
|
4
4
|
import { useEffect as i, useRef as a, useState as o } from "react";
|
|
5
5
|
import { jsx as s } from "react/jsx-runtime";
|
|
@@ -138,6 +138,10 @@
|
|
|
138
138
|
@import "./ui/display/seat-ring/seat-ring.css";
|
|
139
139
|
@import "./ui/display/seat-ring/seat-ring-index.css";
|
|
140
140
|
@import "./ui/display/seat-ring/seat-ring-ring.css";
|
|
141
|
+
/* VoteTally: ranked bars with counts, shares and voters. */
|
|
142
|
+
@import "./ui/display/vote-tally/vote-tally.css";
|
|
143
|
+
/* SecretCard: a face that is not rendered until it is revealed. */
|
|
144
|
+
@import "./ui/display/secret-card/secret-card.css";
|
|
141
145
|
/* Alert and Banner span the row in the form grids (#1497). */
|
|
142
146
|
@import "./ui/feedback/alert/alert.css";
|
|
143
147
|
@import "./ui/display/stat-card/stat-card.css";
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/* SecretCard: a card whose secret face is not rendered until it is revealed.
|
|
2
|
+
* It carries `data-tone`, so the tone's tokens resolve on it. The hidden face
|
|
3
|
+
* is a quiet diagonal pattern in the tone's ring colour. The card's border is
|
|
4
|
+
* that colour too (set by a utility class on the Card, which wins over the
|
|
5
|
+
* Card's own). A change flips the face in, never on mount, and only when the person has not asked for reduced motion. The card is
|
|
6
|
+
* full width up to a reading width and keeps the reveal button a 44px target
|
|
7
|
+
* on a phone. */
|
|
8
|
+
@layer components {
|
|
9
|
+
.nxgt-secret-card {
|
|
10
|
+
width: 100%;
|
|
11
|
+
max-width: 28rem;
|
|
12
|
+
margin-inline: auto;
|
|
13
|
+
--secret-card-line: var(--nxgt-tone-ring, var(--border));
|
|
14
|
+
border-color: var(--secret-card-line);
|
|
15
|
+
perspective: 60rem;
|
|
16
|
+
}
|
|
17
|
+
.nxgt-secret-card [data-slot="secret-card-title"] {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
gap: 0.5rem;
|
|
21
|
+
color: var(--nxgt-tone-text, inherit);
|
|
22
|
+
}
|
|
23
|
+
.nxgt-secret-card [data-slot="secret-card-pattern"] {
|
|
24
|
+
min-height: 6rem;
|
|
25
|
+
border-radius: 0.5rem;
|
|
26
|
+
border: 1px dashed var(--secret-card-line);
|
|
27
|
+
background-image: repeating-linear-gradient(
|
|
28
|
+
45deg,
|
|
29
|
+
color-mix(in oklab, var(--secret-card-line) 25%, transparent) 0 0.5rem,
|
|
30
|
+
transparent 0.5rem 1rem
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
.nxgt-secret-card [data-slot="secret-card-back"] {
|
|
34
|
+
min-height: 6rem;
|
|
35
|
+
display: grid;
|
|
36
|
+
place-items: center;
|
|
37
|
+
text-align: center;
|
|
38
|
+
overflow-wrap: anywhere;
|
|
39
|
+
font-size: 1.25rem;
|
|
40
|
+
font-weight: 600;
|
|
41
|
+
user-select: text;
|
|
42
|
+
}
|
|
43
|
+
.nxgt-secret-card [data-slot="secret-card-actions"] {
|
|
44
|
+
flex-wrap: wrap;
|
|
45
|
+
gap: 0.5rem;
|
|
46
|
+
}
|
|
47
|
+
.nxgt-secret-card [data-slot="secret-card-actions"] > button {
|
|
48
|
+
min-height: 44px;
|
|
49
|
+
}
|
|
50
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
51
|
+
.nxgt-secret-card [data-slot="secret-card-face"][data-changed] {
|
|
52
|
+
animation: nxgt-secret-flip 0.35s ease-out;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
@keyframes nxgt-secret-flip {
|
|
56
|
+
from {
|
|
57
|
+
opacity: 0;
|
|
58
|
+
transform: rotateY(90deg);
|
|
59
|
+
}
|
|
60
|
+
to {
|
|
61
|
+
opacity: 1;
|
|
62
|
+
transform: rotateY(0);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* VoteTally: ranked rows, label and "n votes, x%" as text, a decorative bar
|
|
2
|
+
* beneath. The bar is an SVG whose rect width is an attribute (no `style`,
|
|
3
|
+
* strict CSP). Leader and tie take the primary fill and a word; the others a
|
|
4
|
+
* quieter one. Layout is one column at any width: the stat wraps under the
|
|
5
|
+
* label on a phone, the bar keeps its own line, so counts changing never move
|
|
6
|
+
* a row. Bars ease only without reduced motion. */
|
|
7
|
+
@layer components {
|
|
8
|
+
.nxgt-vote-tally {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
gap: 0.75rem;
|
|
12
|
+
min-inline-size: 0;
|
|
13
|
+
}
|
|
14
|
+
.nxgt-vote-tally [data-slot="vote-tally-list"] {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
gap: 0.875rem;
|
|
18
|
+
margin: 0;
|
|
19
|
+
padding: 0;
|
|
20
|
+
list-style: none;
|
|
21
|
+
}
|
|
22
|
+
.nxgt-vote-tally [data-slot="vote-tally-row"] {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
gap: 0.375rem;
|
|
26
|
+
min-inline-size: 0;
|
|
27
|
+
}
|
|
28
|
+
.nxgt-vote-tally [data-slot="vote-tally-head"] {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-wrap: wrap;
|
|
31
|
+
align-items: baseline;
|
|
32
|
+
justify-content: space-between;
|
|
33
|
+
column-gap: 0.75rem;
|
|
34
|
+
row-gap: 0.125rem;
|
|
35
|
+
}
|
|
36
|
+
.nxgt-vote-tally [data-slot="vote-tally-name"] {
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
flex-wrap: wrap;
|
|
39
|
+
align-items: center;
|
|
40
|
+
gap: 0.375rem 0.5rem;
|
|
41
|
+
min-inline-size: 0;
|
|
42
|
+
font-weight: 500;
|
|
43
|
+
overflow-wrap: anywhere;
|
|
44
|
+
}
|
|
45
|
+
.nxgt-vote-tally [data-slot="vote-tally-marks"] {
|
|
46
|
+
display: inline-flex;
|
|
47
|
+
flex-wrap: wrap;
|
|
48
|
+
gap: 0.25rem;
|
|
49
|
+
}
|
|
50
|
+
.nxgt-vote-tally [data-slot="vote-tally-stat"] {
|
|
51
|
+
color: var(--muted-foreground);
|
|
52
|
+
font-size: 0.875rem;
|
|
53
|
+
font-variant-numeric: tabular-nums;
|
|
54
|
+
white-space: nowrap;
|
|
55
|
+
}
|
|
56
|
+
.nxgt-vote-tally [data-slot="vote-tally-bar"] {
|
|
57
|
+
display: block;
|
|
58
|
+
block-size: 0.625rem;
|
|
59
|
+
overflow: hidden;
|
|
60
|
+
border-radius: 9999px;
|
|
61
|
+
background: var(--muted);
|
|
62
|
+
}
|
|
63
|
+
.nxgt-vote-tally [data-slot="vote-tally-bar"] svg {
|
|
64
|
+
display: block;
|
|
65
|
+
inline-size: 100%;
|
|
66
|
+
block-size: 100%;
|
|
67
|
+
}
|
|
68
|
+
.nxgt-vote-tally:dir(rtl) [data-slot="vote-tally-bar"] svg {
|
|
69
|
+
transform: scaleX(-1);
|
|
70
|
+
}
|
|
71
|
+
.nxgt-vote-tally [data-slot="vote-tally-fill"] {
|
|
72
|
+
fill: color-mix(in oklab, var(--muted-foreground) 70%, var(--background));
|
|
73
|
+
}
|
|
74
|
+
.nxgt-vote-tally [data-leader] [data-slot="vote-tally-fill"],
|
|
75
|
+
.nxgt-vote-tally [data-selected] [data-slot="vote-tally-fill"] {
|
|
76
|
+
fill: var(--primary-indicator, var(--primary));
|
|
77
|
+
}
|
|
78
|
+
.nxgt-vote-tally [data-slot="vote-tally-voters"] {
|
|
79
|
+
margin: 0;
|
|
80
|
+
color: var(--muted-foreground);
|
|
81
|
+
font-size: 0.8125rem;
|
|
82
|
+
}
|
|
83
|
+
.nxgt-vote-tally [data-slot="vote-tally-empty"],
|
|
84
|
+
.nxgt-vote-tally [data-slot="vote-tally-abstain"] {
|
|
85
|
+
margin: 0;
|
|
86
|
+
color: var(--muted-foreground);
|
|
87
|
+
font-size: 0.875rem;
|
|
88
|
+
}
|
|
89
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
90
|
+
.nxgt-vote-tally[data-animated] [data-slot="vote-tally-fill"] {
|
|
91
|
+
transition: width 400ms cubic-bezier(0.2, 0, 0, 1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|