@nxgt/material 3.64.0 → 3.66.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 (126) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +4 -1
  3. package/dist/{alert-dialog-RHm6WtQj.js → alert-dialog-BgQDxcYh.js} +1 -1
  4. package/dist/{async-slice-DmX59NyA.js → async-slice-BCZyWgGr.js} +48 -25
  5. package/dist/{background-qdnet2A5.js → background-D1gC4m2R.js} +1 -1
  6. package/dist/backgrounds.js +1 -1
  7. package/dist/{button-DfS_amfQ.js → button-2de_lrix.js} +1 -1
  8. package/dist/charts.js +818 -807
  9. package/dist/{chip-Cbndukko.js → chip-Cs0uEjpu.js} +2 -2
  10. package/dist/{code-editor-B0tN8Ha_.js → code-editor-BYhBAfcc.js} +403 -393
  11. package/dist/code-editor.js +5 -5
  12. package/dist/{code-language-items-andgHKrM.js → code-language-items-xhmbF6wA.js} +2 -2
  13. package/dist/components/components.css +2 -0
  14. package/dist/components/ui/display/chip/chip-soft.css +19 -5
  15. package/dist/components/ui/layout/app-shell/activity-backdrop.css +4 -3
  16. package/dist/components/ui/primitives/tabs/tabs-nav-forced.css +27 -0
  17. package/dist/components/ui/primitives/toggle-group/toggle-group-segmented.css +10 -2
  18. package/dist/components/ui/primitives/toggle-group/toggle-group.css +5 -1
  19. package/dist/{components-2kTVPsMg.js → components-DYiyCe6v.js} +16922 -16679
  20. package/dist/components.js +28 -28
  21. package/dist/{compose-refs-DZ0iIVF-.js → compose-refs-G4J4kaUA.js} +1 -1
  22. package/dist/{dialog-Bd7Hid2L.js → dialog-Co5oksU1.js} +4 -4
  23. package/dist/dnd.js +2 -2
  24. package/dist/{dropdown-menu-_SyVmSuy.js → dropdown-menu-DdzyvN76.js} +1 -1
  25. package/dist/editor.js +365 -365
  26. package/dist/{empty-state-D-2ZMXXJ.js → empty-state-CQ0CV0kA.js} +2 -2
  27. package/dist/{field-blur-DyOByjzw.js → field-blur-B2y-bNYi.js} +1 -1
  28. package/dist/{field-blur-context-DPe5_Nv5.js → field-blur-context-BZtwcPUV.js} +1 -1
  29. package/dist/{hooks-a7_exKWS.js → hooks-DjuYsY-j.js} +2 -2
  30. package/dist/hooks.js +2 -2
  31. package/dist/{hover-card-D_0smKBQ.js → hover-card-BeBVy6tB.js} +1 -1
  32. package/dist/i18n.js +3 -3
  33. package/dist/{icon-badge-CBCU3ySF.js → icon-badge-DbYsbzwZ.js} +3 -3
  34. package/dist/{icon-button-hKHsWTAt.js → icon-button-Co6ttdv1.js} +1 -1
  35. package/dist/lib/components/ui/actions/index.d.ts +1 -0
  36. package/dist/lib/components/ui/actions/link/link.d.ts +1 -19
  37. package/dist/lib/components/ui/actions/share-button/index.d.ts +3 -0
  38. package/dist/lib/components/ui/actions/share-button/share-button.d.ts +17 -0
  39. package/dist/lib/components/ui/actions/share-button/share-or-copy.d.ts +17 -0
  40. package/dist/lib/components/ui/collections/dnd/index.d.ts +1 -1
  41. package/dist/lib/components/ui/collections/filter/use-filter-field-config.d.ts +1 -0
  42. package/dist/lib/components/ui/collections/server-table/past-end.d.ts +3 -0
  43. package/dist/lib/components/ui/collections/server-table/types.d.ts +2 -2
  44. package/dist/lib/components/ui/collections/server-table/use-table-answer.d.ts +1 -1
  45. package/dist/lib/components/ui/display/enrolment-card/use-enrolment-card-labels.d.ts +1 -1
  46. package/dist/lib/components/ui/display/recovery-codes/use-recovery-codes-labels.d.ts +1 -1
  47. package/dist/lib/components/ui/display/recovery-codes-status/use-recovery-codes-status-labels.d.ts +1 -1
  48. package/dist/lib/components/ui/display/stat-card/partials/stat-card-link-parts.d.ts +7 -0
  49. package/dist/lib/components/ui/display/stat-card/stat-card.d.ts +6 -1
  50. package/dist/lib/components/ui/display/stat-card/types.d.ts +14 -0
  51. package/dist/lib/components/ui/feedback/step-up-dialog/use-step-up-labels.d.ts +1 -1
  52. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  53. package/dist/lib/components/ui/fields/number-field/number-control.d.ts +4 -1
  54. package/dist/lib/components/ui/fields/number-field/number-stepper.d.ts +5 -0
  55. package/dist/lib/components/ui/fields/verification-code/use-verification-labels.d.ts +1 -1
  56. package/dist/lib/components/ui/layout/app-shell/route-transition.d.ts +1 -1
  57. package/dist/lib/components/ui/primitives/link/link-component-provider.d.ts +1 -1
  58. package/dist/lib/components/ui/primitives/link/nav-current.d.ts +22 -0
  59. package/dist/lib/components/ui/primitives/link/router-link.d.ts +25 -0
  60. package/dist/lib/components/ui/primitives/tabs/index.d.ts +2 -0
  61. package/dist/lib/components/ui/primitives/tabs/internal.d.ts +2 -0
  62. package/dist/lib/components/ui/primitives/tabs/partials/tabs-nav-link.d.ts +22 -0
  63. package/dist/lib/components/ui/primitives/tabs/tab-param-url.d.ts +53 -0
  64. package/dist/lib/components/ui/primitives/tabs/tabs-nav.d.ts +22 -0
  65. package/dist/lib/components/ui/primitives/tabs/tabs-selectors.d.ts +8 -0
  66. package/dist/lib/components/ui/primitives/tabs/use-tab-param.d.ts +35 -0
  67. package/dist/lib/components/ui/primitives/tabs/use-tabs-overflow.d.ts +4 -1
  68. package/dist/lib/components/ui/primitives/toggle-group/index.d.ts +1 -0
  69. package/dist/lib/components/ui/primitives/toggle-group/segmented-nav-item.d.ts +20 -0
  70. package/dist/lib/components/ui/primitives/toggle-group/segmented-nav.d.ts +22 -0
  71. package/dist/lib/components/ui/primitives/toggle-group/toggle-group.d.ts +4 -3
  72. package/dist/lib/components/ui/widgets/code-editor/code-editor-field.d.ts +7 -6
  73. package/dist/lib/components/ui/widgets/code-editor/code-editor-types.d.ts +6 -0
  74. package/dist/lib/components/ui/widgets/code-editor/use-code-editor-instance.d.ts +12 -1
  75. package/dist/lib/components/ui/widgets/native-charts/core/reference-geometry.d.ts +16 -2
  76. package/dist/lib/i18n/resources/en/en.d.ts +6 -0
  77. package/dist/lib/i18n/resources/en/material.json.d.ts +7 -1
  78. package/dist/lib/i18n/resources/fr/fr.d.ts +6 -0
  79. package/dist/lib/i18n/resources/fr/material.json.d.ts +7 -1
  80. package/dist/lib/i18n/resources/resources.d.ts +12 -0
  81. package/dist/lib/i18n/translator.d.ts +1 -1
  82. package/dist/lib.js +31 -54
  83. package/dist/main.js +42 -42
  84. package/dist/map.js +8 -8
  85. package/dist/material.css +1 -1
  86. package/dist/pdf-reader.js +1 -1
  87. package/dist/print.js +1 -1
  88. package/dist/{public-D8JGp3PH.js → public-AXwv1h3v.js} +10 -10
  89. package/dist/{rich-code-block-0R3bidsM.js → rich-code-block-qSvkA5rI.js} +5 -5
  90. package/dist/{sortable-provider-B75v53sB.js → sortable-provider-DPk-RVEU.js} +3 -3
  91. package/dist/{spinner-CAnpF3RK.js → spinner-PdSk7zEs.js} +1 -1
  92. package/dist/theme-picker.js +2 -2
  93. package/dist/{theme-toggle-pQ5F602V.js → theme-toggle-CZQckLDd.js} +2 -2
  94. package/dist/{toggle-group-BkH23Jk4.js → toggle-group-DXXlqid2.js} +1 -1
  95. package/dist/{toolbar-items-_ezD5B0r.js → toolbar-items-BmNYNaRB.js} +3 -3
  96. package/dist/{translate-material-CvZK8_S6.js → translate-material-BlCQ6AW9.js} +1 -1
  97. package/dist/{translator-Caf-d96e.js → translator-ChpeKCO3.js} +10 -2
  98. package/dist/{typography-CEK19bj8.js → typography-C4JSRr2B.js} +1 -1
  99. package/dist/{use-chat-composer-Dpvi_-CR.js → use-chat-composer-OUa9akfM.js} +1725 -1719
  100. package/dist/{use-heading-spy-mmcyEGmm.js → use-heading-spy-K-HUp4o_.js} +4 -4
  101. package/dist/{use-material-translation-C_1cWRzW.js → use-material-translation-DkE9J5NE.js} +1 -1
  102. package/dist/{use-return-focus-1ZIchrBM.js → use-return-focus-KypnR7vv.js} +1 -1
  103. package/docs/components/README.md +3 -1
  104. package/docs/components/buttons-and-actions.md +30 -1
  105. package/docs/components/data-display.md +14 -1
  106. package/docs/components/data-table-filter-and-lists.md +16 -3
  107. package/docs/components/form-fields.md +9 -1
  108. package/docs/components/navigation-and-layout.md +9 -5
  109. package/docs/components/primitives.md +209 -0
  110. package/docs/components/rich-widgets.md +1 -0
  111. package/docs/guides/charts.md +1 -1
  112. package/docs/guides/code-editor.md +14 -0
  113. package/docs/guides/i18n.md +3 -1
  114. package/docs/previews/buttons-actions-sharebutton.webp +0 -0
  115. package/docs/previews/primitives-segmentednav.webp +0 -0
  116. package/docs/previews/primitives-tabsnav.webp +0 -0
  117. package/docs/roadmap.md +2 -1
  118. package/docs/troubleshooting.md +35 -7
  119. package/lib/components/components.css +2 -0
  120. package/lib/components/ui/display/chip/chip-soft.css +19 -5
  121. package/lib/components/ui/layout/app-shell/activity-backdrop.css +4 -3
  122. package/lib/components/ui/primitives/tabs/tabs-nav-forced.css +27 -0
  123. package/lib/components/ui/primitives/toggle-group/toggle-group-segmented.css +10 -2
  124. package/lib/components/ui/primitives/toggle-group/toggle-group.css +5 -1
  125. package/package.json +2 -2
  126. /package/dist/lib/{components/ui/collections/dnd → lib}/compose-refs.d.ts +0 -0
