@salt-ds/lab 1.0.0-alpha.95 → 1.0.0-alpha.97
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 +63 -0
- package/css/salt-lab.css +70 -249
- package/dist-cjs/common-hooks/useSelection.js +6 -3
- package/dist-cjs/common-hooks/useSelection.js.map +1 -1
- package/dist-cjs/index.js +12 -14
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/list/useList.js +7 -1
- package/dist-cjs/list/useList.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenu.js +8 -14
- package/dist-cjs/mega-menu/MegaMenu.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuActions.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuActions.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuActions.js +33 -0
- package/dist-cjs/mega-menu/MegaMenuActions.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuAside.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuAside.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuAside.js +33 -0
- package/dist-cjs/mega-menu/MegaMenuAside.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuContent.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuContent.js +25 -0
- package/dist-cjs/mega-menu/MegaMenuContent.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuContext.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuGroup.css.js +1 -1
- package/dist-cjs/mega-menu/MegaMenuGroup.js +10 -25
- package/dist-cjs/mega-menu/MegaMenuGroup.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuGroupContext.js +17 -0
- package/dist-cjs/mega-menu/MegaMenuGroupContext.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuGroupHeading.js +39 -0
- package/dist-cjs/mega-menu/MegaMenuGroupHeading.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuGroups.css.js +1 -1
- package/dist-cjs/mega-menu/MegaMenuGroups.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuList.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuList.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuList.js +43 -0
- package/dist-cjs/mega-menu/MegaMenuList.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuListItem.css.js +6 -0
- package/dist-cjs/mega-menu/MegaMenuListItem.css.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuListItem.js +45 -0
- package/dist-cjs/mega-menu/MegaMenuListItem.js.map +1 -0
- package/dist-cjs/mega-menu/MegaMenuPanel.css.js +1 -1
- package/dist-cjs/mega-menu/MegaMenuPanel.js +27 -47
- package/dist-cjs/mega-menu/MegaMenuPanel.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuTrigger.js +16 -18
- package/dist-cjs/mega-menu/MegaMenuTrigger.js.map +1 -1
- package/dist-cjs/mega-menu/useMegaMenuNavigation.js +282 -0
- package/dist-cjs/mega-menu/useMegaMenuNavigation.js.map +1 -0
- package/dist-cjs/mega-menu/usePageMargin.js +22 -0
- package/dist-cjs/mega-menu/usePageMargin.js.map +1 -0
- package/dist-es/common-hooks/useSelection.js +6 -3
- package/dist-es/common-hooks/useSelection.js.map +1 -1
- package/dist-es/index.js +6 -7
- package/dist-es/index.js.map +1 -1
- package/dist-es/list/useList.js +7 -1
- package/dist-es/list/useList.js.map +1 -1
- package/dist-es/mega-menu/MegaMenu.js +9 -15
- package/dist-es/mega-menu/MegaMenu.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuActions.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuActions.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuActions.js +31 -0
- package/dist-es/mega-menu/MegaMenuActions.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuAside.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuAside.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuAside.js +31 -0
- package/dist-es/mega-menu/MegaMenuAside.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuContent.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuContent.css.js.map +1 -0
- package/dist-es/mega-menu/{MegaMenuHeader.js → MegaMenuContent.js} +8 -8
- package/dist-es/mega-menu/MegaMenuContent.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuContext.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuGroup.css.js +1 -1
- package/dist-es/mega-menu/MegaMenuGroup.js +13 -28
- package/dist-es/mega-menu/MegaMenuGroup.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuGroupContext.js +14 -0
- package/dist-es/mega-menu/MegaMenuGroupContext.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuGroupHeading.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuGroupHeading.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuGroupHeading.js +37 -0
- package/dist-es/mega-menu/MegaMenuGroupHeading.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuGroups.css.js +1 -1
- package/dist-es/mega-menu/MegaMenuGroups.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuList.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuList.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuList.js +41 -0
- package/dist-es/mega-menu/MegaMenuList.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuListItem.css.js +4 -0
- package/dist-es/mega-menu/MegaMenuListItem.css.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuListItem.js +43 -0
- package/dist-es/mega-menu/MegaMenuListItem.js.map +1 -0
- package/dist-es/mega-menu/MegaMenuPanel.css.js +1 -1
- package/dist-es/mega-menu/MegaMenuPanel.js +30 -50
- package/dist-es/mega-menu/MegaMenuPanel.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuTrigger.js +14 -16
- package/dist-es/mega-menu/MegaMenuTrigger.js.map +1 -1
- package/dist-es/mega-menu/useMegaMenuNavigation.js +278 -0
- package/dist-es/mega-menu/useMegaMenuNavigation.js.map +1 -0
- package/dist-es/mega-menu/usePageMargin.js +20 -0
- package/dist-es/mega-menu/usePageMargin.js.map +1 -0
- package/dist-types/index.d.ts +0 -1
- package/dist-types/mega-menu/MegaMenu.d.ts +11 -2
- package/dist-types/mega-menu/MegaMenuActions.d.ts +10 -0
- package/dist-types/mega-menu/MegaMenuAside.d.ts +9 -0
- package/dist-types/mega-menu/MegaMenuContent.d.ts +9 -0
- package/dist-types/mega-menu/MegaMenuContext.d.ts +6 -7
- package/dist-types/mega-menu/MegaMenuGroup.d.ts +4 -3
- package/dist-types/mega-menu/MegaMenuGroupContext.d.ts +12 -0
- package/dist-types/mega-menu/MegaMenuGroupHeading.d.ts +13 -0
- package/dist-types/mega-menu/MegaMenuGroups.d.ts +3 -3
- package/dist-types/mega-menu/MegaMenuList.d.ts +16 -0
- package/dist-types/mega-menu/MegaMenuListItem.d.ts +25 -0
- package/dist-types/mega-menu/MegaMenuPanel.d.ts +2 -2
- package/dist-types/mega-menu/MegaMenuTrigger.d.ts +1 -0
- package/dist-types/mega-menu/index.d.ts +6 -4
- package/dist-types/mega-menu/useMegaMenuNavigation.d.ts +16 -0
- package/dist-types/mega-menu/usePageMargin.d.ts +6 -0
- package/package.json +2 -2
- package/dist-cjs/mega-menu/MegaMenuHeader.css.js +0 -6
- package/dist-cjs/mega-menu/MegaMenuHeader.css.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuHeader.js +0 -25
- package/dist-cjs/mega-menu/MegaMenuHeader.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuItem.css.js +0 -6
- package/dist-cjs/mega-menu/MegaMenuItem.css.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuItem.js +0 -53
- package/dist-cjs/mega-menu/MegaMenuItem.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js +0 -6
- package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuSupportingActions.js +0 -31
- package/dist-cjs/mega-menu/MegaMenuSupportingActions.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js +0 -6
- package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js.map +0 -1
- package/dist-cjs/mega-menu/MegaMenuSupportingContent.js +0 -31
- package/dist-cjs/mega-menu/MegaMenuSupportingContent.js.map +0 -1
- package/dist-cjs/mega-menu/useMegaMenuKeyboard.js +0 -209
- package/dist-cjs/mega-menu/useMegaMenuKeyboard.js.map +0 -1
- package/dist-cjs/toolbar-next/ToolbarContentNext.css.js +0 -6
- package/dist-cjs/toolbar-next/ToolbarContentNext.css.js.map +0 -1
- package/dist-cjs/toolbar-next/ToolbarContentNext.js +0 -32
- package/dist-cjs/toolbar-next/ToolbarContentNext.js.map +0 -1
- package/dist-cjs/toolbar-next/ToolbarNext.css.js +0 -6
- package/dist-cjs/toolbar-next/ToolbarNext.css.js.map +0 -1
- package/dist-cjs/toolbar-next/ToolbarNext.js +0 -394
- package/dist-cjs/toolbar-next/ToolbarNext.js.map +0 -1
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js +0 -6
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js.map +0 -1
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +0 -706
- package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +0 -1
- package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +0 -165
- package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +0 -1
- package/dist-cjs/toolbar-next/TooltrayNext.css.js +0 -6
- package/dist-cjs/toolbar-next/TooltrayNext.css.js.map +0 -1
- package/dist-cjs/toolbar-next/TooltrayNext.js +0 -55
- package/dist-cjs/toolbar-next/TooltrayNext.js.map +0 -1
- package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +0 -409
- package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +0 -1
- package/dist-cjs/toolbar-next/toolbarNextUtils.js +0 -215
- package/dist-cjs/toolbar-next/toolbarNextUtils.js.map +0 -1
- package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +0 -312
- package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +0 -1
- package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +0 -743
- package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuHeader.css.js +0 -4
- package/dist-es/mega-menu/MegaMenuHeader.css.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuHeader.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuItem.css.js +0 -4
- package/dist-es/mega-menu/MegaMenuItem.css.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuItem.js +0 -51
- package/dist-es/mega-menu/MegaMenuItem.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuSupportingActions.css.js +0 -4
- package/dist-es/mega-menu/MegaMenuSupportingActions.css.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuSupportingActions.js +0 -29
- package/dist-es/mega-menu/MegaMenuSupportingActions.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuSupportingContent.css.js +0 -4
- package/dist-es/mega-menu/MegaMenuSupportingContent.css.js.map +0 -1
- package/dist-es/mega-menu/MegaMenuSupportingContent.js +0 -29
- package/dist-es/mega-menu/MegaMenuSupportingContent.js.map +0 -1
- package/dist-es/mega-menu/useMegaMenuKeyboard.js +0 -205
- package/dist-es/mega-menu/useMegaMenuKeyboard.js.map +0 -1
- package/dist-es/toolbar-next/ToolbarContentNext.css.js +0 -4
- package/dist-es/toolbar-next/ToolbarContentNext.css.js.map +0 -1
- package/dist-es/toolbar-next/ToolbarContentNext.js +0 -30
- package/dist-es/toolbar-next/ToolbarContentNext.js.map +0 -1
- package/dist-es/toolbar-next/ToolbarNext.css.js +0 -4
- package/dist-es/toolbar-next/ToolbarNext.css.js.map +0 -1
- package/dist-es/toolbar-next/ToolbarNext.js +0 -392
- package/dist-es/toolbar-next/ToolbarNext.js.map +0 -1
- package/dist-es/toolbar-next/ToolbarNextOverflow.css.js +0 -4
- package/dist-es/toolbar-next/ToolbarNextOverflow.css.js.map +0 -1
- package/dist-es/toolbar-next/ToolbarNextOverflow.js +0 -701
- package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +0 -1
- package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +0 -159
- package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +0 -1
- package/dist-es/toolbar-next/TooltrayNext.css.js +0 -4
- package/dist-es/toolbar-next/TooltrayNext.css.js.map +0 -1
- package/dist-es/toolbar-next/TooltrayNext.js +0 -53
- package/dist-es/toolbar-next/TooltrayNext.js.map +0 -1
- package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +0 -390
- package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +0 -1
- package/dist-es/toolbar-next/toolbarNextUtils.js +0 -211
- package/dist-es/toolbar-next/toolbarNextUtils.js.map +0 -1
- package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +0 -310
- package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +0 -1
- package/dist-es/toolbar-next/useToolbarNextOverflow.js +0 -741
- package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +0 -1
- package/dist-types/mega-menu/MegaMenuHeader.d.ts +0 -8
- package/dist-types/mega-menu/MegaMenuItem.d.ts +0 -13
- package/dist-types/mega-menu/MegaMenuSupportingActions.d.ts +0 -8
- package/dist-types/mega-menu/MegaMenuSupportingContent.d.ts +0 -8
- package/dist-types/mega-menu/useMegaMenuKeyboard.d.ts +0 -30
- package/dist-types/toolbar-next/ToolbarContentNext.d.ts +0 -11
- package/dist-types/toolbar-next/ToolbarNext.d.ts +0 -12
- package/dist-types/toolbar-next/ToolbarNextOverflow.d.ts +0 -34
- package/dist-types/toolbar-next/ToolbarNextOverflowFloatingBoundary.d.ts +0 -16
- package/dist-types/toolbar-next/TooltrayNext.d.ts +0 -37
- package/dist-types/toolbar-next/index.d.ts +0 -3
- package/dist-types/toolbar-next/toolbarNextKeyboardUtils.d.ts +0 -39
- package/dist-types/toolbar-next/toolbarNextUtils.d.ts +0 -42
- package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +0 -42
- package/dist-types/toolbar-next/useToolbarNextOverflow.d.ts +0 -37
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,68 @@
|
|
|
1
1
|
# @salt-ds/lab
|
|
2
2
|
|
|
3
|
+
## 1.0.0-alpha.97
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2516755: Removed `ToolbarNext`, `ToolbarContentNext`, and `TooltrayNext` from lab and promoted to core. As part of the promotion the components were renamed e.g., `ToolbarNext` is now `Toolbar`.
|
|
8
|
+
|
|
9
|
+
The legacy `Toolbar` and `Tooltray` exports in lab are unchanged.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [906c94e]
|
|
14
|
+
- Updated dependencies [2516755]
|
|
15
|
+
- Updated dependencies [027f8c4]
|
|
16
|
+
- Updated dependencies [027f8c4]
|
|
17
|
+
- @salt-ds/core@1.65.0
|
|
18
|
+
|
|
19
|
+
## 1.0.0-alpha.96
|
|
20
|
+
|
|
21
|
+
### Minor Changes
|
|
22
|
+
|
|
23
|
+
- 248982a: Reworked `MegaMenu` for more semantic, accessible markup and more predictable
|
|
24
|
+
keyboard navigation.
|
|
25
|
+
|
|
26
|
+
- **Renamed `MegaMenuHeader` to `MegaMenuGroupHeading`.** It now renders a real heading (`<h3>` by default; set the level with `as`, e.g. `as="h2"`) instead of a `<div>`, so each group appears in the document outline for assistive technology.
|
|
27
|
+
- **Renamed `MegaMenuItem` to `MegaMenuListItem`.** It renders an `<a>` by default — pass a `render` element such as `react-router`'s `Link` — and accepts a `current` prop that sets `aria-current="page"` for the active page.
|
|
28
|
+
- **Added `MegaMenuList`.** Wrap a group's items in it so they are announced as a list; `MegaMenuListItem` can no longer be placed directly inside `MegaMenuGroup`.
|
|
29
|
+
- **Renamed `MegaMenuSupportingContent` to `MegaMenuAside`.** It now renders an `<aside>` landmark, making the supporting region discoverable to screen-reader users.
|
|
30
|
+
- **Renamed `MegaMenuSupportingActions` to `MegaMenuActions`.**
|
|
31
|
+
- **Added `MegaMenuContent`.** It is the center navigation region holding the groups and an optional `MegaMenuActions` band; `MegaMenuAside` sits beside it, positioned by source order.
|
|
32
|
+
- **Narrowed `MegaMenu`'s `placement` prop** to `"bottom" | "bottom-start" | "bottom-end"` (the new `MegaMenuPlacement` type).
|
|
33
|
+
- **Menu columns now adapt to the available width** instead of overflowing, keeping panels usable on narrower viewports.
|
|
34
|
+
- **Keyboard navigation is more predictable** between the columns, the actions row, and the trigger;
|
|
35
|
+
|
|
36
|
+
```diff
|
|
37
|
+
<MegaMenuPanel aria-label="Solutions menu">
|
|
38
|
+
+ <MegaMenuContent>
|
|
39
|
+
<MegaMenuGroups>
|
|
40
|
+
<MegaMenuGroup>
|
|
41
|
+
- <MegaMenuHeader>Financial services</MegaMenuHeader>
|
|
42
|
+
- <MegaMenuItem render={<Link to="/digital-banking" />}>Digital banking</MegaMenuItem>
|
|
43
|
+
+ <MegaMenuGroupHeading>Financial services</MegaMenuGroupHeading>
|
|
44
|
+
+ <MegaMenuList>
|
|
45
|
+
+ <MegaMenuListItem render={<Link to="/digital-banking" />}>Digital banking</MegaMenuListItem>
|
|
46
|
+
+ </MegaMenuList>
|
|
47
|
+
</MegaMenuGroup>
|
|
48
|
+
</MegaMenuGroups>
|
|
49
|
+
- <MegaMenuSupportingActions>
|
|
50
|
+
+ <MegaMenuActions>
|
|
51
|
+
<Link href="#demo">Book a demo</Link>
|
|
52
|
+
- </MegaMenuSupportingActions>
|
|
53
|
+
+ </MegaMenuActions>
|
|
54
|
+
+ </MegaMenuContent>
|
|
55
|
+
- <MegaMenuSupportingContent>...</MegaMenuSupportingContent>
|
|
56
|
+
+ <MegaMenuAside>...</MegaMenuAside>
|
|
57
|
+
</MegaMenuPanel>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Patch Changes
|
|
61
|
+
|
|
62
|
+
- bab3b6c: Fixed `ToolbarNext` overflow calculations to preserve fractional browser measurements and avoid false overflow caused by subpixel rounding.
|
|
63
|
+
- Updated dependencies [1a48c1a]
|
|
64
|
+
- @salt-ds/core@1.64.1
|
|
65
|
+
|
|
3
66
|
## 1.0.0-alpha.95
|
|
4
67
|
|
|
5
68
|
### Minor Changes
|
package/css/salt-lab.css
CHANGED
|
@@ -1893,51 +1893,81 @@
|
|
|
1893
1893
|
border-right: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-primary-borderColor);
|
|
1894
1894
|
}
|
|
1895
1895
|
|
|
1896
|
-
/* src/mega-menu/
|
|
1897
|
-
.
|
|
1896
|
+
/* src/mega-menu/MegaMenuActions.css */
|
|
1897
|
+
.saltMegaMenuActions {
|
|
1898
1898
|
display: flex;
|
|
1899
|
-
flex-
|
|
1899
|
+
flex-wrap: wrap;
|
|
1900
|
+
margin-block-start: auto;
|
|
1900
1901
|
}
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1902
|
+
|
|
1903
|
+
/* src/mega-menu/MegaMenuAside.css */
|
|
1904
|
+
.saltMegaMenuAside {
|
|
1905
|
+
flex: 0 0 auto;
|
|
1905
1906
|
display: flex;
|
|
1906
|
-
gap: var(--salt-spacing-fixed-100);
|
|
1907
1907
|
flex-direction: column;
|
|
1908
|
+
padding: var(--salt-spacing-300);
|
|
1908
1909
|
}
|
|
1909
1910
|
|
|
1910
|
-
/* src/mega-menu/
|
|
1911
|
-
.
|
|
1912
|
-
display:
|
|
1913
|
-
|
|
1911
|
+
/* src/mega-menu/MegaMenuContent.css */
|
|
1912
|
+
.saltMegaMenuContent {
|
|
1913
|
+
display: flex;
|
|
1914
|
+
flex-direction: column;
|
|
1914
1915
|
gap: var(--salt-spacing-300);
|
|
1915
1916
|
padding: var(--salt-spacing-300);
|
|
1916
|
-
|
|
1917
|
+
min-width: 0;
|
|
1918
|
+
flex: 0 1 auto;
|
|
1919
|
+
max-inline-size: var(--saltMegaMenuPanel-availableWidth);
|
|
1920
|
+
box-sizing: border-box;
|
|
1917
1921
|
}
|
|
1918
1922
|
|
|
1919
|
-
/* src/mega-menu/
|
|
1920
|
-
.
|
|
1923
|
+
/* src/mega-menu/MegaMenuGroup.css */
|
|
1924
|
+
.saltMegaMenuGroup {
|
|
1925
|
+
display: flex;
|
|
1926
|
+
flex-direction: column;
|
|
1927
|
+
}
|
|
1928
|
+
|
|
1929
|
+
/* src/mega-menu/MegaMenuGroupHeading.css */
|
|
1930
|
+
.saltMegaMenuGroupHeading {
|
|
1921
1931
|
display: flex;
|
|
1922
1932
|
align-items: center;
|
|
1933
|
+
margin: 0 0 var(--salt-spacing-50);
|
|
1923
1934
|
padding: var(--salt-spacing-50) var(--salt-spacing-100);
|
|
1935
|
+
border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-tertiary-borderColor);
|
|
1936
|
+
min-height: var(--salt-size-base);
|
|
1924
1937
|
font-family: var(--salt-text-label-fontFamily);
|
|
1925
1938
|
font-size: var(--salt-text-label-fontSize);
|
|
1926
1939
|
font-weight: var(--salt-text-fontWeight-strong);
|
|
1927
1940
|
line-height: var(--salt-text-label-lineHeight);
|
|
1928
|
-
min-height: var(--salt-size-base);
|
|
1929
1941
|
color: var(--salt-content-secondary-foreground);
|
|
1930
1942
|
}
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1943
|
+
|
|
1944
|
+
/* src/mega-menu/MegaMenuGroups.css */
|
|
1945
|
+
.saltMegaMenuGroups {
|
|
1946
|
+
align-self: start;
|
|
1947
|
+
display: grid;
|
|
1948
|
+
grid-template-columns: repeat(auto-fit, minmax(0, var(--saltMegaMenuGroups-columnWidth, 12rem)));
|
|
1949
|
+
gap: var(--salt-spacing-300);
|
|
1950
|
+
min-width: 0;
|
|
1951
|
+
max-inline-size: var(--saltMegaMenuPanel-availableWidth);
|
|
1934
1952
|
}
|
|
1935
1953
|
|
|
1936
|
-
/* src/mega-menu/
|
|
1937
|
-
.
|
|
1954
|
+
/* src/mega-menu/MegaMenuList.css */
|
|
1955
|
+
.saltMegaMenuList {
|
|
1938
1956
|
list-style: none;
|
|
1957
|
+
margin: 0;
|
|
1958
|
+
padding: 0;
|
|
1959
|
+
display: flex;
|
|
1960
|
+
gap: var(--salt-spacing-fixed-100);
|
|
1961
|
+
flex-direction: column;
|
|
1939
1962
|
}
|
|
1940
|
-
|
|
1963
|
+
|
|
1964
|
+
/* src/mega-menu/MegaMenuListItem.css */
|
|
1965
|
+
.saltMegaMenuListItem {
|
|
1966
|
+
list-style: none;
|
|
1967
|
+
display: flex;
|
|
1968
|
+
flex-direction: column;
|
|
1969
|
+
}
|
|
1970
|
+
.saltMegaMenuListItem-wrapper {
|
|
1941
1971
|
display: flex;
|
|
1942
1972
|
padding: var(--salt-spacing-50) var(--salt-spacing-100);
|
|
1943
1973
|
align-items: flex-start;
|
|
@@ -1948,15 +1978,18 @@
|
|
|
1948
1978
|
box-sizing: border-box;
|
|
1949
1979
|
gap: var(--salt-spacing-100);
|
|
1950
1980
|
position: relative;
|
|
1951
|
-
border-radius: var(--salt-palette-corner-weak);
|
|
1981
|
+
border-radius: var(--salt-palette-corner-weak, 0);
|
|
1952
1982
|
text-decoration: none;
|
|
1983
|
+
border: none;
|
|
1984
|
+
font: inherit;
|
|
1985
|
+
text-align: start;
|
|
1953
1986
|
}
|
|
1954
|
-
.
|
|
1987
|
+
.saltMegaMenuListItem-wrapper > .saltIcon {
|
|
1955
1988
|
display: flex;
|
|
1956
1989
|
height: var(--salt-size-base);
|
|
1957
1990
|
align-items: center;
|
|
1958
1991
|
}
|
|
1959
|
-
.
|
|
1992
|
+
.saltMegaMenuListItem-content {
|
|
1960
1993
|
flex: 1 0;
|
|
1961
1994
|
margin: var(--salt-spacing-75) 0;
|
|
1962
1995
|
font-family: var(--salt-text-fontFamily);
|
|
@@ -1964,18 +1997,18 @@
|
|
|
1964
1997
|
font-weight: var(--salt-text-fontWeight);
|
|
1965
1998
|
line-height: var(--salt-text-lineHeight);
|
|
1966
1999
|
}
|
|
1967
|
-
.
|
|
2000
|
+
.saltMegaMenuListItem-wrapper:focus-visible {
|
|
1968
2001
|
outline: var(--salt-focused-outline);
|
|
1969
2002
|
outline-offset: calc(var(--salt-size-fixed-100) * -2);
|
|
1970
2003
|
}
|
|
1971
|
-
.
|
|
2004
|
+
.saltMegaMenuListItem-wrapper:hover:not(:focus-visible) {
|
|
1972
2005
|
outline: none;
|
|
1973
|
-
background: var(--salt-
|
|
2006
|
+
background: var(--salt-overlayable-background-hover);
|
|
1974
2007
|
}
|
|
1975
|
-
.
|
|
2008
|
+
.saltMegaMenuListItem-wrapper:active {
|
|
1976
2009
|
background: var(--salt-navigable-accent-background-active);
|
|
1977
2010
|
}
|
|
1978
|
-
.
|
|
2011
|
+
.saltMegaMenuListItem-wrapper:active::before {
|
|
1979
2012
|
content: "";
|
|
1980
2013
|
position: absolute;
|
|
1981
2014
|
inset: 0;
|
|
@@ -1987,31 +2020,19 @@
|
|
|
1987
2020
|
|
|
1988
2021
|
/* src/mega-menu/MegaMenuPanel.css */
|
|
1989
2022
|
.saltMegaMenuPanel {
|
|
2023
|
+
--saltMegaMenuPanel-availableWidth: calc(100vw - var(--salt-spacing-600));
|
|
1990
2024
|
display: flex;
|
|
1991
|
-
|
|
2025
|
+
align-items: stretch;
|
|
1992
2026
|
inline-size: var(--saltMegaMenuPanel-inlineSize, fit-content);
|
|
1993
|
-
max-inline-size: var(--saltMegaMenuPanel-maxInlineSize, var(--saltMegaMenuPanel-availableWidth
|
|
1994
|
-
max-
|
|
2027
|
+
max-inline-size: var(--saltMegaMenuPanel-maxInlineSize, var(--saltMegaMenuPanel-availableWidth));
|
|
2028
|
+
max-block-size: 90vh;
|
|
1995
2029
|
overflow-x: hidden;
|
|
1996
2030
|
overflow-y: auto;
|
|
1997
2031
|
box-sizing: border-box;
|
|
1998
|
-
border-radius: var(--salt-palette-corner);
|
|
2032
|
+
border-radius: var(--salt-palette-corner, 0);
|
|
1999
2033
|
border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-container-primary-borderColor);
|
|
2000
2034
|
background: var(--salt-container-primary-background);
|
|
2001
|
-
box-shadow: var(--salt-overlayable-shadow-
|
|
2002
|
-
}
|
|
2003
|
-
|
|
2004
|
-
/* src/mega-menu/MegaMenuSupportingActions.css */
|
|
2005
|
-
.saltMegaMenuSupportingActions {
|
|
2006
|
-
display: flex;
|
|
2007
|
-
flex-wrap: wrap;
|
|
2008
|
-
width: fit-content;
|
|
2009
|
-
padding-bottom: var(--salt-spacing-300);
|
|
2010
|
-
}
|
|
2011
|
-
|
|
2012
|
-
/* src/mega-menu/MegaMenuSupportingContent.css */
|
|
2013
|
-
.saltMegaMenuSupportingContent {
|
|
2014
|
-
padding: var(--salt-spacing-300);
|
|
2035
|
+
box-shadow: var(--salt-overlayable-shadow-modal);
|
|
2015
2036
|
}
|
|
2016
2037
|
|
|
2017
2038
|
/* src/menu-button/MenuButton.css */
|
|
@@ -3127,206 +3148,6 @@
|
|
|
3127
3148
|
flex-basis: 0;
|
|
3128
3149
|
}
|
|
3129
3150
|
|
|
3130
|
-
/* src/toolbar-next/ToolbarContentNext.css */
|
|
3131
|
-
.saltToolbarContentNext {
|
|
3132
|
-
display: flex;
|
|
3133
|
-
align-items: center;
|
|
3134
|
-
gap: var(--salt-spacing-100);
|
|
3135
|
-
min-width: 0;
|
|
3136
|
-
flex-shrink: 0;
|
|
3137
|
-
}
|
|
3138
|
-
.saltToolbarContentNext[data-position=start] {
|
|
3139
|
-
justify-content: flex-start;
|
|
3140
|
-
}
|
|
3141
|
-
.saltToolbarContentNext[data-position=center] {
|
|
3142
|
-
justify-content: center;
|
|
3143
|
-
}
|
|
3144
|
-
.saltToolbarContentNext[data-position=end] {
|
|
3145
|
-
justify-content: flex-end;
|
|
3146
|
-
}
|
|
3147
|
-
.saltToolbarContentNext[data-implicit] > .saltTooltrayNext[data-align=center],
|
|
3148
|
-
.saltToolbarContentNext[data-implicit] > .saltTooltrayNext[data-align=end] {
|
|
3149
|
-
margin-inline-start: 0;
|
|
3150
|
-
margin-inline-end: 0;
|
|
3151
|
-
}
|
|
3152
|
-
|
|
3153
|
-
/* src/toolbar-next/ToolbarNext.css */
|
|
3154
|
-
.saltToolbarNext {
|
|
3155
|
-
box-sizing: border-box;
|
|
3156
|
-
inline-size: 100%;
|
|
3157
|
-
min-width: 0;
|
|
3158
|
-
position: relative;
|
|
3159
|
-
}
|
|
3160
|
-
.saltToolbarNext-layout {
|
|
3161
|
-
align-items: center;
|
|
3162
|
-
--saltToolbarNext-band-gap: var(--salt-spacing-100);
|
|
3163
|
-
}
|
|
3164
|
-
.saltToolbarNext-layout:not([data-centered]) {
|
|
3165
|
-
display: flex;
|
|
3166
|
-
column-gap: var(--saltToolbarNext-band-gap);
|
|
3167
|
-
}
|
|
3168
|
-
.saltToolbarNext-layout[data-centered] {
|
|
3169
|
-
display: grid;
|
|
3170
|
-
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
|
|
3171
|
-
}
|
|
3172
|
-
.saltToolbarNext-band {
|
|
3173
|
-
display: flex;
|
|
3174
|
-
align-items: center;
|
|
3175
|
-
gap: var(--saltToolbarNext-band-gap);
|
|
3176
|
-
min-width: 0;
|
|
3177
|
-
}
|
|
3178
|
-
.saltToolbarNext-layout:not([data-centered]) > .saltToolbarNext-band[data-band-position=end] {
|
|
3179
|
-
justify-content: flex-end;
|
|
3180
|
-
margin-inline-start: auto;
|
|
3181
|
-
}
|
|
3182
|
-
.saltToolbarNext-layout[data-centered] > .saltToolbarNext-band[data-band-position=start] {
|
|
3183
|
-
grid-column: 1;
|
|
3184
|
-
}
|
|
3185
|
-
.saltToolbarNext-layout[data-centered] > .saltToolbarNext-band[data-band-position=center] {
|
|
3186
|
-
grid-column: 2;
|
|
3187
|
-
justify-content: center;
|
|
3188
|
-
}
|
|
3189
|
-
.saltToolbarNext-layout[data-centered] > .saltToolbarNext-band[data-band-position=end] {
|
|
3190
|
-
grid-column: 3;
|
|
3191
|
-
justify-content: flex-end;
|
|
3192
|
-
}
|
|
3193
|
-
.saltToolbarNext-fallback {
|
|
3194
|
-
display: flex;
|
|
3195
|
-
align-items: center;
|
|
3196
|
-
gap: var(--salt-spacing-100);
|
|
3197
|
-
}
|
|
3198
|
-
.saltToolbarNext-layout > * {
|
|
3199
|
-
min-width: 0;
|
|
3200
|
-
}
|
|
3201
|
-
.saltToolbarNext-primary {
|
|
3202
|
-
--toolbarNext-background: var(--salt-container-primary-background);
|
|
3203
|
-
--toolbarNext-borderColor: var(--salt-container-primary-borderColor);
|
|
3204
|
-
}
|
|
3205
|
-
.saltToolbarNext-secondary {
|
|
3206
|
-
--toolbarNext-background: var(--salt-container-secondary-background);
|
|
3207
|
-
--toolbarNext-borderColor: var(--salt-container-secondary-borderColor);
|
|
3208
|
-
}
|
|
3209
|
-
.saltToolbarNext-tertiary {
|
|
3210
|
-
--toolbarNext-background: var(--salt-container-tertiary-background);
|
|
3211
|
-
--toolbarNext-borderColor: var(--salt-container-tertiary-borderColor);
|
|
3212
|
-
}
|
|
3213
|
-
.saltToolbarNext-bordered {
|
|
3214
|
-
background: var(--saltToolbarNext-background, var(--toolbarNext-background));
|
|
3215
|
-
border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--saltToolbarNext-borderColor, var(--toolbarNext-borderColor));
|
|
3216
|
-
border-radius: var(--salt-palette-corner, 0);
|
|
3217
|
-
padding: var(--salt-spacing-100);
|
|
3218
|
-
}
|
|
3219
|
-
.saltToolbarNext-transparent {
|
|
3220
|
-
background: transparent;
|
|
3221
|
-
border: none;
|
|
3222
|
-
padding: 0;
|
|
3223
|
-
}
|
|
3224
|
-
.saltToolbarNext-measurements {
|
|
3225
|
-
display: flex;
|
|
3226
|
-
gap: var(--salt-spacing-100);
|
|
3227
|
-
position: absolute;
|
|
3228
|
-
visibility: hidden;
|
|
3229
|
-
pointer-events: none;
|
|
3230
|
-
inset: 0 auto auto 0;
|
|
3231
|
-
block-size: 0;
|
|
3232
|
-
overflow: hidden;
|
|
3233
|
-
}
|
|
3234
|
-
.saltToolbarNext-measureTrigger {
|
|
3235
|
-
white-space: nowrap;
|
|
3236
|
-
}
|
|
3237
|
-
|
|
3238
|
-
/* src/toolbar-next/ToolbarNextOverflow.css */
|
|
3239
|
-
.saltToolbarNextOverflow-content {
|
|
3240
|
-
position: relative;
|
|
3241
|
-
}
|
|
3242
|
-
.saltToolbarNextOverflow-slot,
|
|
3243
|
-
.saltToolbarNextOverflow-panelItem {
|
|
3244
|
-
align-items: center;
|
|
3245
|
-
display: flex;
|
|
3246
|
-
flex-shrink: 0;
|
|
3247
|
-
gap: var(--salt-spacing-100);
|
|
3248
|
-
min-width: 0;
|
|
3249
|
-
}
|
|
3250
|
-
.saltToolbarNextOverflow-slot[data-align=end] {
|
|
3251
|
-
margin-inline-start: auto;
|
|
3252
|
-
}
|
|
3253
|
-
.saltToolbarNextOverflow-slot[data-align=center] {
|
|
3254
|
-
margin-inline-start: auto;
|
|
3255
|
-
margin-inline-end: auto;
|
|
3256
|
-
}
|
|
3257
|
-
.saltToolbarNextOverflow-item {
|
|
3258
|
-
align-items: center;
|
|
3259
|
-
display: flex;
|
|
3260
|
-
flex-shrink: 0;
|
|
3261
|
-
min-width: 0;
|
|
3262
|
-
}
|
|
3263
|
-
.saltToolbarNextOverflow-menu {
|
|
3264
|
-
display: flex;
|
|
3265
|
-
flex-shrink: 0;
|
|
3266
|
-
}
|
|
3267
|
-
.saltToolbarNextOverflow-itemHost,
|
|
3268
|
-
.saltToolbarNextOverflow-contentHost {
|
|
3269
|
-
display: contents;
|
|
3270
|
-
}
|
|
3271
|
-
.saltToolbarNextOverflow-trigger {
|
|
3272
|
-
white-space: nowrap;
|
|
3273
|
-
}
|
|
3274
|
-
.saltToolbarNextOverflow-panel {
|
|
3275
|
-
background: var(--salt-container-primary-background);
|
|
3276
|
-
border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);
|
|
3277
|
-
border-radius: var(--salt-palette-corner, 0);
|
|
3278
|
-
box-shadow: var(--salt-overlayable-shadow-popout);
|
|
3279
|
-
box-sizing: border-box;
|
|
3280
|
-
max-width: min(32rem, calc(100vw - var(--salt-spacing-300)));
|
|
3281
|
-
overflow: auto;
|
|
3282
|
-
position: absolute;
|
|
3283
|
-
z-index: var(--salt-zIndex-flyover);
|
|
3284
|
-
}
|
|
3285
|
-
.saltToolbarNextOverflow-floatingDescendant.saltToolbarNextOverflow-floatingDescendant {
|
|
3286
|
-
z-index: calc(var(--salt-zIndex-flyover) + var(--salt-zIndex-default));
|
|
3287
|
-
}
|
|
3288
|
-
.saltToolbarNextOverflow-panelContent {
|
|
3289
|
-
align-items: center;
|
|
3290
|
-
display: flex;
|
|
3291
|
-
flex-wrap: wrap;
|
|
3292
|
-
gap: var(--salt-spacing-100);
|
|
3293
|
-
max-width: inherit;
|
|
3294
|
-
min-width: max-content;
|
|
3295
|
-
padding: var(--salt-spacing-100);
|
|
3296
|
-
}
|
|
3297
|
-
.saltToolbarNextOverflow-panel .saltTooltrayNext[data-align=center],
|
|
3298
|
-
.saltToolbarNextOverflow-panel .saltTooltrayNext[data-align=end] {
|
|
3299
|
-
margin-inline-start: 0;
|
|
3300
|
-
margin-inline-end: 0;
|
|
3301
|
-
}
|
|
3302
|
-
.saltToolbarNextOverflow-panel .saltTooltrayNext > * {
|
|
3303
|
-
inline-size: auto;
|
|
3304
|
-
}
|
|
3305
|
-
.saltToolbarNextOverflow-content > .saltToolbarNextOverflow-slot .saltTooltrayNext[data-align=center],
|
|
3306
|
-
.saltToolbarNextOverflow-content > .saltToolbarNextOverflow-slot .saltTooltrayNext[data-align=end] {
|
|
3307
|
-
margin-inline-start: 0;
|
|
3308
|
-
margin-inline-end: 0;
|
|
3309
|
-
}
|
|
3310
|
-
|
|
3311
|
-
/* src/toolbar-next/TooltrayNext.css */
|
|
3312
|
-
.saltTooltrayNext {
|
|
3313
|
-
display: flex;
|
|
3314
|
-
align-items: center;
|
|
3315
|
-
flex: 0 0 auto;
|
|
3316
|
-
gap: var(--salt-spacing-100);
|
|
3317
|
-
min-width: 0;
|
|
3318
|
-
}
|
|
3319
|
-
.saltTooltrayNext > * {
|
|
3320
|
-
flex-shrink: 0;
|
|
3321
|
-
}
|
|
3322
|
-
.saltTooltrayNext[data-align=end] {
|
|
3323
|
-
margin-inline-start: auto;
|
|
3324
|
-
}
|
|
3325
|
-
.saltTooltrayNext[data-align=center] {
|
|
3326
|
-
margin-inline-start: auto;
|
|
3327
|
-
margin-inline-end: auto;
|
|
3328
|
-
}
|
|
3329
|
-
|
|
3330
3151
|
/* src/window/ElectronWindow.css */
|
|
3331
3152
|
.saltWindow {
|
|
3332
3153
|
--saltDialog-boxShadow: none;
|
|
@@ -3437,4 +3258,4 @@
|
|
|
3437
3258
|
margin: calc(var(--salt-size-unit) / 2) 0;
|
|
3438
3259
|
}
|
|
3439
3260
|
|
|
3440
|
-
/* src/
|
|
3261
|
+
/* src/8f16bdce-6a2c-43c5-bef1-c547bffcc9de.css */
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var core = require('@salt-ds/core');
|
|
4
4
|
var react = require('react');
|
|
5
|
+
var listDomUtils = require('./list-dom-utils.js');
|
|
5
6
|
|
|
6
7
|
const defaultSelectionKeys = ["Enter", " "];
|
|
7
8
|
const isSelectable = (item) => item && item.disabled !== true && item.selectable !== false;
|
|
@@ -157,19 +158,21 @@ const useSelection = ({
|
|
|
157
158
|
);
|
|
158
159
|
const handleClick = react.useCallback(
|
|
159
160
|
(evt) => {
|
|
160
|
-
const
|
|
161
|
+
const targetIdx = listDomUtils.closestListItemIndex(evt.target);
|
|
162
|
+
const idx = targetIdx >= 0 ? targetIdx : highlightedIdx;
|
|
163
|
+
const item = indexPositions[idx];
|
|
161
164
|
if (!disableSelection && isSelectable(item)) {
|
|
162
165
|
evt.preventDefault();
|
|
163
166
|
evt.stopPropagation();
|
|
164
167
|
selectItemAtIndex(
|
|
165
168
|
evt,
|
|
166
|
-
|
|
169
|
+
idx,
|
|
167
170
|
item,
|
|
168
171
|
evt.shiftKey,
|
|
169
172
|
evt.ctrlKey || evt.metaKey
|
|
170
173
|
);
|
|
171
174
|
if (isExtendedSelect) {
|
|
172
|
-
lastActive.current =
|
|
175
|
+
lastActive.current = idx;
|
|
173
176
|
}
|
|
174
177
|
}
|
|
175
178
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelection.js","sources":["../src/common-hooks/useSelection.ts"],"sourcesContent":["import { useControlled } from \"@salt-ds/core\";\nimport {\n type KeyboardEvent,\n type MouseEvent,\n type SyntheticEvent,\n useCallback,\n useRef,\n} from \"react\";\nimport type { CollectionItem } from \"./collectionTypes\";\nimport type {\n SelectionHookProps,\n SelectionHookResult,\n SelectionStrategy,\n SingleSelectionStrategy,\n} from \"./selectionTypes\";\n\nexport const CHECKBOX = \"checkbox\";\n\nexport const GROUP_SELECTION_NONE = \"none\";\nexport const GROUP_SELECTION_SINGLE = \"single\";\nexport const GROUP_SELECTION_CASCADE = \"cascade\";\n\nexport type GroupSelectionMode = \"none\" | \"single\" | \"cascade\";\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\nconst isSelectable = (item?: CollectionItem<unknown>) =>\n item && item.disabled !== true && item.selectable !== false;\n\nconst byItemIndex = (\n i1: CollectionItem<unknown>,\n i2: CollectionItem<unknown>,\n) => (i1.index ?? 0) - (i2.index ?? 0);\n\nexport const groupSelectionEnabled = (\n groupSelection: GroupSelectionMode,\n): boolean => groupSelection && groupSelection !== GROUP_SELECTION_NONE;\n\nexport const useSelection = <\n Item,\n Selection extends SelectionStrategy = \"default\",\n>({\n defaultSelected,\n disableSelection = false,\n // groupSelection = GROUP_SELECTION_NONE,\n highlightedIdx,\n indexPositions,\n label: _label = \"\",\n onSelect,\n onSelectionChange,\n selected: selectedProp,\n selectionStrategy,\n selectionKeys = defaultSelectionKeys,\n tabToSelect,\n}: SelectionHookProps<Item, Selection>): SelectionHookResult<\n Item,\n Selection\n> => {\n type collectionItem = CollectionItem<Item>;\n\n const isDeselectable = selectionStrategy === \"deselectable\";\n const isMultipleSelect = selectionStrategy === \"multiple\";\n const isExtendedSelect = selectionStrategy === \"extended\";\n\n const lastActive = useRef(-1);\n\n const isSelectionEvent = useCallback(\n (evt: KeyboardEvent) => selectionKeys.includes(evt.key),\n [selectionKeys],\n );\n\n const emptyValue = useCallback(<\n Item,\n >(): Selection extends SingleSelectionStrategy\n ? null\n : CollectionItem<Item>[] => {\n type returnType = Selection extends SingleSelectionStrategy\n ? null\n : CollectionItem<Item>[];\n return isMultipleSelect || isExtendedSelect\n ? ([] as unknown as returnType)\n : (null as returnType);\n }, [isMultipleSelect, isExtendedSelect]);\n\n const [selected, setSelected] = useControlled<\n Selection extends SingleSelectionStrategy\n ? CollectionItem<Item> | null\n : CollectionItem<Item>[]\n >({\n controlled: selectedProp,\n default: defaultSelected ?? emptyValue(),\n name: \"UseSelection\",\n state: \"selected\",\n });\n\n const isItemSelected = useCallback(\n (item: collectionItem) => {\n return Array.isArray(selected)\n ? selected.includes(item)\n : selected === item;\n },\n [selected],\n );\n\n const selectDefault = useCallback((item: collectionItem) => item, []);\n const selectDeselectable = useCallback(\n (item: collectionItem) => (isItemSelected(item) ? null : item),\n [isItemSelected],\n );\n const selectMultiple = useCallback(\n (item: collectionItem) => {\n const nextItems = isItemSelected(item)\n ? (selected as collectionItem[]).filter((i) => i !== item)\n : (selected as collectionItem[]).concat(item);\n nextItems.sort(byItemIndex);\n return nextItems;\n },\n [isItemSelected, selected],\n );\n const selectRange = useCallback(\n (idx: number, preserveExistingSelection?: boolean) => {\n const currentSelection = preserveExistingSelection\n ? (selected as collectionItem[])\n : ([] as collectionItem[]);\n\n const [lastSelectedItem] = (selected as collectionItem[]).slice(-1);\n const lastSelectedItemIndex = lastSelectedItem\n ? indexPositions.indexOf(lastSelectedItem)\n : 0;\n\n const startRegion = Math.min(idx, lastSelectedItemIndex);\n const endRegion = Math.max(idx, lastSelectedItemIndex);\n const rangeSelection = indexPositions.slice(startRegion, endRegion + 1);\n // concat the current selection with a new selection and remove duplicates for overlaps\n const nextItems = [...new Set([...currentSelection, ...rangeSelection])];\n nextItems.sort(byItemIndex);\n return nextItems;\n },\n [indexPositions, selected],\n );\n\n const selectItemAtIndex = useCallback(\n (\n evt: SyntheticEvent,\n idx: number,\n item: collectionItem,\n rangeSelect: boolean,\n preserveExistingSelection?: boolean,\n ) => {\n type returnType = Selection extends SingleSelectionStrategy\n ? CollectionItem<Item> | null\n : CollectionItem<Item>[];\n let newSelected: returnType;\n if (isMultipleSelect) {\n newSelected = selectMultiple(item) as returnType;\n } else if (isExtendedSelect) {\n if (preserveExistingSelection && !rangeSelect) {\n newSelected = selectMultiple(item) as returnType;\n } else if (rangeSelect) {\n newSelected = selectRange(\n idx,\n preserveExistingSelection,\n ) as returnType;\n } else {\n newSelected = [item] as returnType;\n }\n } else if (isDeselectable) {\n newSelected = selectDeselectable(item) as returnType;\n } else {\n newSelected = selectDefault(item) as returnType;\n }\n\n if (newSelected !== selected) {\n setSelected(newSelected);\n }\n\n // We fire onSelect irrespective of whether selection changes\n onSelect?.(evt, item);\n\n if (newSelected !== selected) {\n if (onSelectionChange) {\n onSelectionChange(evt, newSelected);\n }\n }\n },\n [\n isMultipleSelect,\n isExtendedSelect,\n isDeselectable,\n selected,\n onSelect,\n selectMultiple,\n selectRange,\n selectDeselectable,\n selectDefault,\n onSelectionChange,\n ],\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n const item = indexPositions[highlightedIdx];\n if (isSelectable(item)) {\n if (isSelectionEvent(evt) || (tabToSelect && evt.key === \"Tab\")) {\n // We do not inhibit Tab behaviour, if we are selecting on Tab then we apply\n // selection as a side effect of the Tab, not as a replacement for Tabbing.\n if (evt.key !== \"Tab\") {\n evt.preventDefault();\n }\n selectItemAtIndex(\n evt,\n highlightedIdx,\n item,\n false,\n evt.ctrlKey || evt.metaKey,\n );\n if (isExtendedSelect) {\n lastActive.current = highlightedIdx;\n }\n }\n }\n },\n [\n indexPositions,\n highlightedIdx,\n isSelectionEvent,\n tabToSelect,\n selectItemAtIndex,\n isExtendedSelect,\n ],\n );\n\n const handleKeyboardNavigation = useCallback(\n (evt: KeyboardEvent, currentIndex: number) => {\n if (isExtendedSelect && evt.shiftKey) {\n const item = indexPositions[currentIndex];\n if (isSelectable(item)) {\n selectItemAtIndex(evt, currentIndex, item, true);\n }\n }\n },\n [isExtendedSelect, indexPositions, selectItemAtIndex],\n );\n\n const handleClick = useCallback(\n (evt: MouseEvent) => {\n const item = indexPositions[highlightedIdx];\n if (!disableSelection && isSelectable(item)) {\n // if (!isCollapsibleItem(item)) {\n evt.preventDefault();\n evt.stopPropagation();\n selectItemAtIndex(\n evt,\n highlightedIdx,\n item,\n evt.shiftKey,\n evt.ctrlKey || evt.metaKey,\n );\n if (isExtendedSelect) {\n lastActive.current = highlightedIdx;\n }\n // }\n }\n },\n [\n disableSelection,\n isExtendedSelect,\n highlightedIdx,\n indexPositions,\n selectItemAtIndex,\n ],\n );\n\n const listHandlers = {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onKeyboardNavigation: handleKeyboardNavigation,\n };\n\n return {\n listHandlers,\n selected,\n setSelected,\n };\n};\n"],"names":["useRef","useCallback","useControlled"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSelection.js","sources":["../src/common-hooks/useSelection.ts"],"sourcesContent":["import { useControlled } from \"@salt-ds/core\";\nimport {\n type KeyboardEvent,\n type MouseEvent,\n type SyntheticEvent,\n useCallback,\n useRef,\n} from \"react\";\nimport type { CollectionItem } from \"./collectionTypes\";\nimport { closestListItemIndex } from \"./list-dom-utils\";\nimport type {\n SelectionHookProps,\n SelectionHookResult,\n SelectionStrategy,\n SingleSelectionStrategy,\n} from \"./selectionTypes\";\n\nexport const CHECKBOX = \"checkbox\";\n\nexport const GROUP_SELECTION_NONE = \"none\";\nexport const GROUP_SELECTION_SINGLE = \"single\";\nexport const GROUP_SELECTION_CASCADE = \"cascade\";\n\nexport type GroupSelectionMode = \"none\" | \"single\" | \"cascade\";\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\nconst isSelectable = (item?: CollectionItem<unknown>) =>\n item && item.disabled !== true && item.selectable !== false;\n\nconst byItemIndex = (\n i1: CollectionItem<unknown>,\n i2: CollectionItem<unknown>,\n) => (i1.index ?? 0) - (i2.index ?? 0);\n\nexport const groupSelectionEnabled = (\n groupSelection: GroupSelectionMode,\n): boolean => groupSelection && groupSelection !== GROUP_SELECTION_NONE;\n\nexport const useSelection = <\n Item,\n Selection extends SelectionStrategy = \"default\",\n>({\n defaultSelected,\n disableSelection = false,\n // groupSelection = GROUP_SELECTION_NONE,\n highlightedIdx,\n indexPositions,\n label: _label = \"\",\n onSelect,\n onSelectionChange,\n selected: selectedProp,\n selectionStrategy,\n selectionKeys = defaultSelectionKeys,\n tabToSelect,\n}: SelectionHookProps<Item, Selection>): SelectionHookResult<\n Item,\n Selection\n> => {\n type collectionItem = CollectionItem<Item>;\n\n const isDeselectable = selectionStrategy === \"deselectable\";\n const isMultipleSelect = selectionStrategy === \"multiple\";\n const isExtendedSelect = selectionStrategy === \"extended\";\n\n const lastActive = useRef(-1);\n\n const isSelectionEvent = useCallback(\n (evt: KeyboardEvent) => selectionKeys.includes(evt.key),\n [selectionKeys],\n );\n\n const emptyValue = useCallback(<\n Item,\n >(): Selection extends SingleSelectionStrategy\n ? null\n : CollectionItem<Item>[] => {\n type returnType = Selection extends SingleSelectionStrategy\n ? null\n : CollectionItem<Item>[];\n return isMultipleSelect || isExtendedSelect\n ? ([] as unknown as returnType)\n : (null as returnType);\n }, [isMultipleSelect, isExtendedSelect]);\n\n const [selected, setSelected] = useControlled<\n Selection extends SingleSelectionStrategy\n ? CollectionItem<Item> | null\n : CollectionItem<Item>[]\n >({\n controlled: selectedProp,\n default: defaultSelected ?? emptyValue(),\n name: \"UseSelection\",\n state: \"selected\",\n });\n\n const isItemSelected = useCallback(\n (item: collectionItem) => {\n return Array.isArray(selected)\n ? selected.includes(item)\n : selected === item;\n },\n [selected],\n );\n\n const selectDefault = useCallback((item: collectionItem) => item, []);\n const selectDeselectable = useCallback(\n (item: collectionItem) => (isItemSelected(item) ? null : item),\n [isItemSelected],\n );\n const selectMultiple = useCallback(\n (item: collectionItem) => {\n const nextItems = isItemSelected(item)\n ? (selected as collectionItem[]).filter((i) => i !== item)\n : (selected as collectionItem[]).concat(item);\n nextItems.sort(byItemIndex);\n return nextItems;\n },\n [isItemSelected, selected],\n );\n const selectRange = useCallback(\n (idx: number, preserveExistingSelection?: boolean) => {\n const currentSelection = preserveExistingSelection\n ? (selected as collectionItem[])\n : ([] as collectionItem[]);\n\n const [lastSelectedItem] = (selected as collectionItem[]).slice(-1);\n const lastSelectedItemIndex = lastSelectedItem\n ? indexPositions.indexOf(lastSelectedItem)\n : 0;\n\n const startRegion = Math.min(idx, lastSelectedItemIndex);\n const endRegion = Math.max(idx, lastSelectedItemIndex);\n const rangeSelection = indexPositions.slice(startRegion, endRegion + 1);\n // concat the current selection with a new selection and remove duplicates for overlaps\n const nextItems = [...new Set([...currentSelection, ...rangeSelection])];\n nextItems.sort(byItemIndex);\n return nextItems;\n },\n [indexPositions, selected],\n );\n\n const selectItemAtIndex = useCallback(\n (\n evt: SyntheticEvent,\n idx: number,\n item: collectionItem,\n rangeSelect: boolean,\n preserveExistingSelection?: boolean,\n ) => {\n type returnType = Selection extends SingleSelectionStrategy\n ? CollectionItem<Item> | null\n : CollectionItem<Item>[];\n let newSelected: returnType;\n if (isMultipleSelect) {\n newSelected = selectMultiple(item) as returnType;\n } else if (isExtendedSelect) {\n if (preserveExistingSelection && !rangeSelect) {\n newSelected = selectMultiple(item) as returnType;\n } else if (rangeSelect) {\n newSelected = selectRange(\n idx,\n preserveExistingSelection,\n ) as returnType;\n } else {\n newSelected = [item] as returnType;\n }\n } else if (isDeselectable) {\n newSelected = selectDeselectable(item) as returnType;\n } else {\n newSelected = selectDefault(item) as returnType;\n }\n\n if (newSelected !== selected) {\n setSelected(newSelected);\n }\n\n // We fire onSelect irrespective of whether selection changes\n onSelect?.(evt, item);\n\n if (newSelected !== selected) {\n if (onSelectionChange) {\n onSelectionChange(evt, newSelected);\n }\n }\n },\n [\n isMultipleSelect,\n isExtendedSelect,\n isDeselectable,\n selected,\n onSelect,\n selectMultiple,\n selectRange,\n selectDeselectable,\n selectDefault,\n onSelectionChange,\n ],\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n const item = indexPositions[highlightedIdx];\n if (isSelectable(item)) {\n if (isSelectionEvent(evt) || (tabToSelect && evt.key === \"Tab\")) {\n // We do not inhibit Tab behaviour, if we are selecting on Tab then we apply\n // selection as a side effect of the Tab, not as a replacement for Tabbing.\n if (evt.key !== \"Tab\") {\n evt.preventDefault();\n }\n selectItemAtIndex(\n evt,\n highlightedIdx,\n item,\n false,\n evt.ctrlKey || evt.metaKey,\n );\n if (isExtendedSelect) {\n lastActive.current = highlightedIdx;\n }\n }\n }\n },\n [\n indexPositions,\n highlightedIdx,\n isSelectionEvent,\n tabToSelect,\n selectItemAtIndex,\n isExtendedSelect,\n ],\n );\n\n const handleKeyboardNavigation = useCallback(\n (evt: KeyboardEvent, currentIndex: number) => {\n if (isExtendedSelect && evt.shiftKey) {\n const item = indexPositions[currentIndex];\n if (isSelectable(item)) {\n selectItemAtIndex(evt, currentIndex, item, true);\n }\n }\n },\n [isExtendedSelect, indexPositions, selectItemAtIndex],\n );\n\n const handleClick = useCallback(\n (evt: MouseEvent) => {\n // Resolve the clicked item from the event target rather than relying on\n // `highlightedIdx`. The highlighted index is updated asynchronously from\n // a `mousemove` handler on the list; in fast/synthetic interactions\n // (notably Cypress `realClick`) the click can fire before React has\n // re-rendered with the updated highlight, which previously caused the\n // click to be silently ignored (root cause of flaky selection tests).\n const targetIdx = closestListItemIndex(evt.target as HTMLElement);\n const idx = targetIdx >= 0 ? targetIdx : highlightedIdx;\n const item = indexPositions[idx];\n if (!disableSelection && isSelectable(item)) {\n // if (!isCollapsibleItem(item)) {\n evt.preventDefault();\n evt.stopPropagation();\n selectItemAtIndex(\n evt,\n idx,\n item,\n evt.shiftKey,\n evt.ctrlKey || evt.metaKey,\n );\n if (isExtendedSelect) {\n lastActive.current = idx;\n }\n // }\n }\n },\n [\n disableSelection,\n isExtendedSelect,\n highlightedIdx,\n indexPositions,\n selectItemAtIndex,\n ],\n );\n\n const listHandlers = {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onKeyboardNavigation: handleKeyboardNavigation,\n };\n\n return {\n listHandlers,\n selected,\n setSelected,\n };\n};\n"],"names":["useRef","useCallback","useControlled","closestListItemIndex"],"mappings":"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"}
|
package/dist-cjs/index.js
CHANGED
|
@@ -79,13 +79,15 @@ var Logo = require('./logo/Logo.js');
|
|
|
79
79
|
var LogoImage = require('./logo/LogoImage.js');
|
|
80
80
|
var LogoSeparator = require('./logo/LogoSeparator.js');
|
|
81
81
|
var MegaMenu = require('./mega-menu/MegaMenu.js');
|
|
82
|
+
var MegaMenuActions = require('./mega-menu/MegaMenuActions.js');
|
|
83
|
+
var MegaMenuAside = require('./mega-menu/MegaMenuAside.js');
|
|
84
|
+
var MegaMenuContent = require('./mega-menu/MegaMenuContent.js');
|
|
82
85
|
var MegaMenuGroup = require('./mega-menu/MegaMenuGroup.js');
|
|
86
|
+
var MegaMenuGroupHeading = require('./mega-menu/MegaMenuGroupHeading.js');
|
|
83
87
|
var MegaMenuGroups = require('./mega-menu/MegaMenuGroups.js');
|
|
84
|
-
var
|
|
85
|
-
var
|
|
88
|
+
var MegaMenuList = require('./mega-menu/MegaMenuList.js');
|
|
89
|
+
var MegaMenuListItem = require('./mega-menu/MegaMenuListItem.js');
|
|
86
90
|
var MegaMenuPanel = require('./mega-menu/MegaMenuPanel.js');
|
|
87
|
-
var MegaMenuSupportingActions = require('./mega-menu/MegaMenuSupportingActions.js');
|
|
88
|
-
var MegaMenuSupportingContent = require('./mega-menu/MegaMenuSupportingContent.js');
|
|
89
91
|
var MegaMenuTrigger = require('./mega-menu/MegaMenuTrigger.js');
|
|
90
92
|
var MenuButton = require('./menu-button/MenuButton.js');
|
|
91
93
|
var Metric = require('./metric/Metric.js');
|
|
@@ -126,9 +128,6 @@ var Toolbar = require('./toolbar/Toolbar.js');
|
|
|
126
128
|
var ToolbarButton = require('./toolbar/ToolbarButton.js');
|
|
127
129
|
var Tooltray = require('./toolbar/Tooltray.js');
|
|
128
130
|
var ToolbarField = require('./toolbar/toolbar-field/ToolbarField.js');
|
|
129
|
-
var ToolbarContentNext = require('./toolbar-next/ToolbarContentNext.js');
|
|
130
|
-
var ToolbarNext = require('./toolbar-next/ToolbarNext.js');
|
|
131
|
-
var TooltrayNext = require('./toolbar-next/TooltrayNext.js');
|
|
132
131
|
var ElectronWindow = require('./window/ElectronWindow.js');
|
|
133
132
|
var WindowContext = require('./window/WindowContext.js');
|
|
134
133
|
|
|
@@ -216,13 +215,15 @@ exports.Logo = Logo.Logo;
|
|
|
216
215
|
exports.LogoImage = LogoImage.LogoImage;
|
|
217
216
|
exports.LogoSeparator = LogoSeparator.LogoSeparator;
|
|
218
217
|
exports.MegaMenu = MegaMenu.MegaMenu;
|
|
218
|
+
exports.MegaMenuActions = MegaMenuActions.MegaMenuActions;
|
|
219
|
+
exports.MegaMenuAside = MegaMenuAside.MegaMenuAside;
|
|
220
|
+
exports.MegaMenuContent = MegaMenuContent.MegaMenuContent;
|
|
219
221
|
exports.MegaMenuGroup = MegaMenuGroup.MegaMenuGroup;
|
|
222
|
+
exports.MegaMenuGroupHeading = MegaMenuGroupHeading.MegaMenuGroupHeading;
|
|
220
223
|
exports.MegaMenuGroups = MegaMenuGroups.MegaMenuGroups;
|
|
221
|
-
exports.
|
|
222
|
-
exports.
|
|
224
|
+
exports.MegaMenuList = MegaMenuList.MegaMenuList;
|
|
225
|
+
exports.MegaMenuListItem = MegaMenuListItem.MegaMenuListItem;
|
|
223
226
|
exports.MegaMenuPanel = MegaMenuPanel.MegaMenuPanel;
|
|
224
|
-
exports.MegaMenuSupportingActions = MegaMenuSupportingActions.MegaMenuSupportingActions;
|
|
225
|
-
exports.MegaMenuSupportingContent = MegaMenuSupportingContent.MegaMenuSupportingContent;
|
|
226
227
|
exports.MegaMenuTrigger = MegaMenuTrigger.MegaMenuTrigger;
|
|
227
228
|
exports.MenuButton = MenuButton.MenuButton;
|
|
228
229
|
exports.Metric = Metric.Metric;
|
|
@@ -288,9 +289,6 @@ exports.Toolbar = Toolbar.Toolbar;
|
|
|
288
289
|
exports.ToolbarButton = ToolbarButton.ToolbarButton;
|
|
289
290
|
exports.Tooltray = Tooltray.Tooltray;
|
|
290
291
|
exports.ToolbarField = ToolbarField.ToolbarField;
|
|
291
|
-
exports.ToolbarContentNext = ToolbarContentNext.ToolbarContentNext;
|
|
292
|
-
exports.ToolbarNext = ToolbarNext.ToolbarNext;
|
|
293
|
-
exports.TooltrayNext = TooltrayNext.TooltrayNext;
|
|
294
292
|
exports.ElectronWindow = ElectronWindow.ElectronWindow;
|
|
295
293
|
exports.Window = WindowContext.Window;
|
|
296
294
|
exports.WindowContext = WindowContext.WindowContext;
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist-cjs/list/useList.js
CHANGED
|
@@ -180,7 +180,13 @@ const useList = ({
|
|
|
180
180
|
onMouseLeave: navigationControlProps.onMouseLeave
|
|
181
181
|
};
|
|
182
182
|
const listHandlers = listHandlersProp || {
|
|
183
|
-
|
|
183
|
+
// Don't expose a click handler when the list is disabled. Previously,
|
|
184
|
+
// selection on disabled lists was prevented only as a side-effect of
|
|
185
|
+
// `handleMouseMove` gating on `disabled` (which kept `highlightedIdx` at
|
|
186
|
+
// -1, so `useSelection.handleClick` no-op'd). Now that `handleClick`
|
|
187
|
+
// resolves the clicked item directly from the event target, we must
|
|
188
|
+
// explicitly suppress the handler here.
|
|
189
|
+
onClick: disabled ? void 0 : selectionHook.listHandlers.onClick,
|
|
184
190
|
// MouseEnter would be much better for this. There is a bug in Cypress
|
|
185
191
|
// wheby it emits spurious MouseEnter (and MouseOver) events around
|
|
186
192
|
// keypress events, which break many tests.
|