@nxgt/material-vue 0.38.0 → 0.40.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 +64 -0
- package/README.md +1 -0
- package/dist/{Button-5UyKA-x_.js → Button-BAIJ8YvT.js} +1 -1
- package/dist/{DropdownMenuTrigger-BsuyNVzV.js → DropdownMenuTrigger-C7uYPf_9.js} +36 -36
- package/dist/{HoverCardTrigger-CmCDiTn8.js → HoverCardTrigger-CKtL8teP.js} +122 -120
- package/dist/{camera-BWzF8sOW.js → camera-2UuZVfGS.js} +4 -4
- package/dist/components/base-content.css +64 -4
- package/dist/components/theme-tokens.css +7 -2
- package/dist/{components-B_s5oxUp.js → components-CCrK1Sbt.js} +13631 -13383
- package/dist/components.js +8 -8
- package/dist/composables.js +3 -3
- package/dist/dnd.js +1 -1
- package/dist/{form-scope-UzoU38db.js → form-scope-BLjSnqUf.js} +1 -1
- package/dist/{i18n-provider-BEvjls8b.js → i18n-provider-BpNC9SxV.js} +1 -1
- package/dist/i18n.js +4 -4
- package/dist/{icon-button-DhqJE6Ej.js → icon-button-5bl9odKW.js} +1 -1
- package/dist/in-dialog-Blhwwbyb.js +31 -0
- package/dist/lib/components/ui/collections/data-table/data-table-density.d.ts +15 -0
- package/dist/lib/components/ui/collections/data-table/data-table.stories.columns.d.ts +49 -0
- package/dist/lib/components/ui/collections/data-table/data-table.stories.template.d.ts +1 -0
- package/dist/lib/components/ui/collections/data-table/index.d.ts +1 -1
- package/dist/lib/components/ui/collections/data-table/types.d.ts +7 -0
- package/dist/lib/components/ui/collections/facet-group/facet-group-classes.d.ts +18 -0
- package/dist/lib/components/ui/collections/facet-group/facet-group.vue.d.ts +47 -0
- package/dist/lib/components/ui/collections/facet-group/index.d.ts +2 -0
- package/dist/lib/components/ui/collections/index.d.ts +1 -0
- package/dist/lib/components/ui/fields/contacts/consts.d.ts +1 -1
- package/dist/lib/components/ui/layout/sidebar/sidebar-menu-item.vue.d.ts +4 -3
- package/dist/lib/components/ui/menu-item-loading.d.ts +26 -0
- package/dist/lib/components/ui/overlays/context-menu/ContextMenuItem.vue.d.ts +4 -2
- package/dist/lib/components/ui/overlays/dialog/in-dialog.d.ts +12 -0
- package/dist/lib/components/ui/overlays/dropdown-menu/DropdownMenuItem.vue.d.ts +9 -3
- package/dist/lib/components/ui/overlays/menubar/MenubarItem.vue.d.ts +4 -2
- package/dist/lib/composables/use-hidden-input-name.d.ts +12 -0
- package/dist/lib/i18n/resources/en/en.d.ts +7 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +8 -1
- package/dist/lib/i18n/resources/fr/fr.d.ts +7 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +8 -1
- package/dist/lib/i18n/resources/resources.d.ts +14 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib/nuxt/component-names.d.ts +1 -1
- package/dist/lib.js +3 -3
- package/dist/main.js +17 -17
- package/dist/map.js +4 -4
- package/dist/material-vue.css +1 -1
- package/dist/{number.utils-Bpo9tUaJ.js → number.utils-C1eB3GDr.js} +427 -427
- package/dist/{pdf-outline-sidebar-BsePJlTi.js → pdf-outline-sidebar-BUvWHjiE.js} +2 -2
- package/dist/{pdf-page-Ct313mNF.js → pdf-page-B57B0uES.js} +1 -1
- package/dist/{pdf-page-list-JrRo2BeU.js → pdf-page-list-BHU7pW0b.js} +2 -2
- package/dist/{pdf-reader-tABBZMbZ.js → pdf-reader-CwTYGXq8.js} +8 -8
- package/dist/{pdf-sidebar-Caw9rzU-.js → pdf-sidebar-CtMy8Kw_.js} +3 -3
- package/dist/{pdf-thumbnail-sidebar-ZybLeUG7.js → pdf-thumbnail-sidebar-DS0iT3qo.js} +3 -3
- package/dist/{pdf-toolbar-BM8Sz_JN.js → pdf-toolbar-DL_vCyXG.js} +5 -5
- package/dist/pdf.js +2 -2
- package/dist/{print-format.utils-CQFIVeUA.js → print-format.utils-k5W0GBRF.js} +3 -3
- package/dist/{sortable-provider-CKkWYijj.js → sortable-provider-cYkCa6tm.js} +2 -2
- package/dist/{stored-language-CvOHC8AD.js → stored-language-DEyPmUzl.js} +16 -2
- package/dist/{stx-player-CsVKbwFk.js → stx-player-C_lPkXc6.js} +13 -13
- package/dist/{translator-k1rKIgC7.js → translator-B62GlCBp.js} +1 -1
- package/dist/{use-heading-spy-D-ipoQwl.js → use-heading-spy-T94lNeNA.js} +21 -21
- package/dist/{use-material-translation-1FdRx9I7.js → use-material-translation-DxU51--g.js} +3 -3
- package/docs/components/data-table-filter-and-lists.md +45 -1
- package/docs/components/feedback-and-status.md +7 -6
- package/docs/components/form-fields.md +1 -1
- package/docs/components/navigation-and-layout.md +6 -5
- package/docs/components/overlays-and-menus.md +3 -0
- package/docs/guides/csp.md +10 -0
- package/docs/guides/forms.md +55 -4
- package/docs/guides/i18n.md +3 -2
- package/docs/guides/ssr.md +8 -0
- package/docs/guides/theming.md +29 -6
- package/docs/previews/buttons-actions-button.webp +0 -0
- package/docs/previews/data-display-avatar.webp +0 -0
- package/docs/previews/data-display-badge.webp +0 -0
- package/docs/previews/data-display-chip.webp +0 -0
- package/docs/previews/data-display-statusindicator.webp +0 -0
- package/docs/previews/data-display-timeline.webp +0 -0
- package/docs/previews/data-table-filter-lists-facetgroup.webp +0 -0
- package/docs/previews/feedback-status-alert.webp +0 -0
- package/docs/previews/feedback-status-banner.webp +0 -0
- package/docs/previews/feedback-status-circularprogress.webp +0 -0
- package/docs/previews/feedback-status-emptystate.webp +0 -0
- package/docs/previews/feedback-status-progress.webp +0 -0
- package/docs/previews/feedback-status-spinner.webp +0 -0
- package/docs/previews/feedback-status-toast.webp +0 -0
- package/docs/previews/form-fields-passwordfield.webp +0 -0
- package/docs/previews/form-fields-ratingfield.webp +0 -0
- package/docs/roadmap.md +5 -0
- package/docs/troubleshooting.md +32 -5
- package/lib/components/base-content.css +64 -4
- package/lib/components/theme-tokens.css +7 -2
- package/lib/nuxt/component-names.ts +1 -0
- package/package.json +2 -2
- package/dist/use-inert-others-CtGqZKR8.js +0 -22
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as e } from "./rolldown-runtime-CWhphoD1.js";
|
|
2
2
|
import { t } from "./utils-CykWQ0iJ.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as r } from "./use-material-translation-
|
|
3
|
+
import { Lf as n } from "./components-CCrK1Sbt.js";
|
|
4
|
+
import { t as r } from "./use-material-translation-DxU51--g.js";
|
|
5
5
|
import { Fragment as i, computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, defineComponent as u, normalizeClass as d, normalizeStyle as f, openBlock as p, ref as m, renderList as h, toDisplayString as g, unref as _, withCtx as v } from "vue";
|
|
6
6
|
//#region lib/components/ui/media/pdf-viewer/partials/pdf-outline-row.vue?vue&type=script&setup=true&lang.ts
|
|
7
7
|
var y = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./utils-CykWQ0iJ.js";
|
|
2
|
-
import {
|
|
2
|
+
import { Kp as t } from "./components-CCrK1Sbt.js";
|
|
3
3
|
import { computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, defineComponent as s, nextTick as c, normalizeClass as l, normalizeStyle as u, onBeforeUnmount as d, openBlock as f, ref as p, shallowRef as m, unref as h, watch as g } from "vue";
|
|
4
4
|
import { DEFAULT_PAGE_SIZE as _, escapeHtml as v, findTextMatches as y, highlightItemHtml as b, placeholderSize as x, rotatedSize as S } from "@nxgt/material-core/pdf-viewer";
|
|
5
5
|
//#region lib/components/ui/media/pdf-viewer/pdf-note-icons.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as e } from "./rolldown-runtime-CWhphoD1.js";
|
|
2
|
-
import {
|
|
3
|
-
import { t as n } from "./pdf-page-
|
|
2
|
+
import { Lf as t } from "./components-CCrK1Sbt.js";
|
|
3
|
+
import { t as n } from "./pdf-page-B57B0uES.js";
|
|
4
4
|
import { Fragment as r, createBlock as i, createElementBlock as a, createElementVNode as o, defineComponent as s, openBlock as c, renderList as l, withCtx as u } from "vue";
|
|
5
5
|
//#region lib/components/ui/media/pdf-viewer/partials/pdf-page-list.vue?vue&type=script&setup=true&lang.ts
|
|
6
6
|
var d = { class: "flex flex-col items-center gap-4 px-4 py-4" }, f = /*@__PURE__*/ s({
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { t as e } from "./utils-CykWQ0iJ.js";
|
|
2
|
-
import { kn as t } from "./components-
|
|
3
|
-
import { t as n } from "./use-material-translation-
|
|
4
|
-
import { t as r } from "./Button-
|
|
5
|
-
import { o as i } from "./HoverCardTrigger-
|
|
6
|
-
import { n as a } from "./pdf-page-
|
|
7
|
-
import { t as o } from "./pdf-page-list-
|
|
8
|
-
import { t as s } from "./pdf-sidebar-
|
|
9
|
-
import { t as c } from "./pdf-toolbar-
|
|
2
|
+
import { kn as t } from "./components-CCrK1Sbt.js";
|
|
3
|
+
import { t as n } from "./use-material-translation-DxU51--g.js";
|
|
4
|
+
import { t as r } from "./Button-BAIJ8YvT.js";
|
|
5
|
+
import { o as i } from "./HoverCardTrigger-CKtL8teP.js";
|
|
6
|
+
import { n as a } from "./pdf-page-B57B0uES.js";
|
|
7
|
+
import { t as o } from "./pdf-page-list-BHU7pW0b.js";
|
|
8
|
+
import { t as s } from "./pdf-sidebar-CtMy8Kw_.js";
|
|
9
|
+
import { t as c } from "./pdf-toolbar-DL_vCyXG.js";
|
|
10
10
|
import { computed as l, createBlock as u, createCommentVNode as d, createElementBlock as f, createElementVNode as p, createTextVNode as m, createVNode as h, defineComponent as g, nextTick as _, normalizeClass as v, onBeforeUnmount as y, onMounted as b, openBlock as x, reactive as S, ref as C, shallowRef as w, toDisplayString as T, toRef as E, unref as D, useId as O, watch as k, withCtx as A } from "vue";
|
|
11
11
|
import { AlertCircle as j, FileX2 as M, KeyRound as N, Loader2 as P } from "@lucide/vue";
|
|
12
12
|
import { pdfSourceKey as F, toPdfjsParams as I } from "@nxgt/material-core/pdf-source";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { n as e } from "./rolldown-runtime-CWhphoD1.js";
|
|
2
2
|
import { t } from "./utils-CykWQ0iJ.js";
|
|
3
|
-
import { t as n } from "./use-material-translation-
|
|
4
|
-
import { t as r } from "./pdf-outline-sidebar-
|
|
5
|
-
import { t as i } from "./pdf-thumbnail-sidebar-
|
|
3
|
+
import { t as n } from "./use-material-translation-DxU51--g.js";
|
|
4
|
+
import { t as r } from "./pdf-outline-sidebar-BUvWHjiE.js";
|
|
5
|
+
import { t as i } from "./pdf-thumbnail-sidebar-DS0iT3qo.js";
|
|
6
6
|
import { createElementBlock as a, createElementVNode as o, createVNode as s, defineComponent as c, normalizeClass as l, openBlock as u, toDisplayString as d, unref as f, useId as p, useTemplateRef as m } from "vue";
|
|
7
7
|
//#region lib/components/ui/media/pdf-viewer/partials/pdf-sidebar.vue?vue&type=script&setup=true&lang.ts
|
|
8
8
|
var h = ["aria-label"], g = ["aria-label"], _ = [
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { n as e } from "./rolldown-runtime-CWhphoD1.js";
|
|
2
2
|
import { t } from "./utils-CykWQ0iJ.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as r } from "./use-material-translation-
|
|
5
|
-
import { t as i } from "./pdf-page-
|
|
3
|
+
import { Lf as n } from "./components-CCrK1Sbt.js";
|
|
4
|
+
import { t as r } from "./use-material-translation-DxU51--g.js";
|
|
5
|
+
import { t as i } from "./pdf-page-B57B0uES.js";
|
|
6
6
|
import { Fragment as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createVNode as l, defineComponent as u, normalizeClass as d, openBlock as f, renderList as p, toDisplayString as m, unref as h, withCtx as g } from "vue";
|
|
7
7
|
//#region lib/components/ui/media/pdf-viewer/partials/pdf-thumbnail-sidebar.vue?vue&type=script&setup=true&lang.ts
|
|
8
8
|
var _ = ["aria-label"], v = {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as e } from "./rolldown-runtime-CWhphoD1.js";
|
|
2
2
|
import { t } from "./utils-CykWQ0iJ.js";
|
|
3
|
-
import { t as n } from "./use-material-translation-
|
|
4
|
-
import { d as r } from "./Button-
|
|
5
|
-
import { t as i } from "./icon-button-
|
|
6
|
-
import { a, i as o, n as s, o as c, r as l, t as u } from "./DropdownMenuTrigger-
|
|
7
|
-
import { o as d } from "./HoverCardTrigger-
|
|
3
|
+
import { t as n } from "./use-material-translation-DxU51--g.js";
|
|
4
|
+
import { d as r } from "./Button-BAIJ8YvT.js";
|
|
5
|
+
import { t as i } from "./icon-button-5bl9odKW.js";
|
|
6
|
+
import { a, i as o, n as s, o as c, r as l, t as u } from "./DropdownMenuTrigger-C7uYPf_9.js";
|
|
7
|
+
import { o as d } from "./HoverCardTrigger-CKtL8teP.js";
|
|
8
8
|
import { Fragment as f, computed as p, createBlock as m, createCommentVNode as h, createElementBlock as g, createElementVNode as _, createTextVNode as v, createVNode as y, defineComponent as b, nextTick as x, normalizeClass as S, openBlock as C, ref as w, renderList as T, toDisplayString as E, unref as D, useTemplateRef as O, watch as k, withCtx as A } from "vue";
|
|
9
9
|
import { ChevronDown as j, ChevronLeft as M, ChevronRight as N, ChevronUp as P, Download as F, Maximize2 as I, Minimize2 as L, Moon as R, Printer as z, RotateCw as B, Search as V, Sidebar as H, ZoomIn as U, ZoomOut as W } from "@lucide/vue";
|
|
10
10
|
//#region lib/components/ui/media/pdf-viewer/partials/pdf-toolbar-search.vue?vue&type=script&setup=true&lang.ts
|
package/dist/pdf.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as e, t } from "./use-material-translation-
|
|
2
|
-
import { t as n } from "./Button-
|
|
1
|
+
import { n as e, t } from "./use-material-translation-DxU51--g.js";
|
|
2
|
+
import { t as n } from "./Button-BAIJ8YvT.js";
|
|
3
3
|
import { computed as r, createBlock as i, createTextVNode as a, defineComponent as o, getCurrentInstance as s, nextTick as c, onMounted as l, onScopeDispose as u, openBlock as d, ref as f, renderSlot as p, shallowRef as m, toDisplayString as ee, toValue as h, unref as g, watch as te, withCtx as ne } from "vue";
|
|
4
4
|
import { contentDisposition as re, pdfBytesResponse as ie, toWebStream as ae } from "@nxgt/material-core/pdf/http";
|
|
5
5
|
import { badge as oe, dataTable as se, defaultPdfTheme as ce, definePdfDocument as _, divider as v, header as y, heading as b, image as x, keyValue as S, keyValueOf as C, link as w, metric as T, page as E, pageBreak as D, pageNumber as O, pdfDocument as k, resolvePdfColor as A, resolvePdfTheme as j, row as M, section as N, spacer as P, stack as F, table as I, text as L, totals as R } from "@nxgt/material-core/pdf/model";
|
|
@@ -1,7 +1,7 @@
|
|
|
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-DEyPmUzl.js";
|
|
2
|
+
import { r } from "./translator-B62GlCBp.js";
|
|
3
3
|
import { t as i } from "./_baseIsEqual-BUD8VQJE.js";
|
|
4
|
-
import {
|
|
4
|
+
import { E as a } from "./number.utils-C1eB3GDr.js";
|
|
5
5
|
import { defineComponent as o, getCurrentInstance as s, h as c, inject as l, provide as u, useId as d } from "vue";
|
|
6
6
|
import { defineStore as f } from "pinia";
|
|
7
7
|
import { invalidFormatMessage as p, sizeMessage as m } from "@nxgt/material-core/zod-issue-messages";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as e } from "./utils-CykWQ0iJ.js";
|
|
2
|
-
import { t } from "./use-material-translation-
|
|
3
|
-
import { t as n } from "./icon-button-
|
|
2
|
+
import { t } from "./use-material-translation-DxU51--g.js";
|
|
3
|
+
import { t as n } from "./icon-button-5bl9odKW.js";
|
|
4
4
|
import { Teleport as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createVNode as c, defineComponent as l, inject as u, mergeProps as d, normalizeStyle as f, onUnmounted as p, openBlock as m, provide as h, reactive as g, ref as _, renderSlot as v, toValue as y, unref as b, useAttrs as x, watch as S, watchEffect as C, withCtx as w, withModifiers as T } from "vue";
|
|
5
5
|
import { GripVertical as E } from "@lucide/vue";
|
|
6
6
|
import { Primitive as D } from "reka-ui";
|
|
@@ -129,7 +129,8 @@ var e = {
|
|
|
129
129
|
copy: "Copy",
|
|
130
130
|
copied: "Copied",
|
|
131
131
|
language: "Language",
|
|
132
|
-
"word-wrap": "Word wrap"
|
|
132
|
+
"word-wrap": "Word wrap",
|
|
133
|
+
"load-failed": "The editor could not be loaded."
|
|
133
134
|
},
|
|
134
135
|
"json-viewer": {
|
|
135
136
|
expand: "Expand",
|
|
@@ -345,6 +346,7 @@ var e = {
|
|
|
345
346
|
"select-all": "Select all",
|
|
346
347
|
"select-row": "Select row",
|
|
347
348
|
"toggle-row": "Toggle row details",
|
|
349
|
+
expand: "Expand",
|
|
348
350
|
"scroll-region": "Scrollable table"
|
|
349
351
|
},
|
|
350
352
|
pagination: {
|
|
@@ -753,6 +755,11 @@ var e = {
|
|
|
753
755
|
empty: "No results"
|
|
754
756
|
},
|
|
755
757
|
"option-count": { label: "{count, plural, one {result} other {results}}" },
|
|
758
|
+
"facet-group": {
|
|
759
|
+
name: "{title}, {count, plural, one {# selected} other {# selected}}",
|
|
760
|
+
clear: "Clear",
|
|
761
|
+
"clear-label": "Clear {title}"
|
|
762
|
+
},
|
|
756
763
|
autocomplete: {
|
|
757
764
|
empty: "No option found.",
|
|
758
765
|
add: "Add \"{query}\"",
|
|
@@ -1365,7 +1372,8 @@ var e = {
|
|
|
1365
1372
|
copy: "Copier",
|
|
1366
1373
|
copied: "Copié",
|
|
1367
1374
|
language: "Langage",
|
|
1368
|
-
"word-wrap": "Retour à la ligne"
|
|
1375
|
+
"word-wrap": "Retour à la ligne",
|
|
1376
|
+
"load-failed": "Impossible de charger l'éditeur."
|
|
1369
1377
|
},
|
|
1370
1378
|
"json-viewer": {
|
|
1371
1379
|
expand: "Déplier",
|
|
@@ -1581,6 +1589,7 @@ var e = {
|
|
|
1581
1589
|
"select-all": "Tout sélectionner",
|
|
1582
1590
|
"select-row": "Sélectionner la ligne",
|
|
1583
1591
|
"toggle-row": "Afficher ou masquer les détails de la ligne",
|
|
1592
|
+
expand: "Déplier",
|
|
1584
1593
|
"scroll-region": "Tableau défilant"
|
|
1585
1594
|
},
|
|
1586
1595
|
pagination: {
|
|
@@ -1989,6 +1998,11 @@ var e = {
|
|
|
1989
1998
|
empty: "Aucun résultat"
|
|
1990
1999
|
},
|
|
1991
2000
|
"option-count": { label: "{count, plural, one {résultat} other {résultats}}" },
|
|
2001
|
+
"facet-group": {
|
|
2002
|
+
name: "{title}, {count, plural, one {# sélectionné} other {# sélectionnés}}",
|
|
2003
|
+
clear: "Effacer",
|
|
2004
|
+
"clear-label": "Effacer {title}"
|
|
2005
|
+
},
|
|
1992
2006
|
autocomplete: {
|
|
1993
2007
|
empty: "Aucune option.",
|
|
1994
2008
|
add: "Ajouter « {query} »",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as e } from "./utils-CykWQ0iJ.js";
|
|
2
|
-
import { $t as t,
|
|
3
|
-
import { t as l } from "./use-material-translation-
|
|
2
|
+
import { $t as t, Jt as n, Qt as r, Xt as i, Yp as a, Yt as o, en as s, tn as c } from "./components-CCrK1Sbt.js";
|
|
3
|
+
import { t as l } from "./use-material-translation-DxU51--g.js";
|
|
4
4
|
import { createBlock as u, createCommentVNode as d, createElementBlock as f, createElementVNode as p, createTextVNode as m, createVNode as h, defineComponent as g, normalizeClass as _, openBlock as v, toDisplayString as y, unref as b, withCtx as x } from "vue";
|
|
5
5
|
//#region lib/components/ui/media/stx-player/partials/stx-player-frame.vue?vue&type=script&setup=true&lang.ts
|
|
6
6
|
var S = ["data-layout", "aria-label"], C = {
|
|
@@ -19,7 +19,7 @@ var S = ["data-layout", "aria-label"], C = {
|
|
|
19
19
|
Array
|
|
20
20
|
] }
|
|
21
21
|
},
|
|
22
|
-
setup(
|
|
22
|
+
setup(i) {
|
|
23
23
|
let { containerRef: g, state: w } = c();
|
|
24
24
|
function T(e) {
|
|
25
25
|
g.value = e instanceof HTMLElement ? e : null;
|
|
@@ -28,24 +28,24 @@ var S = ["data-layout", "aria-label"], C = {
|
|
|
28
28
|
return (c, l) => (v(), f("section", {
|
|
29
29
|
ref: T,
|
|
30
30
|
"data-slot": "stx-player",
|
|
31
|
-
"data-layout":
|
|
31
|
+
"data-layout": i.layout,
|
|
32
32
|
"aria-label": b(w).current?.title ?? b(E)("material.stx-player.label", "Media player"),
|
|
33
33
|
class: _(b(e)("@container rounded outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50", c.$props.class))
|
|
34
|
-
}, [
|
|
34
|
+
}, [i.layout === "mini" ? (v(), u(r, { key: 0 })) : (v(), f("div", {
|
|
35
35
|
key: 1,
|
|
36
|
-
class: _(b(e)("grid gap-3",
|
|
36
|
+
class: _(b(e)("grid gap-3", i.showQueue && "@min-[768px]:grid-cols-[minmax(0,1fr)_18rem] @min-[768px]:items-stretch"))
|
|
37
37
|
}, [p("div", { class: _(b(e)("bg-card overflow-hidden rounded border", b(w).current?.kind === "audio" && "flex flex-col gap-4 p-6")) }, [
|
|
38
|
-
b(w).current?.kind === "audio" ? (v(), f("div", C, [h(
|
|
38
|
+
b(w).current?.kind === "audio" ? (v(), f("div", C, [h(a, { variant: "title-medium" }, {
|
|
39
39
|
default: x(() => [m(y(b(w).current.title), 1)]),
|
|
40
40
|
_: 1
|
|
41
|
-
}), b(w).current.artist ? (v(), u(
|
|
41
|
+
}), b(w).current.artist ? (v(), u(a, {
|
|
42
42
|
key: 0,
|
|
43
43
|
class: "text-muted-foreground"
|
|
44
44
|
}, {
|
|
45
45
|
default: x(() => [m(y(b(w).current.artist) + " " + y(b(w).current.album ? ` · ${b(w).current.album}` : ""), 1)]),
|
|
46
46
|
_: 1
|
|
47
47
|
})) : d("", !0)])) : d("", !0),
|
|
48
|
-
h(
|
|
48
|
+
h(n, null, {
|
|
49
49
|
default: x(() => [b(w).current?.kind === "audio" ? d("", !0) : (v(), u(s, {
|
|
50
50
|
key: 0,
|
|
51
51
|
tone: "overlay"
|
|
@@ -62,7 +62,7 @@ var S = ["data-layout", "aria-label"], C = {
|
|
|
62
62
|
trailing: x(() => [h(t, { tone: "surface" })]),
|
|
63
63
|
_: 1
|
|
64
64
|
})) : d("", !0)
|
|
65
|
-
], 2),
|
|
65
|
+
], 2), i.showQueue ? (v(), u(o, {
|
|
66
66
|
key: 0,
|
|
67
67
|
class: "min-h-72"
|
|
68
68
|
})) : d("", !0)], 2))], 10, S));
|
|
@@ -99,16 +99,16 @@ var S = ["data-layout", "aria-label"], C = {
|
|
|
99
99
|
emits: ["trackChange"],
|
|
100
100
|
setup(e, { emit: t }) {
|
|
101
101
|
let n = e, r = t;
|
|
102
|
-
function
|
|
102
|
+
function a(e, t) {
|
|
103
103
|
n.onTrackChange?.(e, t), r("trackChange", e, t);
|
|
104
104
|
}
|
|
105
|
-
return (t, r) => (v(), u(
|
|
105
|
+
return (t, r) => (v(), u(i, {
|
|
106
106
|
tracks: e.tracks,
|
|
107
107
|
"current-index": e.currentIndex,
|
|
108
108
|
"default-index": e.defaultIndex,
|
|
109
109
|
"auto-play": e.autoPlay,
|
|
110
110
|
loop: e.loop,
|
|
111
|
-
"on-track-change":
|
|
111
|
+
"on-track-change": a
|
|
112
112
|
}, {
|
|
113
113
|
default: x(() => [h(w, {
|
|
114
114
|
layout: e.layout,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as e, i as t, r as n, t as r } from "./stored-language-
|
|
1
|
+
import { a as e, i as t, r as n, t as r } from "./stored-language-DEyPmUzl.js";
|
|
2
2
|
import { t as i } from "./get-CTzJAwfc.js";
|
|
3
3
|
//#region ../../node_modules/@formatjs/fast-memoize/index.js
|
|
4
4
|
function a(e, t) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as e } from "./i18n-provider-
|
|
2
|
-
import { c as t, d as n,
|
|
1
|
+
import { a as e } from "./i18n-provider-BpNC9SxV.js";
|
|
2
|
+
import { c as t, d as n, l as r, n as i, s as a, u as o } from "./number.utils-C1eB3GDr.js";
|
|
3
3
|
import { computed as s, getCurrentInstance as c, inject as l, onMounted as u, ref as d, shallowRef as f, toValue as p, watch as m } from "vue";
|
|
4
4
|
import { injectConfigProviderContext as h } from "reka-ui";
|
|
5
5
|
import { useIntersectionObserver as g, useMediaQuery as _, useSSRWidth as v, useStorage as y } from "@vueuse/core";
|
|
@@ -110,7 +110,7 @@ var D = {
|
|
|
110
110
|
let r, i = D[e];
|
|
111
111
|
return r = typeof i == "string" ? i : t === 1 ? i.one : i.other.replace("{{count}}", String(t)), n?.addSuffix ? n.comparison && n.comparison > 0 ? "dans " + r : "il y a " + r : r;
|
|
112
112
|
}, k = {
|
|
113
|
-
date:
|
|
113
|
+
date: n({
|
|
114
114
|
formats: {
|
|
115
115
|
full: "EEEE d MMMM y",
|
|
116
116
|
long: "d MMMM y",
|
|
@@ -119,7 +119,7 @@ var D = {
|
|
|
119
119
|
},
|
|
120
120
|
defaultWidth: "full"
|
|
121
121
|
}),
|
|
122
|
-
time:
|
|
122
|
+
time: n({
|
|
123
123
|
formats: {
|
|
124
124
|
full: "HH:mm:ss zzzz",
|
|
125
125
|
long: "HH:mm:ss z",
|
|
@@ -128,7 +128,7 @@ var D = {
|
|
|
128
128
|
},
|
|
129
129
|
defaultWidth: "full"
|
|
130
130
|
}),
|
|
131
|
-
dateTime:
|
|
131
|
+
dateTime: n({
|
|
132
132
|
formats: {
|
|
133
133
|
full: "{{date}} 'à' {{time}}",
|
|
134
134
|
long: "{{date}} 'à' {{time}}",
|
|
@@ -290,7 +290,7 @@ var D = {
|
|
|
290
290
|
], a;
|
|
291
291
|
return a = n === 1 ? r && i.includes(r) ? "ère" : "er" : "ème", n + a;
|
|
292
292
|
}, R = ["MMM", "MMMM"], z = {
|
|
293
|
-
en:
|
|
293
|
+
en: a,
|
|
294
294
|
fr: {
|
|
295
295
|
code: "fr",
|
|
296
296
|
formatDistance: O,
|
|
@@ -302,35 +302,35 @@ var D = {
|
|
|
302
302
|
value: "d"
|
|
303
303
|
} : e),
|
|
304
304
|
ordinalNumber: L,
|
|
305
|
-
era:
|
|
305
|
+
era: o({
|
|
306
306
|
values: M,
|
|
307
307
|
defaultWidth: "wide"
|
|
308
308
|
}),
|
|
309
|
-
quarter:
|
|
309
|
+
quarter: o({
|
|
310
310
|
values: N,
|
|
311
311
|
defaultWidth: "wide",
|
|
312
312
|
argumentCallback: (e) => e - 1
|
|
313
313
|
}),
|
|
314
|
-
month:
|
|
314
|
+
month: o({
|
|
315
315
|
values: P,
|
|
316
316
|
defaultWidth: "wide"
|
|
317
317
|
}),
|
|
318
|
-
day:
|
|
318
|
+
day: o({
|
|
319
319
|
values: F,
|
|
320
320
|
defaultWidth: "wide"
|
|
321
321
|
}),
|
|
322
|
-
dayPeriod:
|
|
322
|
+
dayPeriod: o({
|
|
323
323
|
values: I,
|
|
324
324
|
defaultWidth: "wide"
|
|
325
325
|
})
|
|
326
326
|
},
|
|
327
327
|
match: {
|
|
328
|
-
ordinalNumber:
|
|
328
|
+
ordinalNumber: t({
|
|
329
329
|
matchPattern: /^(\d+)(ième|ère|ème|er|e)?/i,
|
|
330
330
|
parsePattern: /\d+/i,
|
|
331
331
|
valueCallback: (e) => parseInt(e)
|
|
332
332
|
}),
|
|
333
|
-
era:
|
|
333
|
+
era: r({
|
|
334
334
|
matchPatterns: {
|
|
335
335
|
narrow: /^(av\.J\.C|ap\.J\.C|ap\.J\.-C)/i,
|
|
336
336
|
abbreviated: /^(av\.J\.-C|av\.J-C|apr\.J\.-C|apr\.J-C|ap\.J-C)/i,
|
|
@@ -340,7 +340,7 @@ var D = {
|
|
|
340
340
|
parsePatterns: { any: [/^av/i, /^ap/i] },
|
|
341
341
|
defaultParseWidth: "any"
|
|
342
342
|
}),
|
|
343
|
-
quarter:
|
|
343
|
+
quarter: r({
|
|
344
344
|
matchPatterns: {
|
|
345
345
|
narrow: /^T?[1234]/i,
|
|
346
346
|
abbreviated: /^[1234](er|ème|e)? trim\.?/i,
|
|
@@ -356,7 +356,7 @@ var D = {
|
|
|
356
356
|
defaultParseWidth: "any",
|
|
357
357
|
valueCallback: (e) => e + 1
|
|
358
358
|
}),
|
|
359
|
-
month:
|
|
359
|
+
month: r({
|
|
360
360
|
matchPatterns: {
|
|
361
361
|
narrow: /^[jfmasond]/i,
|
|
362
362
|
abbreviated: /^(janv|févr|mars|avr|mai|juin|juill|juil|août|sept|oct|nov|déc)\.?/i,
|
|
@@ -395,7 +395,7 @@ var D = {
|
|
|
395
395
|
},
|
|
396
396
|
defaultParseWidth: "any"
|
|
397
397
|
}),
|
|
398
|
-
day:
|
|
398
|
+
day: r({
|
|
399
399
|
matchPatterns: {
|
|
400
400
|
narrow: /^[lmjvsd]/i,
|
|
401
401
|
short: /^(di|lu|ma|me|je|ve|sa)/i,
|
|
@@ -425,7 +425,7 @@ var D = {
|
|
|
425
425
|
},
|
|
426
426
|
defaultParseWidth: "any"
|
|
427
427
|
}),
|
|
428
|
-
dayPeriod:
|
|
428
|
+
dayPeriod: r({
|
|
429
429
|
matchPatterns: {
|
|
430
430
|
narrow: /^(a|p|minuit|midi|mat\.?|ap\.?m\.?|soir|nuit)/i,
|
|
431
431
|
any: /^([ap]\.?\s?m\.?|du matin|de l'après[-\s]midi|du soir|de la nuit)/i
|
|
@@ -451,15 +451,15 @@ var D = {
|
|
|
451
451
|
}
|
|
452
452
|
};
|
|
453
453
|
function B() {
|
|
454
|
-
let
|
|
454
|
+
let t = e(), n = s(() => t?.language ?? "en"), r = s(() => z[n.value] ?? a);
|
|
455
455
|
return {
|
|
456
456
|
get language() {
|
|
457
|
-
return
|
|
457
|
+
return n.value;
|
|
458
458
|
},
|
|
459
459
|
get locale() {
|
|
460
|
-
return
|
|
460
|
+
return r.value;
|
|
461
461
|
},
|
|
462
|
-
format: (e, t) =>
|
|
462
|
+
format: (e, t) => i.format(e, t, r.value)
|
|
463
463
|
};
|
|
464
464
|
}
|
|
465
465
|
//#endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./stored-language-
|
|
2
|
-
import { a as e } from "./i18n-provider-
|
|
3
|
-
import { i as t, r as n } from "./translator-
|
|
1
|
+
import "./stored-language-DEyPmUzl.js";
|
|
2
|
+
import { a as e } from "./i18n-provider-BpNC9SxV.js";
|
|
3
|
+
import { i as t, r as n } from "./translator-B62GlCBp.js";
|
|
4
4
|
//#region lib/i18n/translate-material.ts
|
|
5
5
|
function r(e, r, i, a) {
|
|
6
6
|
if (e) for (let t of /* @__PURE__ */ new Set([e, e.split("-")[0]])) {
|
|
@@ -15,6 +15,7 @@ each other, so either can be used alone.
|
|
|
15
15
|
| <img src="../previews/data-table-filter-lists-datatable.webp" width="96" alt=""> | [DataTable](#datatable) | TanStack Table v9 with sorting, selection, expansion and pagination, client-side or one server page at a time |
|
|
16
16
|
| <img src="../previews/data-table-filter-lists-filter.webp" width="96" alt=""> | [Filter](#filter) | Schema-driven filters with chips, presets and persistence |
|
|
17
17
|
| <img src="../previews/data-table-filter-lists-filter.webp" width="96" alt=""> | [FilterInline, FilterPopover…](#filterinline-filterpopover-filterdialog-filtersheet-filterdrawer) | The filter panel inline or in an overlay |
|
|
18
|
+
| <img src="../previews/data-table-filter-lists-facetgroup.webp" width="96" alt=""> | [FacetGroup](#facetgroup) | A collapsible facet: a title, a count Badge, Clear and the values |
|
|
18
19
|
| <img src="../previews/data-table-filter-lists-pagination.webp" width="96" alt=""> | [Pagination](#pagination) | Pagination primitives |
|
|
19
20
|
| <img src="../previews/data-table-filter-lists-tree.webp" width="96" alt=""> | [Tree](#tree) | Expandable tree with selection and keyboard navigation |
|
|
20
21
|
| <img src="../previews/data-table-filter-lists-drag-and-drop.webp" width="96" alt=""> | [Drag and drop](#drag-and-drop) | `DndProvider`, `Sortable` and friends |
|
|
@@ -64,7 +65,8 @@ of your own; both footers take `disabled`);
|
|
|
64
65
|
`useColumnHelpers<T>()` returns a
|
|
65
66
|
`columnHelper` bound to the table's features and `predefinedColumns()` —
|
|
66
67
|
`select` (checkboxes) and `expand` (a toggle for the expanded row, named
|
|
67
|
-
"Toggle row details" (`material.table.labels.toggle-row`) with `aria-expanded
|
|
68
|
+
"Toggle row details" (`material.table.labels.toggle-row`) with `aria-expanded`, under a
|
|
69
|
+
visually hidden header "Expand", `material.table.labels.expand`);
|
|
68
70
|
`useDeleteRowsHandler(onDelete)` for a delete-selected action behind a
|
|
69
71
|
confirm dialog.
|
|
70
72
|
`dataTableFeatures` / `DataTableFeatures` are the TanStack v9 features the
|
|
@@ -84,6 +86,7 @@ table enables, for typing your own column defs.
|
|
|
84
86
|
| `scrollLabel` | `string` | "Scrollable table" | the name of the scroll region the table becomes while it overflows |
|
|
85
87
|
| `loading` | `boolean` | `false` | skeleton rows, or the current rows dimmed; `aria-busy`; controls disabled |
|
|
86
88
|
| `loadingRows` | `number` | the page size | how many skeleton rows |
|
|
89
|
+
| `density` | `'comfortable' \| 'compact'` | `'comfortable'` | `compact` tightens the cell padding, the row and header heights and the gap between rows, the selection column included; it is the table's `data-density` attribute, styled with classes (no inline style). The toolbar band and the empty state keep their size; the print variant is unchanged |
|
|
87
90
|
| `#empty="{ filtered }"` | slot | icon and "No data available" | content of the empty row, spanning every visible column |
|
|
88
91
|
| `manual` | `boolean` | `false` | `data` is one server page: no client filtering, sorting or paging; the footer is the server footer ([server-side data](#server-side-data)) |
|
|
89
92
|
| `v-model:sorting` | `SortingState` | held inside | controlled sorting; `update:sorting` gets the new state |
|
|
@@ -513,6 +516,47 @@ above shows `FilterPopover` open; every variant has its own story.
|
|
|
513
516
|
|
|
514
517
|
---
|
|
515
518
|
|
|
519
|
+
## FacetGroup
|
|
520
|
+
|
|
521
|
+

|
|
522
|
+
|
|
523
|
+
A collapsible facet: a header button with the title, a count Badge of the active values and a chevron, over the values. It is the building block of a facets panel.
|
|
524
|
+
|
|
525
|
+
```vue
|
|
526
|
+
<script setup lang="ts">
|
|
527
|
+
import { ref } from 'vue';
|
|
528
|
+
import { CheckboxGroup, FacetGroup } from '@nxgt/material-vue/components';
|
|
529
|
+
|
|
530
|
+
const levels = ref(['ce1']);
|
|
531
|
+
const options = [
|
|
532
|
+
{ value: 'ce1', label: 'CE1', count: 24 },
|
|
533
|
+
{ value: 'ce2', label: 'CE2', count: 10 },
|
|
534
|
+
];
|
|
535
|
+
</script>
|
|
536
|
+
|
|
537
|
+
<template>
|
|
538
|
+
<FacetGroup title="Level" :active-count="levels.length" @clear="levels = []">
|
|
539
|
+
<CheckboxGroup v-model="levels" aria-label="Level" orientation="vertical" :options="options" />
|
|
540
|
+
</FacetGroup>
|
|
541
|
+
</template>
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
| Prop | Type | Default | Effect |
|
|
545
|
+
| --- | --- | --- | --- |
|
|
546
|
+
| `title` | `string` | — | the facet's name, in the header; a string, because it builds the accessible names |
|
|
547
|
+
| `activeCount` | `number` | `0` | how many values are active: the count Badge (hidden at 0) and the toggle's name |
|
|
548
|
+
| `@clear` | `() => void` | — | the "Clear" button shows only with a listener and while `activeCount > 0`; the focus then goes to the toggle |
|
|
549
|
+
| `v-model:open` / `defaultOpen` | `boolean` / `boolean` | uncontrolled, open | controlled or not |
|
|
550
|
+
| `density` | `'comfortable' \| 'compact'` | `'comfortable'` | as [DataTable](#datatable)'s: a 40px header, 28px compact; `data-density`, styled with classes |
|
|
551
|
+
| `headingLevel` | `2 \| 3 \| 4 \| 5 \| 6` | `3` | the heading around the toggle |
|
|
552
|
+
| default slot | — | — | the values, typically a `CheckboxGroup` with option `count`s |
|
|
553
|
+
|
|
554
|
+
The toggle is a disclosure (`aria-expanded`, `aria-controls`) inside a heading. With active values its name is "Level, 2 selected" (`material.facet-group.name`, an ICU plural: "Level, 2 sélectionnés" in French); the Badge is decorative. "Clear" is named "Clear Level" (`material.facet-group.clear-label`) and is a sibling of the toggle, never inside it. The chevron turns over unless the user prefers reduced motion; every target is at least 24px, also when compact.
|
|
555
|
+
|
|
556
|
+
**Storybook:** `Data table, filter & lists/FacetGroup` · **React:** `FacetGroup`
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
516
560
|
## Pagination
|
|
517
561
|
|
|
518
562
|

|
|
@@ -92,7 +92,7 @@ const open = ref(true);
|
|
|
92
92
|
| --- | --- | --- | --- |
|
|
93
93
|
| `tone` | `'info' \| 'success' \| 'warning' \| 'error'` | `'info'` | colours and the default icon |
|
|
94
94
|
| `#icon` slot | — | the tone's icon | replaces the default icon |
|
|
95
|
-
| `#action` slot | — | — | rendered at the end of the banner |
|
|
95
|
+
| `#action` slot | — | — | rendered at the end of the banner; under `sm` it drops below the text, in line with it |
|
|
96
96
|
| `dismissible` | `boolean` | `false` | shows a close button that emits `dismiss`; the banner does not hide itself |
|
|
97
97
|
|
|
98
98
|
Where React shows the close button when `onDismiss` is passed, Vue asks for
|
|
@@ -603,13 +603,14 @@ is vue-sonner's own `toast`, for anything the presets do not cover.
|
|
|
603
603
|
|
|
604
604
|
**On a phone** (under 600px wide, where vue-sonner lays toasts out across the
|
|
605
605
|
screen), a `Toaster` with no `position` shows its toasts at the top
|
|
606
|
-
(`top-center`)
|
|
607
|
-
|
|
606
|
+
(`top-center`), 80px down so the app shell's sticky bar (menu button, title,
|
|
607
|
+
account control) stays reachable: across the bottom they covered what a form
|
|
608
|
+
keeps there, its submit button first, and at the very top that bar. A `position` you pass applies on every screen. The server
|
|
608
609
|
and the client's first render answer for a desktop (`bottom-right`, or for the
|
|
609
610
|
width `provideSSRWidth()` gives), and a phone moves the toasts to the top once
|
|
610
|
-
mounted. The phone offset is vue-sonner's `mobile-offset`
|
|
611
|
-
|
|
612
|
-
`<Toaster :mobile-offset="{ top:
|
|
611
|
+
mounted. The phone offset is vue-sonner's `mobile-offset`, `{ top: 80 }` by default
|
|
612
|
+
when no `position` is given; pass your own for a taller header:
|
|
613
|
+
`<Toaster :mobile-offset="{ top: 96 }" />`.
|
|
613
614
|
|
|
614
615
|
```vue
|
|
615
616
|
<Toaster /> <!-- bottom-right on a desktop, top-center on a phone -->
|
|
@@ -1045,7 +1045,7 @@ const notify = ref(true);
|
|
|
1045
1045
|
| `placeholder` | `string` | — | text inside the bordered row; with it, `label` sits above the row |
|
|
1046
1046
|
| `label` | `string` | — | without `placeholder`, it is the row text instead |
|
|
1047
1047
|
| `helper-text` | `string` | — | line under the row (or under the bare switch), with or without `placeholder` |
|
|
1048
|
-
| `error`, `required`, `disabled` | `boolean` | — | the row's state; `error` also sets `aria-invalid` on the `switch` (an `aria-invalid` you pass wins), `required` also sets `aria-required` and, with a `name` inside a `<form>`, the hidden input's `required` (an unchecked switch then blocks native submit) |
|
|
1048
|
+
| `error`, `required`, `disabled` | `boolean` | — | the row's state; `error` also sets `aria-invalid` on the `switch` (an `aria-invalid` you pass wins), `required` also sets `aria-required` and, with a `name` inside a `<form>`, the hidden input's `required` (after mount, an unchecked switch then blocks native submit; before it, the server sends no hidden input) |
|
|
1049
1049
|
|
|
1050
1050
|
The row's text is the switch's `<label>`, so a labelled switch has an
|
|
1051
1051
|
accessible name (`getByRole('switch', { name: 'Newsletter' })`) and clicking the
|
|
@@ -90,10 +90,11 @@ to the router's root, so a history base is kept; a crumb with params links to
|
|
|
90
90
|
its path with them filled in) and the current page is text with
|
|
91
91
|
`aria-current="page"`.
|
|
92
92
|
|
|
93
|
-
`AppSidebar`
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
pass,
|
|
93
|
+
`AppSidebar` entries have **no tooltip**: the collapsed rail shows each label
|
|
94
|
+
under its icon, and the expanded sidebar (and the phone menu sheet) beside it,
|
|
95
|
+
so a tooltip would only repeat it and cover the entry above. A
|
|
96
|
+
`SidebarMenuItem` of your own shows the `tooltip` you pass, to the right of the
|
|
97
|
+
entry, and an icon-only one (no label) falls back to its `aria-label`.
|
|
97
98
|
|
|
98
99
|
**Storybook:** `Navigation & layout/AppShell` · **React:** `ActivityLayout`, `ActivityContent`, `AppSidebar`, `AppHeader`, `AppBreadcrumb`
|
|
99
100
|
|
|
@@ -222,7 +223,7 @@ real link, a plain `<a>` unless you pass `link-component` (given the `href`):
|
|
|
222
223
|
|
|
223
224
|
| Prop | Type | Default | Effect |
|
|
224
225
|
| --- | --- | --- | --- |
|
|
225
|
-
| `v-model:expanded` | `boolean` | `false` | labels beside the icons; collapsed shows icons with
|
|
226
|
+
| `v-model:expanded` | `boolean` | `false` | labels beside the icons; collapsed shows icons with their labels under them, and no tooltip |
|
|
226
227
|
| `withToggleIcon` | `boolean` | `false` | built-in expand / collapse button, shown on hover or while focus is inside the sidebar, named "Toggle sidebar" (`material.sidebar.toggle`) with `aria-expanded` |
|
|
227
228
|
|
|
228
229
|
**Emits:** `update:expanded` with `boolean`.
|
|
@@ -453,6 +453,7 @@ Parts: `DropdownMenu`, `DropdownMenuTrigger`, `DropdownMenuContent`,
|
|
|
453
453
|
| Prop | Type | Default | Effect |
|
|
454
454
|
| --- | --- | --- | --- |
|
|
455
455
|
| `variant` (`DropdownMenuItem`) | `'default' \| 'error'` | `'default'` | error colour for a destructive item; `'destructive'` is a deprecated alias of `'error'`; both render `data-variant="error"`, so style or test with `[data-variant=error]` |
|
|
456
|
+
| `loading` (`DropdownMenuItem`) | `boolean` | `false` | busy item, e.g. a sign-out in flight: it stays focusable (not `disabled`), is `aria-busy` and `aria-disabled`, shows a spinner in place of its icon, and a selection is ignored: `@select` does not fire and the menu stays open; if `disabled` is set too, `loading` wins (the item is not disabled) |
|
|
456
457
|
| `inset` (item, label, sub-trigger) | `boolean` | — | indents to line up with checkbox and radio items |
|
|
457
458
|
| `@select` (`DropdownMenuItem`) | `(event: Event) => void` | — | the item's action; `event.preventDefault()` keeps the menu open |
|
|
458
459
|
| `default-open` / `v-model:open`, `modal` (`DropdownMenu`) | `boolean` | —, `false` | open state; `modal` brings back the scroll lock, swallowed outside clicks and an `aria-hidden`, `inert` page behind the menu |
|
|
@@ -510,6 +511,7 @@ Parts: `ContextMenu`, `ContextMenuTrigger`, `ContextMenuContent`,
|
|
|
510
511
|
| Prop | Type | Default | Effect |
|
|
511
512
|
| --- | --- | --- | --- |
|
|
512
513
|
| `variant` (`ContextMenuItem`) | `'default' \| 'error'` | `'default'` | error colour for a destructive item; `'destructive'` is a deprecated alias of `'error'` |
|
|
514
|
+
| `loading` (`ContextMenuItem`) | `boolean` | `false` | busy item, e.g. a sign-out in flight: it stays focusable (not `disabled`), is `aria-busy` and `aria-disabled`, shows a spinner in place of its icon, and a selection is ignored: `@select` does not fire and the menu stays open; if `disabled` is set too, `loading` wins (the item is not disabled) |
|
|
513
515
|
| `inset` (item, label, sub-trigger) | `boolean` | — | indents to line up with checkbox and radio items |
|
|
514
516
|
| `@update:open` (`ContextMenu`) | `(open: boolean) => void` | — | there is no `open` prop: only a right click (or long press) opens it |
|
|
515
517
|
|
|
@@ -570,6 +572,7 @@ Parts: `Menubar`, `MenubarMenu`, `MenubarTrigger`, `MenubarContent`,
|
|
|
570
572
|
| --- | --- | --- | --- |
|
|
571
573
|
| `default-value` / `v-model` (`Menubar`) | `string` | — | the open menu, by its `MenubarMenu` `value` |
|
|
572
574
|
| `variant` (`MenubarItem`) | `'default' \| 'error'` | — | error colour for a destructive item, as in the other menus; `'destructive'` is a deprecated alias of `'error'` |
|
|
575
|
+
| `loading` (`MenubarItem`) | `boolean` | `false` | busy item, e.g. a sign-out in flight: it stays focusable (not `disabled`), is `aria-busy` and `aria-disabled`, shows a spinner in place of its icon, and a selection is ignored: `@select` does not fire and the menu stays open; if `disabled` is set too, `loading` wins (the item is not disabled) |
|
|
573
576
|
| `inset` (`MenubarItem`) | `boolean` | — | indents to line up with checkbox and radio items |
|
|
574
577
|
|
|
575
578
|
Once one menu is open, moving the pointer across triggers opens the others, as
|
package/docs/guides/csp.md
CHANGED
|
@@ -60,6 +60,16 @@ configuration through `globalThis`, and the app and the library share one copy).
|
|
|
60
60
|
package manager (pnpm) does not let the app import a package it does not
|
|
61
61
|
list, so install what you import: `bun add zod reka-ui @monaco-editor/loader`.
|
|
62
62
|
|
|
63
|
+
## The hidden form inputs
|
|
64
|
+
|
|
65
|
+
`Checkbox`, `Switch`, `RadioGroup` and `Select` no longer render their hidden
|
|
66
|
+
form input on the server (Reka rendered it there with an inline `style`), so
|
|
67
|
+
those four need no `style-src-attr` for it. Other components still send inline
|
|
68
|
+
`style` attributes (the list is softistx/nxgt-material#596), so the
|
|
69
|
+
recommended policy above keeps `style-src-attr 'unsafe-inline'`. A page
|
|
70
|
+
without JavaScript, or a form posted natively before hydration, carries none
|
|
71
|
+
of these four controls' values: the input appears after mount.
|
|
72
|
+
|
|
63
73
|
## NonceProvider
|
|
64
74
|
|
|
65
75
|
Render `NonceProvider` once, at the root, with this request's nonce, on the
|