@@ -79,6 +79,8 @@ words in your error.
79
79
 
80
80
  **Buttons & actions**
81
81
 
82
+ - [`useHref() may be used only in the context of a <Router> component` on a `TabsNav`, `SegmentedNav` or a `LinkButton`](#usehref-may-be-used-only-in-the-context-of-a-router-component-on-a-tabsnav-segmentednav-or-a-linkbutton)
83
+ - [A tab switch reloads the route's data, or the default tab shows `?tab=` in the URL](#a-tab-switch-reloads-the-routes-data-or-the-default-tab-shows-tab-in-the-url)
82
84
  - [An `ActionCard` inside a button or a link is a button inside a button](#an-actioncard-inside-a-button-or-a-link-is-a-button-inside-a-button)
83
85
  - [A `Card` class or a `[data-slot=card]` selector no longer styles an `ActionCard`](#a-card-class-or-a-data-slotcard-selector-no-longer-styles-an-actioncard)
84
86
  - [A `[data-slot=button]` selector no longer finds a SplitButton's half, or a class should style the whole split button](#a-data-slotbutton-selector-no-longer-finds-a-splitbuttons-half-or-a-class-should-style-the-whole-split-button)
@@ -1508,15 +1510,17 @@ top (`align="start"`).
1508
1510
  **When:** an `ActivityContent` `aside` scrolls away with the page instead of
1509
1511
  staying under the app bar, or it is not beside the content at 1280px.
1510
1512
  **Why:** `position: sticky` sticks inside its nearest scrolling ancestor, and
1511
- any ancestor with an `overflow` other than `visible` (`overflow-hidden`,
1512
- `overflow-auto`, `overflow-clip`; a `PaneLayout`'s root has `overflow-hidden`)
1513
- becomes that scroller, which does not scroll, so the panel never moves. A
1514
- wrapper of yours around the screen, or an `ActivityLayout` with
1515
- `scroll="container"` where you meant `"document"`, does the same. Below
1513
+ any ancestor with an `overflow` other than `visible` or `clip`
1514
+ (`overflow-hidden`, `overflow-auto`; a `PaneLayout`'s root and content use
1515
+ `overflow-clip`, which clips without becoming a scroller, so a sticky panel
1516
+ inside still sticks) becomes that scroller, which does not scroll, so the
1517
+ panel never moves. A wrapper of yours around the screen, or an
1518
+ `ActivityLayout` with `scroll="container"` where you meant `"document"`, does
1519
+ the same. Below
1516
1520
  `asideFrom` (1280px by default) the panel is stacked and not sticky on
1517
1521
  purpose, and the breakpoint is the window's width, not the column's.
1518
- **Fix:** take the `overflow` off every ancestor between `ActivityLayout` and
1519
- `ActivityContent`, or move it onto an element inside the screen; use
1522
+ **Fix:** take the `overflow` (other than `visible` or `clip`) off every
1523
+ ancestor between `ActivityLayout` and `ActivityContent`, or move it onto an element inside the screen; use
1520
1524
  `scroll="document"` (the default). Find the culprit in the console:
1521
1525
 
1522
1526
  ```js
@@ -1906,6 +1910,30 @@ return <IconButton size="lg" {...rest} />;
1906
1910
  <Button size="xl">Save</Button>
1907
1911
  ```
1908
1912
 
1913
+ ### `useHref() may be used only in the context of a <Router> component` on a `TabsNav`, `SegmentedNav` or a `LinkButton`
1914
+
1915
+ **When:** a `TabsNavLink`, `SegmentedNavItem`, `LinkButton`, `IconLinkButton` or `ResponsiveLinkButton` renders in a test, a story or a tree with no router, and no `LinkComponentProvider`.
1916
+ **Why:** without a provider (or a `linkComponent` prop), they render React Router's `Link`, which reads the router's context.
1917
+ **Fix:** wrap the tree in your router (`MemoryRouter` in a test or a story), or set a `LinkComponentProvider` once.
1918
+
1919
+ ```tsx
1920
+ <MemoryRouter>
1921
+ <TabsNav aria-label="Account" value="profile">
1922
+ <TabsNavLink to="/profile" value="profile">Profile</TabsNavLink>
1923
+ </TabsNav>
1924
+ </MemoryRouter>
1925
+ ```
1926
+
1927
+ ### A tab switch reloads the route's data, or the default tab shows `?tab=` in the URL
1928
+
1929
+ **When:** a route using `useTabParam` re-runs its loader on every tab click, or the first tab's link carries `?tab=overview`.
1930
+ **Why:** a search-param change revalidates the route's loaders unless `shouldRevalidate` says otherwise; and the default tab writes no param unless `explicitDefault` is on.
1931
+ **Fix:** export `skipTabChange()` as the route's `shouldRevalidate`, and leave `explicitDefault` off unless another param implies a tab. Parent routes' loaders still revalidate unless they export `skipTabChange` as well.
1932
+
1933
+ ```tsx
1934
+ export const shouldRevalidate = skipTabChange();
1935
+ ```
1936
+
1909
1937
  ## Feedback
1910
1938
 
1911
1939
  ### An `EmptyState` with no `kind` shows "No Data Found" where it showed "Something Went Wrong"
@@ -122,6 +122,8 @@
122
122
  @import "./ui/primitives/accordion/accordion.css";
123
123
  @import "./ui/primitives/accordion/accordion-surfaces.css";
124
124
  @import "./ui/primitives/collapsible/collapsible.css";
125
+ /* TabsNav in forced colours (the current link's mark). */
126
+ @import "./ui/primitives/tabs/tabs-nav-forced.css";
125
127
  /* ToggleGroup: shared rules, then one file per variant. */
126
128
  @import "./ui/primitives/toggle-group/toggle-group.css";
127
129
  @import "./ui/primitives/toggle-group/toggle-group-connected.css";
@@ -1,6 +1,10 @@
1
1
  /* Chip `tonal` and `filled`, "soft": no outline at all. A low tonal fill that reads as a
2
2
  * chip on any surface; selected = the library's primary tint, a hairline
3
- * ring in primary-text and a check (the ≥3:1 cue), the label unchanged. */
3
+ * ring in primary-text and a check (the ≥3:1 cue), the label unchanged. In
4
+ * dark the tint is mixed from --primary-text, the light end of the primary,
5
+ * 56 % at rest and 58 % on hover, and the label is white: in all 14 themes
6
+ * the fill is ≥3:1 over the surface and the label ≥4.5:1 (#2044); the deep
7
+ * --primary gave 1.3:1. */
4
8
  @layer components {
5
9
  .nxgt-chip[data-look="soft"] {
6
10
  --chip-bg: color-mix(in oklab, var(--foreground) 6.5%, var(--background));
@@ -9,8 +13,8 @@
9
13
  var(--foreground) 10%,
10
14
  var(--background)
11
15
  );
12
- --chip-on: color-mix(in oklab, var(--primary) 12%, var(--background));
13
- --chip-on-hover: color-mix(in oklab, var(--primary) 17%, var(--background));
16
+ --chip-on: color-mix(in oklab, var(--primary) 20%, var(--background));
17
+ --chip-on-hover: color-mix(in oklab, var(--primary) 25%, var(--background));
14
18
  --chip-on-ring: color-mix(
15
19
  in oklab,
16
20
  var(--primary-text) 75%,
@@ -25,8 +29,13 @@
25
29
  var(--foreground) 14%,
26
30
  var(--background)
27
31
  );
28
- --chip-on: color-mix(in oklab, var(--primary) 42%, var(--background));
29
- --chip-on-hover: color-mix(in oklab, var(--primary) 52%, var(--background));
32
+ --chip-on: color-mix(in oklab, var(--primary-text) 56%, var(--background));
33
+ --chip-on-hover: color-mix(
34
+ in oklab,
35
+ var(--primary-text) 58%,
36
+ var(--background)
37
+ );
38
+ --chip-on-text: white;
30
39
  --chip-on-ring: color-mix(
31
40
  in oklab,
32
41
  var(--primary-text) 80%,
@@ -43,6 +52,11 @@
43
52
  background: var(--chip-on);
44
53
  box-shadow: inset 0 0 0 1px var(--chip-on-ring);
45
54
  }
55
+ /* Dark: the label on the lighter fill is white (the foreground fell under
56
+ * 4.5:1 on some themes' hover). Light keeps the foreground. */
57
+ .nxgt-chip[data-look="soft"][data-selected] {
58
+ color: var(--chip-on-text, var(--foreground));
59
+ }
46
60
  .nxgt-chip[data-look="soft"][data-selected]:is(
47
61
  button:hover,
48
62
  :has(> button[data-slot="chip-body"]:hover)
@@ -149,9 +149,10 @@
149
149
  backdrop-filter: blur(var(--nxgt-backdrop-blur));
150
150
  }
151
151
 
152
- /* Tabs: the strip is a band, its top corners rounded. (The segmented look
153
- * has its own track.) */
154
- [data-slot="activity-layout"][data-backdrop] [data-slot="tabs-list"] {
152
+ /* Tabs and route tabs (`TabsNav`): the strip is a band, its top corners
153
+ * rounded. (The segmented look has its own track.) */
154
+ [data-slot="activity-layout"][data-backdrop]
155
+ :is([data-slot="tabs-list"], [data-slot="tabs-nav"]) {
155
156
  border-start-start-radius: var(--radius);
156
157
  border-start-end-radius: var(--radius);
157
158
  background: var(--nxgt-backdrop-fill-nav);
@@ -0,0 +1,27 @@
1
+ /* The indicator hides when no link is current (a `value` that matches none). */
2
+ [data-slot="tabs-nav"]:not(:has([data-state="active"]))
3
+ > [data-slot="tabs-indicator"] {
4
+ visibility: hidden;
5
+ }
6
+
7
+ /* TabsNav in forced colours: the current link keeps a mark. The indicator and
8
+ * the active link's ::after are backgrounds and borders, which the browser
9
+ * flattens; they are painted again with the system Highlight. React only
10
+ * (tabs-classes.ts is shared with Vue, so this is not a class there). */
11
+ @media (forced-colors: active) {
12
+ [data-slot="tabs-nav"][data-variant="underline"]
13
+ > [data-slot="tabs-indicator"],
14
+ [data-slot="tabs-nav"][data-variant="underline"]
15
+ [data-slot="tabs-trigger"][aria-current="page"]::after {
16
+ forced-color-adjust: none;
17
+ background: Highlight;
18
+ }
19
+ [data-slot="tabs-nav"][data-variant="segmented"]
20
+ > [data-slot="tabs-indicator"],
21
+ [data-slot="tabs-nav"][data-variant="segmented"]
22
+ [data-slot="tabs-trigger"][aria-current="page"]::after {
23
+ forced-color-adjust: none;
24
+ border: 2px solid Highlight;
25
+ background: Canvas;
26
+ }
27
+ }
@@ -61,7 +61,8 @@
61
61
  > .nxgt-toggle-group-item:hover:not(
62
62
  :disabled,
63
63
  [aria-checked="true"],
64
- [aria-pressed="true"]
64
+ [aria-pressed="true"],
65
+ [aria-current="page"]
65
66
  ) {
66
67
  background: var(--tg-seg-hover);
67
68
  }
@@ -78,7 +79,11 @@
78
79
  * every chosen state is primary). Forced colours: the pill is hidden and
79
80
  * the SelectedItem rule in toggle-group.css wins (its layer-less rule). */
80
81
  [data-variant="segmented"]
81
- > .nxgt-toggle-group-item:is([aria-checked="true"], [aria-pressed="true"]) {
82
+ > .nxgt-toggle-group-item:is(
83
+ [aria-checked="true"],
84
+ [aria-pressed="true"],
85
+ [aria-current="page"]
86
+ ) {
82
87
  color: var(--primary-text);
83
88
  }
84
89
 
@@ -135,6 +140,9 @@
135
140
  /* Multiple: a pill per pressed item; touching pills join. Also a single
136
141
  * group of 9 or more items, which has no sliding pill. */
137
142
  [data-variant="segmented"] > .nxgt-toggle-group-item[aria-pressed="true"],
143
+ /* SegmentedNav: a scrolling track has no sliding pill, the current link
144
+ * paints its own. */
145
+ [data-variant="segmented"] > .nxgt-toggle-group-item[aria-current="page"],
138
146
  [data-variant="segmented"]:has(> .nxgt-toggle-group-item:nth-of-type(9))
139
147
  > .nxgt-toggle-group-item[aria-checked="true"] {
140
148
  background: var(--tg-pill);
@@ -127,7 +127,11 @@
127
127
  .nxgt-toggle-group-item {
128
128
  border: 1px solid ButtonText;
129
129
  }
130
- .nxgt-toggle-group-item:is([aria-checked="true"], [aria-pressed="true"]) {
130
+ .nxgt-toggle-group-item:is(
131
+ [aria-checked="true"],
132
+ [aria-pressed="true"],
133
+ [aria-current="page"]
134
+ ) {
131
135
  forced-color-adjust: none;
132
136
  background: SelectedItem;
133
137
  color: SelectedItemText;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxgt/material",
3
- "version": "3.64.0",
3
+ "version": "3.66.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.0",
375
+ "@nxgt/material-core": "^0.45.1",
376
376
  "@base-ui/react": "^1.6.0",
377
377
  "@dnd-kit/core": "^6.3.1",
378
378
  "@dnd-kit/sortable": "^10.0.0",