@salt-ds/lab 1.0.0-alpha.15 → 1.0.0-alpha.17

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 (188) hide show
  1. package/dist-cjs/badge/Badge.css.js +1 -1
  2. package/dist-cjs/cascading-menu/CascadingMenu.js.map +1 -1
  3. package/dist-cjs/color-chooser/ColorChooser.js +1 -1
  4. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  5. package/dist-cjs/color-chooser/GetColorPalettes.js +2 -2
  6. package/dist-cjs/color-chooser/GetColorPalettes.js.map +1 -1
  7. package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  8. package/dist-cjs/combo-box-next/ComboBoxNext.css.js +6 -0
  9. package/dist-cjs/combo-box-next/ComboBoxNext.css.js.map +1 -0
  10. package/dist-cjs/combo-box-next/ComboBoxNext.js +184 -0
  11. package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -0
  12. package/dist-cjs/combo-box-next/useComboBox.js +145 -0
  13. package/dist-cjs/combo-box-next/useComboBox.js.map +1 -0
  14. package/dist-cjs/combo-box-next/useComboboxPortal.js +69 -0
  15. package/dist-cjs/combo-box-next/useComboboxPortal.js.map +1 -0
  16. package/dist-cjs/combo-box-next/utils.js +40 -0
  17. package/dist-cjs/combo-box-next/utils.js.map +1 -0
  18. package/dist-cjs/dialog/Dialog.css.js +1 -1
  19. package/dist-cjs/dialog/Dialog.js +58 -59
  20. package/dist-cjs/dialog/Dialog.js.map +1 -1
  21. package/dist-cjs/dialog/DialogActions.css.js +1 -1
  22. package/dist-cjs/dialog/DialogActions.js +15 -17
  23. package/dist-cjs/dialog/DialogActions.js.map +1 -1
  24. package/dist-cjs/dialog/DialogCloseButton.css.js +6 -0
  25. package/dist-cjs/dialog/DialogCloseButton.css.js.map +1 -0
  26. package/dist-cjs/dialog/DialogCloseButton.js +39 -0
  27. package/dist-cjs/dialog/DialogCloseButton.js.map +1 -0
  28. package/dist-cjs/dialog/DialogContent.css.js +1 -1
  29. package/dist-cjs/dialog/DialogContent.js +20 -29
  30. package/dist-cjs/dialog/DialogContent.js.map +1 -1
  31. package/dist-cjs/dialog/{internal/DialogContext.js → DialogContext.js} +4 -0
  32. package/dist-cjs/dialog/DialogContext.js.map +1 -0
  33. package/dist-cjs/dialog/DialogTitle.css.js +1 -1
  34. package/dist-cjs/dialog/DialogTitle.js +40 -41
  35. package/dist-cjs/dialog/DialogTitle.js.map +1 -1
  36. package/dist-cjs/dialog/useDialog.js +31 -0
  37. package/dist-cjs/dialog/useDialog.js.map +1 -0
  38. package/dist-cjs/drawer/Drawer.js +25 -23
  39. package/dist-cjs/drawer/Drawer.js.map +1 -1
  40. package/dist-cjs/dropdown-next/DropdownNext.css.js +6 -0
  41. package/dist-cjs/dropdown-next/DropdownNext.css.js.map +1 -0
  42. package/dist-cjs/dropdown-next/DropdownNext.js +183 -0
  43. package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -0
  44. package/dist-cjs/dropdown-next/useDropdownNext.js +169 -0
  45. package/dist-cjs/dropdown-next/useDropdownNext.js.map +1 -0
  46. package/dist-cjs/index.js +15 -6
  47. package/dist-cjs/index.js.map +1 -1
  48. package/dist-cjs/list/Highlighter.js +1 -1
  49. package/dist-cjs/list/Highlighter.js.map +1 -1
  50. package/dist-cjs/list/keyset.js.map +1 -1
  51. package/dist-cjs/list-next/ListItemNext.css.js +1 -1
  52. package/dist-cjs/list-next/ListNext.js +1 -0
  53. package/dist-cjs/list-next/ListNext.js.map +1 -1
  54. package/dist-cjs/list-next/useList.js +11 -7
  55. package/dist-cjs/list-next/useList.js.map +1 -1
  56. package/dist-cjs/logo/Logo.css.js +1 -1
  57. package/dist-cjs/logo/LogoImage.css.js +6 -0
  58. package/dist-cjs/logo/LogoImage.css.js.map +1 -0
  59. package/dist-cjs/logo/LogoImage.js +9 -0
  60. package/dist-cjs/logo/LogoImage.js.map +1 -1
  61. package/dist-cjs/logo/LogoSeparator.css.js +1 -1
  62. package/dist-cjs/navigation-item/ConditionalWrapper.js +37 -0
  63. package/dist-cjs/navigation-item/ConditionalWrapper.js.map +1 -0
  64. package/dist-cjs/{nav-item/ExpansionButton.js → navigation-item/ExpansionIcon.js} +7 -12
  65. package/dist-cjs/navigation-item/ExpansionIcon.js.map +1 -0
  66. package/dist-cjs/navigation-item/NavigationItem.css.js +6 -0
  67. package/dist-cjs/navigation-item/NavigationItem.css.js.map +1 -0
  68. package/dist-cjs/navigation-item/NavigationItem.js +80 -0
  69. package/dist-cjs/navigation-item/NavigationItem.js.map +1 -0
  70. package/dist-cjs/pill-next/PillNext.css.js +1 -1
  71. package/dist-cjs/responsive/useDynamicCollapse.js.map +1 -1
  72. package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
  73. package/dist-cjs/tabs/useActivationIndicator.js.map +1 -1
  74. package/dist-cjs/tabs-next/TabNext.css.js +1 -1
  75. package/dist-es/badge/Badge.css.js +1 -1
  76. package/dist-es/cascading-menu/CascadingMenu.js.map +1 -1
  77. package/dist-es/color-chooser/ColorChooser.js +1 -1
  78. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  79. package/dist-es/color-chooser/GetColorPalettes.js +2 -2
  80. package/dist-es/color-chooser/GetColorPalettes.js.map +1 -1
  81. package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  82. package/dist-es/combo-box-next/ComboBoxNext.css.js +4 -0
  83. package/dist-es/combo-box-next/ComboBoxNext.css.js.map +1 -0
  84. package/dist-es/combo-box-next/ComboBoxNext.js +180 -0
  85. package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -0
  86. package/dist-es/combo-box-next/useComboBox.js +141 -0
  87. package/dist-es/combo-box-next/useComboBox.js.map +1 -0
  88. package/dist-es/combo-box-next/useComboboxPortal.js +65 -0
  89. package/dist-es/combo-box-next/useComboboxPortal.js.map +1 -0
  90. package/dist-es/combo-box-next/utils.js +35 -0
  91. package/dist-es/combo-box-next/utils.js.map +1 -0
  92. package/dist-es/dialog/Dialog.css.js +1 -1
  93. package/dist-es/dialog/Dialog.js +58 -59
  94. package/dist-es/dialog/Dialog.js.map +1 -1
  95. package/dist-es/dialog/DialogActions.css.js +1 -1
  96. package/dist-es/dialog/DialogActions.js +15 -17
  97. package/dist-es/dialog/DialogActions.js.map +1 -1
  98. package/dist-es/dialog/DialogCloseButton.css.js +4 -0
  99. package/dist-es/dialog/DialogCloseButton.css.js.map +1 -0
  100. package/dist-es/dialog/DialogCloseButton.js +31 -0
  101. package/dist-es/dialog/DialogCloseButton.js.map +1 -0
  102. package/dist-es/dialog/DialogContent.css.js +1 -1
  103. package/dist-es/dialog/DialogContent.js +20 -29
  104. package/dist-es/dialog/DialogContent.js.map +1 -1
  105. package/dist-es/dialog/DialogContext.js +9 -0
  106. package/dist-es/dialog/DialogContext.js.map +1 -0
  107. package/dist-es/dialog/DialogTitle.css.js +1 -1
  108. package/dist-es/dialog/DialogTitle.js +37 -42
  109. package/dist-es/dialog/DialogTitle.js.map +1 -1
  110. package/dist-es/dialog/useDialog.js +27 -0
  111. package/dist-es/dialog/useDialog.js.map +1 -0
  112. package/dist-es/drawer/Drawer.js +26 -24
  113. package/dist-es/drawer/Drawer.js.map +1 -1
  114. package/dist-es/dropdown-next/DropdownNext.css.js +4 -0
  115. package/dist-es/dropdown-next/DropdownNext.css.js.map +1 -0
  116. package/dist-es/dropdown-next/DropdownNext.js +179 -0
  117. package/dist-es/dropdown-next/DropdownNext.js.map +1 -0
  118. package/dist-es/dropdown-next/useDropdownNext.js +165 -0
  119. package/dist-es/dropdown-next/useDropdownNext.js.map +1 -0
  120. package/dist-es/index.js +7 -3
  121. package/dist-es/index.js.map +1 -1
  122. package/dist-es/list/Highlighter.js +1 -1
  123. package/dist-es/list/Highlighter.js.map +1 -1
  124. package/dist-es/list/keyset.js.map +1 -1
  125. package/dist-es/list-next/ListItemNext.css.js +1 -1
  126. package/dist-es/list-next/ListNext.js +1 -0
  127. package/dist-es/list-next/ListNext.js.map +1 -1
  128. package/dist-es/list-next/useList.js +11 -7
  129. package/dist-es/list-next/useList.js.map +1 -1
  130. package/dist-es/logo/Logo.css.js +1 -1
  131. package/dist-es/logo/LogoImage.css.js +4 -0
  132. package/dist-es/logo/LogoImage.css.js.map +1 -0
  133. package/dist-es/logo/LogoImage.js +9 -0
  134. package/dist-es/logo/LogoImage.js.map +1 -1
  135. package/dist-es/logo/LogoSeparator.css.js +1 -1
  136. package/dist-es/navigation-item/ConditionalWrapper.js +33 -0
  137. package/dist-es/navigation-item/ConditionalWrapper.js.map +1 -0
  138. package/dist-es/{nav-item/ExpansionButton.js → navigation-item/ExpansionIcon.js} +7 -12
  139. package/dist-es/navigation-item/ExpansionIcon.js.map +1 -0
  140. package/dist-es/navigation-item/NavigationItem.css.js +4 -0
  141. package/dist-es/navigation-item/NavigationItem.css.js.map +1 -0
  142. package/dist-es/navigation-item/NavigationItem.js +76 -0
  143. package/dist-es/navigation-item/NavigationItem.js.map +1 -0
  144. package/dist-es/pill-next/PillNext.css.js +1 -1
  145. package/dist-es/responsive/useDynamicCollapse.js.map +1 -1
  146. package/dist-es/responsive/useOverflowLayout.js.map +1 -1
  147. package/dist-es/tabs/useActivationIndicator.js.map +1 -1
  148. package/dist-es/tabs-next/TabNext.css.js +1 -1
  149. package/dist-types/combo-box-next/ComboBoxNext.d.ts +83 -0
  150. package/dist-types/combo-box-next/index.d.ts +1 -0
  151. package/dist-types/combo-box-next/useComboBox.d.ts +36 -0
  152. package/dist-types/combo-box-next/useComboboxPortal.d.ts +15 -0
  153. package/dist-types/combo-box-next/utils.d.ts +8 -0
  154. package/dist-types/dialog/Dialog.d.ts +17 -12
  155. package/dist-types/dialog/DialogActions.d.ts +1 -3
  156. package/dist-types/dialog/DialogCloseButton.d.ts +3 -0
  157. package/dist-types/dialog/DialogContent.d.ts +1 -3
  158. package/dist-types/dialog/{internal/DialogContext.d.ts → DialogContext.d.ts} +5 -2
  159. package/dist-types/dialog/DialogTitle.d.ts +7 -8
  160. package/dist-types/dialog/index.d.ts +4 -2
  161. package/dist-types/dialog/useDialog.d.ts +27 -0
  162. package/dist-types/dropdown-next/DropdownNext.d.ts +49 -0
  163. package/dist-types/dropdown-next/index.d.ts +1 -0
  164. package/dist-types/dropdown-next/useDropdownNext.d.ts +31 -0
  165. package/dist-types/index.d.ts +3 -1
  166. package/dist-types/list-next/ListNext.d.ts +4 -1
  167. package/dist-types/list-next/useList.d.ts +6 -4
  168. package/dist-types/navigation-item/ConditionalWrapper.d.ts +8 -0
  169. package/dist-types/navigation-item/ExpansionIcon.d.ts +3 -0
  170. package/dist-types/navigation-item/NavigationItem.d.ts +36 -0
  171. package/dist-types/navigation-item/index.d.ts +1 -0
  172. package/package.json +29 -27
  173. package/dist-cjs/dialog/internal/DialogContext.js.map +0 -1
  174. package/dist-cjs/nav-item/ExpansionButton.js.map +0 -1
  175. package/dist-cjs/nav-item/NavItem.css.js +0 -6
  176. package/dist-cjs/nav-item/NavItem.css.js.map +0 -1
  177. package/dist-cjs/nav-item/NavItem.js +0 -88
  178. package/dist-cjs/nav-item/NavItem.js.map +0 -1
  179. package/dist-es/dialog/internal/DialogContext.js +0 -6
  180. package/dist-es/dialog/internal/DialogContext.js.map +0 -1
  181. package/dist-es/nav-item/ExpansionButton.js.map +0 -1
  182. package/dist-es/nav-item/NavItem.css.js +0 -4
  183. package/dist-es/nav-item/NavItem.css.js.map +0 -1
  184. package/dist-es/nav-item/NavItem.js +0 -84
  185. package/dist-es/nav-item/NavItem.js.map +0 -1
  186. package/dist-types/nav-item/ExpansionButton.d.ts +0 -3
  187. package/dist-types/nav-item/NavItem.d.ts +0 -45
  188. package/dist-types/nav-item/index.d.ts +0 -1
@@ -0,0 +1,83 @@
1
+ import { ComponentPropsWithoutRef, ReactElement, Ref, SyntheticEvent } from "react";
2
+ import { ListNextProps } from "../list-next";
3
+ import { ComboBoxItemProps } from "./utils";
4
+ import { UseComboBoxPortalProps } from "./useComboboxPortal";
5
+ export interface ComboBoxNextProps<T> extends Omit<ComponentPropsWithoutRef<"input">, "onChange" | "onSelect"> {
6
+ /**
7
+ * Additional props for the list component.
8
+ */
9
+ ListProps?: ListNextProps;
10
+ /**
11
+ * Additional props for the portal.
12
+ */
13
+ PortalProps?: UseComboBoxPortalProps;
14
+ /**
15
+ * Controlled prop. Controls the Input value in the Combo Box Input.
16
+ */
17
+ inputValue?: string;
18
+ /**
19
+ * Controlled prop. Controls the Highlighted item in the Combo Box list.
20
+ */
21
+ highlightedItem?: string;
22
+ /**
23
+ * Controlled prop. Controls the Selected value in the Combo Box list.
24
+ */
25
+ selected?: string;
26
+ /**
27
+ * Initial input value for when the list is uncontrolled.
28
+ */
29
+ defaultInputValue?: string;
30
+ /**
31
+ * Initial selected value for when the list is uncontrolled.
32
+ */
33
+ defaultSelected?: string;
34
+ /**
35
+ * If `true`, the component will be disabled.
36
+ */
37
+ disabled?: boolean;
38
+ /**
39
+ * Styling variant. Defaults to "primary".
40
+ */
41
+ variant?: "primary" | "secondary";
42
+ /**
43
+ /**
44
+ * The source of combobox items.
45
+ */
46
+ source: T[];
47
+ /**
48
+ * Optional ref for the list component
49
+ */
50
+ listRef?: Ref<HTMLUListElement>;
51
+ /**
52
+ * The component used for item instead of the default.
53
+ */
54
+ ListItem?: (props: ComboBoxItemProps<T>) => ReactElement<ComboBoxItemProps<T>>;
55
+ /**
56
+ * Function to be used as filter.
57
+ */
58
+ itemFilter?: (source: T[], filterValue?: string) => T[];
59
+ /**
60
+ * Callback for mouse over event
61
+ */
62
+ onMouseOver?: (event: SyntheticEvent) => void;
63
+ /**
64
+ * Callback for list selection event
65
+ */
66
+ onSelect?: (event: SyntheticEvent, data: {
67
+ value: string;
68
+ }) => void;
69
+ /**
70
+ /**
71
+ * Callback for list change event
72
+ */
73
+ onListChange?: (event: SyntheticEvent, data: {
74
+ value: string | undefined;
75
+ }) => void;
76
+ /**
77
+ * Callback for input change event
78
+ */
79
+ onChange?: (event: SyntheticEvent, data: {
80
+ value: string;
81
+ }) => void;
82
+ }
83
+ export declare const ComboBoxNext: import("react").ForwardRefExoticComponent<ComboBoxNextProps<unknown> & import("react").RefAttributes<HTMLInputElement>>;
@@ -0,0 +1 @@
1
+ export * from "./ComboBoxNext";
@@ -0,0 +1,36 @@
1
+ import { FocusEvent, KeyboardEvent, SyntheticEvent } from "react";
2
+ import { UseListProps } from "../list-next/useList";
3
+ import { UseComboBoxPortalProps } from "./useComboboxPortal";
4
+ interface UseComboBoxProps {
5
+ inputValue?: string;
6
+ defaultInputValue?: string;
7
+ onBlur?: (event: FocusEvent<HTMLInputElement>) => void;
8
+ onFocus?: (event: FocusEvent<HTMLInputElement>) => void;
9
+ onMouseOver?: (event: SyntheticEvent) => void;
10
+ onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;
11
+ PortalProps?: UseComboBoxPortalProps;
12
+ listProps: UseListProps;
13
+ }
14
+ export declare const useComboBox: ({ defaultInputValue, onFocus, onBlur, onMouseOver, onKeyDown, inputValue: inputValueProp, PortalProps, listProps, }: UseComboBoxProps) => {
15
+ inputValue: string | undefined;
16
+ setInputValue: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
17
+ portalProps: {
18
+ open: boolean;
19
+ setOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
20
+ floating: (node: HTMLElement | null) => void;
21
+ reference: (node: import("@floating-ui/react").ReferenceType | null) => void;
22
+ getTriggerProps: () => Record<string, unknown>;
23
+ getPortalProps: () => import("react").HTMLProps<HTMLDivElement>;
24
+ };
25
+ selectedItem: string | undefined;
26
+ setSelectedItem: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
27
+ highlightedItem: string | undefined;
28
+ setHighlightedItem: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
29
+ activeDescendant: string | undefined;
30
+ focusVisibleRef: import("react").Ref<HTMLElement>;
31
+ keyDownHandler: (event: KeyboardEvent<HTMLInputElement>) => void;
32
+ focusHandler: (event: FocusEvent<HTMLInputElement>) => void;
33
+ blurHandler: (event: FocusEvent<HTMLInputElement>) => void;
34
+ mouseOverHandler: (event: SyntheticEvent<HTMLElement>) => void;
35
+ };
36
+ export {};
@@ -0,0 +1,15 @@
1
+ import { Placement } from "@floating-ui/react";
2
+ import { HTMLProps } from "react";
3
+ export interface UseComboBoxPortalProps {
4
+ open?: boolean;
5
+ onOpenChange?: (open: boolean) => void;
6
+ placement?: Placement;
7
+ }
8
+ export declare function useComboboxPortal(props?: UseComboBoxPortalProps): {
9
+ open: boolean;
10
+ setOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
11
+ floating: (node: HTMLElement | null) => void;
12
+ reference: (node: import("@floating-ui/react").ReferenceType | null) => void;
13
+ getPortalProps: () => HTMLProps<HTMLDivElement>;
14
+ getTriggerProps: () => Record<string, unknown>;
15
+ };
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { ListItemNextProps } from "../list-next";
3
+ export declare const defaultFilter: (source: string[], filterValue?: string | undefined) => string[];
4
+ export interface ComboBoxItemProps<T> extends Omit<ListItemNextProps, "value"> {
5
+ value: T;
6
+ matchPattern?: RegExp | string;
7
+ }
8
+ export declare const DefaultListItem: import("react").ForwardRefExoticComponent<ComboBoxItemProps<string> & import("react").RefAttributes<unknown>>;
@@ -1,18 +1,23 @@
1
+ import { HTMLAttributes, ComponentProps } from "react";
2
+ import { FloatingFocusManager } from "@floating-ui/react";
1
3
  import { ValidationStatus } from "@salt-ds/core";
2
- import { HTMLAttributes } from "react";
3
- import { ScrimProps } from "../scrim";
4
4
  export interface DialogProps extends HTMLAttributes<HTMLDivElement> {
5
- autoFocusRef?: ScrimProps["autoFocusRef"];
6
- height?: string | number;
7
- onClose?: () => void;
5
+ /**
6
+ * Display or hide the component.
7
+ */
8
8
  open?: boolean;
9
+ /**
10
+ * Callback function triggered when open state changes.
11
+ */
12
+ onOpenChange?: (open: boolean) => void;
13
+ /**
14
+ * Status indicator
15
+ * */
9
16
  status?: ValidationStatus;
10
- width?: string | number;
11
- enableBackdropClick?: boolean;
12
- disablePortal?: boolean;
17
+ /**
18
+ * Which element to initially focus. Can be either a number (tabbable index as specified by the order) or a ref.
19
+ * Default value is 0 (first tabbable element).
20
+ * */
21
+ initialFocus?: ComponentProps<typeof FloatingFocusManager>["initialFocus"];
13
22
  }
14
- /**
15
- * The Dialog is a window that contains text and interactive components.
16
- * By default, Dialog is non-modal, but supports modal behaviour as well.
17
- */
18
23
  export declare const Dialog: import("react").ForwardRefExoticComponent<DialogProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,4 +1,2 @@
1
1
  import { HTMLAttributes } from "react";
2
- export interface DialogActionsProps extends HTMLAttributes<HTMLDivElement> {
3
- }
4
- export declare const DialogActions: import("react").ForwardRefExoticComponent<DialogActionsProps & import("react").RefAttributes<HTMLDivElement>>;
2
+ export declare const DialogActions: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { ButtonProps } from "@salt-ds/core";
3
+ export declare const DialogCloseButton: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -1,4 +1,2 @@
1
1
  import { HTMLAttributes } from "react";
2
- export interface DialogContentProps extends HTMLAttributes<HTMLDivElement> {
3
- }
4
- export declare const DialogContent: import("react").ForwardRefExoticComponent<DialogContentProps & import("react").RefAttributes<HTMLDivElement>>;
2
+ export declare const DialogContent: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,6 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  export declare const DialogContext: import("react").Context<{
3
- status?: "error" | "warning" | "success" | "info" | undefined;
4
3
  dialogId?: string | undefined;
5
- setContentElement?: ((node: HTMLDivElement) => void) | undefined;
4
+ status?: "error" | "warning" | "success" | "info" | undefined;
6
5
  }>;
6
+ export declare const useDialogContext: () => {
7
+ dialogId?: string | undefined;
8
+ status?: "error" | "warning" | "success" | "info" | undefined;
9
+ };
@@ -1,9 +1,8 @@
1
- import { HTMLAttributes, SyntheticEvent } from "react";
2
- export interface DialogTitleProps extends HTMLAttributes<HTMLDivElement> {
3
- /**
4
- * Disable the built-in ARIA heading attributes.
5
- */
6
- disableAria?: boolean;
7
- onClose?: (event: SyntheticEvent) => void;
1
+ import { ComponentPropsWithoutRef } from "react";
2
+ import { ValidationStatus } from "@salt-ds/core";
3
+ interface DialogTitleProps extends ComponentPropsWithoutRef<"h2"> {
4
+ status?: ValidationStatus;
5
+ accent?: boolean;
8
6
  }
9
- export declare const DialogTitle: import("react").ForwardRefExoticComponent<DialogTitleProps & import("react").RefAttributes<HTMLDivElement>>;
7
+ export declare const DialogTitle: ({ children, className, accent, status: statusProp, ...rest }: DialogTitleProps) => JSX.Element;
8
+ export {};
@@ -1,4 +1,6 @@
1
+ export * from "./Dialog";
2
+ export * from "./DialogTitle";
1
3
  export * from "./DialogActions";
2
4
  export * from "./DialogContent";
3
- export * from "./DialogTitle";
4
- export * from "./Dialog";
5
+ export * from "./DialogContext";
6
+ export * from "./DialogCloseButton";
@@ -0,0 +1,27 @@
1
+ /// <reference types="react" />
2
+ import { UseFloatingUIProps } from "@salt-ds/core";
3
+ export declare type UseDialogProps = Partial<Pick<UseFloatingUIProps, "onOpenChange" | "open">>;
4
+ export declare function useDialog(props: UseDialogProps): {
5
+ getFloatingProps: (userProps?: import("react").HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
6
+ getReferenceProps: (userProps?: import("react").HTMLProps<Element> | undefined) => Record<string, unknown>;
7
+ floating: (node: HTMLElement | null) => void;
8
+ context: {
9
+ x: number | null;
10
+ y: number | null;
11
+ placement: import("@floating-ui/react").Placement;
12
+ strategy: import("@floating-ui/react").Strategy;
13
+ middlewareData: import("@floating-ui/react").MiddlewareData;
14
+ update: () => void;
15
+ reference: (node: import("@floating-ui/react").ReferenceType | null) => void;
16
+ floating: (node: HTMLElement | null) => void;
17
+ isPositioned: boolean;
18
+ open: boolean;
19
+ onOpenChange: (open: boolean) => void;
20
+ events: import("@floating-ui/react").FloatingEvents;
21
+ dataRef: import("react").MutableRefObject<import("@floating-ui/react").ContextData>;
22
+ nodeId: string | undefined;
23
+ floatingId: string;
24
+ refs: import("@floating-ui/react").ExtendedRefs<import("@floating-ui/react").ReferenceType>;
25
+ elements: import("@floating-ui/react").ExtendedElements<import("@floating-ui/react").ReferenceType>;
26
+ };
27
+ };
@@ -0,0 +1,49 @@
1
+ import { ListNextProps } from "../list-next";
2
+ import { Ref, SyntheticEvent, ComponentPropsWithoutRef } from "react";
3
+ import { Placement } from "@floating-ui/react";
4
+ export interface DropdownNextProps extends Omit<ComponentPropsWithoutRef<"button">, "onSelect"> {
5
+ /**
6
+ * If `true`, dropdown will be disabled.
7
+ */
8
+ disabled?: boolean;
9
+ /**
10
+ * Initially selected value for the dropdown, for use only in uncontrolled component.
11
+ */
12
+ defaultSelected?: string;
13
+ /**
14
+ * List of options when using a dropdown.
15
+ */
16
+ source: string[];
17
+ /**
18
+ * If `true`, dropdown is read only.
19
+ */
20
+ readOnly?: boolean;
21
+ /**
22
+ * Background styling variant. Defaults to `primary` .
23
+ */
24
+ variant?: "primary" | "secondary";
25
+ /**
26
+ * Placement of dropdown list. Defaults to `bottom` .
27
+ */
28
+ placement?: Placement;
29
+ /**
30
+ * Optional ref for the list component.
31
+ */
32
+ listRef?: Ref<HTMLUListElement>;
33
+ /**
34
+ * Additional props for dropdown list.
35
+ */
36
+ ListProps?: ListNextProps;
37
+ open?: boolean;
38
+ /**
39
+ * Callback for list selection event
40
+ */
41
+ onSelect?: (event: SyntheticEvent, data: {
42
+ value: string;
43
+ }) => void;
44
+ /**
45
+ /* Selected prop for use in controlled component. */
46
+ selected?: string;
47
+ highlightedItem?: string;
48
+ }
49
+ export declare const DropdownNext: import("react").ForwardRefExoticComponent<DropdownNextProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1 @@
1
+ export * from "./DropdownNext";
@@ -0,0 +1,31 @@
1
+ import { UseFloatingUIProps } from "@salt-ds/core";
2
+ import { HTMLProps, KeyboardEvent, FocusEvent } from "react";
3
+ import { UseListProps } from "../list-next/useList";
4
+ interface UseDropdownNextProps extends Partial<Pick<UseFloatingUIProps, "onOpenChange" | "open" | "placement">> {
5
+ listProps: UseListProps;
6
+ openControlProp?: boolean;
7
+ }
8
+ export declare const useDropdownNext: ({ listProps, openControlProp, onOpenChange: onOpenChangeProp, placement: placementProp, }: UseDropdownNextProps) => {
9
+ handlers: {
10
+ focusHandler: (event: FocusEvent<HTMLElement>) => void;
11
+ keyDownHandler: (event: KeyboardEvent<HTMLElement>) => void;
12
+ blurHandler: () => void;
13
+ mouseOverHandler: () => void;
14
+ mouseDownHandler: () => void;
15
+ };
16
+ activeDescendant: string | undefined;
17
+ selectedItem: string | undefined;
18
+ setSelectedItem: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
19
+ highlightedItem: string | undefined;
20
+ setHighlightedItem: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
21
+ focusVisibleRef: import("react").Ref<HTMLElement>;
22
+ getListItems: (source: string[]) => JSX.Element[] | undefined;
23
+ portalProps: {
24
+ open: boolean;
25
+ setOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
26
+ floating: (node: HTMLElement | null) => void;
27
+ reference: (node: import("@floating-ui/react").ReferenceType | null) => void;
28
+ getDropdownNextProps: () => HTMLProps<HTMLDivElement>;
29
+ };
30
+ };
31
+ export {};
@@ -10,6 +10,7 @@ export * from "./carousel";
10
10
  export * from "./cascading-menu";
11
11
  export * from "./color-chooser";
12
12
  export * from "./combo-box";
13
+ export * from "./combo-box-next";
13
14
  export * from "./combo-box-deprecated";
14
15
  export * from "./contact-details";
15
16
  export * from "./content-status";
@@ -18,6 +19,7 @@ export * from "./deck-layout";
18
19
  export * from "./dialog";
19
20
  export * from "./drawer";
20
21
  export * from "./dropdown";
22
+ export * from "./dropdown-next";
21
23
  export * from "./editable-label";
22
24
  export * from "./file-drop-zone";
23
25
  export { FormFieldLegacy as FormField, type FormFieldLegacyProps as FormFieldProps, FormLabel, } from "./form-field-legacy";
@@ -31,7 +33,7 @@ export * from "./list-next";
31
33
  export * from "./logo";
32
34
  export * from "./menu-button";
33
35
  export * from "./metric";
34
- export * from "./nav-item";
36
+ export * from "./navigation-item";
35
37
  export * from "./overlay";
36
38
  export * from "./pagination";
37
39
  export * from "./parent-child-item";
@@ -1,5 +1,5 @@
1
1
  import { ComponentPropsWithoutRef, SyntheticEvent } from "react";
2
- export interface ListNextProps extends Omit<ComponentPropsWithoutRef<"ul">, "onChange"> {
2
+ export interface ListNextProps extends Omit<ComponentPropsWithoutRef<"ul">, "onChange" | "onSelect"> {
3
3
  /**
4
4
  * If true, all items in list will be disabled.
5
5
  */
@@ -8,6 +8,9 @@ export interface ListNextProps extends Omit<ComponentPropsWithoutRef<"ul">, "onC
8
8
  highlightedItem?: string;
9
9
  selected?: string;
10
10
  onChange?: (event: SyntheticEvent, data: {
11
+ value: string | undefined;
12
+ }) => void;
13
+ onSelect?: (event: SyntheticEvent, data: {
11
14
  value: string;
12
15
  }) => void;
13
16
  defaultSelected?: string;
@@ -1,5 +1,5 @@
1
1
  import { FocusEvent, KeyboardEvent, RefObject, SyntheticEvent } from "react";
2
- interface UseListProps {
2
+ export interface UseListProps {
3
3
  /**
4
4
  * If true, all items in list will be disabled.
5
5
  */
@@ -8,13 +8,16 @@ interface UseListProps {
8
8
  selected?: string;
9
9
  defaultSelected?: string;
10
10
  onChange?: (e: SyntheticEvent, data: {
11
+ value: string | undefined;
12
+ }) => void;
13
+ onSelect?: (e: SyntheticEvent, data: {
11
14
  value: string;
12
15
  }) => void;
13
16
  id?: string;
14
17
  ref: RefObject<HTMLUListElement>;
15
18
  }
16
- export declare const useList: ({ disabled, highlightedItem: highLightedItemProp, selected: selectedProp, defaultSelected, onChange, id, ref, }: UseListProps) => {
17
- focusHandler: (event: FocusEvent<HTMLUListElement>) => void;
19
+ export declare const useList: ({ disabled, highlightedItem: highlightedItemProp, selected: selectedProp, defaultSelected, onChange, onSelect, id, ref, }: UseListProps) => {
20
+ focusHandler: (event: FocusEvent<HTMLUListElement | HTMLElement>) => void;
18
21
  keyDownHandler: (event: KeyboardEvent<HTMLElement>) => void;
19
22
  blurHandler: () => void;
20
23
  mouseOverHandler: () => void;
@@ -34,4 +37,3 @@ export declare const useList: ({ disabled, highlightedItem: highLightedItemProp,
34
37
  };
35
38
  focusVisibleRef: import("react").Ref<HTMLElement>;
36
39
  };
37
- export {};
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from "react";
2
+ import { NavigationItemProps } from "./NavigationItem";
3
+ interface ConditionalWrapperProps extends Pick<NavigationItemProps, "parent" | "expanded" | "onExpand" | "active" | "href"> {
4
+ children: ReactNode;
5
+ className: string;
6
+ }
7
+ export declare const ConditionalWrapper: ({ children, className, parent, expanded, onExpand, active, href, }: ConditionalWrapperProps) => JSX.Element;
8
+ export {};
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { NavigationItemProps } from "./NavigationItem";
3
+ export declare function ExpansionIcon({ expanded, orientation, className, }: Pick<NavigationItemProps, "expanded" | "orientation" | "className">): JSX.Element;
@@ -0,0 +1,36 @@
1
+ import { ComponentPropsWithoutRef, MouseEventHandler } from "react";
2
+ export interface NavigationItemProps extends ComponentPropsWithoutRef<"div"> {
3
+ /**
4
+ * Whether the navigation item is active.
5
+ */
6
+ active?: boolean;
7
+ /**
8
+ * Whether the nested group is collapsed and there is an active nested item within it.
9
+ */
10
+ blurActive?: boolean;
11
+ /**
12
+ * Whether the navigation item is expanded.
13
+ */
14
+ expanded?: boolean;
15
+ /**
16
+ * Level of nesting.
17
+ */
18
+ level?: number;
19
+ /**
20
+ * The orientation of the navigation item.
21
+ */
22
+ orientation?: "horizontal" | "vertical";
23
+ /**
24
+ * Whether the navigation item is a parent with nested items.
25
+ */
26
+ parent?: boolean;
27
+ /**
28
+ * Action to be triggered when the navigation item is expanded.
29
+ */
30
+ onExpand?: MouseEventHandler<HTMLButtonElement>;
31
+ /**
32
+ * Href to be passed to the Link element.
33
+ */
34
+ href?: string;
35
+ }
36
+ export declare const NavigationItem: import("react").ForwardRefExoticComponent<NavigationItemProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1 @@
1
+ export * from "./NavigationItem";
package/package.json CHANGED
@@ -1,9 +1,36 @@
1
1
  {
2
2
  "name": "@salt-ds/lab",
3
- "version": "1.0.0-alpha.15",
3
+ "version": "1.0.0-alpha.17",
4
4
  "license": "Apache-2.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/jpmorganchase/salt-ds.git",
8
+ "directory": "packages/lab"
9
+ },
10
+ "bugs": "https://github.com/jpmorganchase/salt-ds/issues",
5
11
  "main": "dist-cjs/index.js",
6
12
  "sideEffects": false,
13
+ "dependencies": {
14
+ "@floating-ui/react": "^0.23.0",
15
+ "@fluentui/react-overflow": "^9.0.19",
16
+ "@internationalized/date": "^3.0.0",
17
+ "@types/react-window": "^1.8.2",
18
+ "aria-hidden": "^1.1.1",
19
+ "attr-accept": "^2.0.0",
20
+ "clipboard-copy": "^4.0.1",
21
+ "clsx": "^2.0.0",
22
+ "compute-scroll-into-view": "^3.0.0",
23
+ "deepmerge": "^4.2.2",
24
+ "no-scroll": "^2.1.1",
25
+ "react-color": "^2.19.3",
26
+ "react-window": "^1.8.6",
27
+ "rifm": "^0.12.0",
28
+ "tinycolor2": "^1.4.2",
29
+ "@salt-ds/core": "^1.8.2",
30
+ "@salt-ds/window": "^0.1.1",
31
+ "@salt-ds/styles": "^0.1.1",
32
+ "@salt-ds/icons": "^1.7.0"
33
+ },
7
34
  "peerDependencies": {
8
35
  "@types/react": ">=16.14.0",
9
36
  "react": ">=16.14.0",
@@ -20,35 +47,10 @@
20
47
  },
21
48
  "module": "dist-es/index.js",
22
49
  "typings": "dist-types/index.d.ts",
23
- "dependencies": {
24
- "@salt-ds/core": "^1.8.0",
25
- "clsx": "^2.0.0",
26
- "react-window": "^1.8.6",
27
- "compute-scroll-into-view": "^3.0.0",
28
- "@salt-ds/window": "^0.1.1",
29
- "@salt-ds/styles": "^0.1.1",
30
- "@salt-ds/icons": "^1.6.0",
31
- "@floating-ui/react": "^0.23.0",
32
- "@internationalized/date": "^3.0.0",
33
- "tinycolor2": "^1.4.2",
34
- "react-color": "^2.19.3",
35
- "deepmerge": "^4.2.2",
36
- "clipboard-copy": "^4.0.1",
37
- "aria-hidden": "^1.1.1",
38
- "no-scroll": "^2.1.1",
39
- "attr-accept": "^2.0.0",
40
- "rifm": "^0.12.0",
41
- "@fluentui/react-overflow": "^9.0.19"
42
- },
43
50
  "files": [
44
51
  "dist-cjs",
45
52
  "dist-es",
46
53
  "dist-types",
47
54
  "README.md"
48
- ],
49
- "repository": {
50
- "type": "git",
51
- "url": "https://github.com/jpmorganchase/salt-ds",
52
- "directory": "packages/lab"
53
- }
55
+ ]
54
56
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"DialogContext.js","sources":["../src/dialog/internal/DialogContext.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport { ValidationStatus } from \"@salt-ds/core\";\n\nexport const DialogContext = createContext<{\n status?: ValidationStatus;\n dialogId?: string;\n setContentElement?: (node: HTMLDivElement) => void;\n}>({});\n"],"names":["createContext"],"mappings":";;;;;;AAGa,MAAA,aAAA,GAAgBA,mBAI1B,CAAA,EAAE;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExpansionButton.js","sources":["../src/nav-item/ExpansionButton.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronRightIcon } from \"@salt-ds/icons\";\nimport { ComponentPropsWithoutRef } from \"react\";\nimport { Button } from \"@salt-ds/core\";\nimport { NavItemProps } from \"./NavItem\";\n\nconst iconExpansionMap = {\n vertical: {\n expanded: ChevronDownIcon,\n collapsed: ChevronRightIcon,\n },\n horizontal: {\n expanded: ChevronDownIcon,\n collapsed: ChevronDownIcon,\n },\n};\n\nexport function ExpansionButton({\n expanded = false,\n orientation = \"horizontal\",\n ...rest\n}: Pick<NavItemProps, \"expanded\" | \"orientation\"> &\n ComponentPropsWithoutRef<\"button\">) {\n const Icon =\n iconExpansionMap[orientation][expanded ? \"expanded\" : \"collapsed\"];\n return (\n <Button aria-label=\"expand\" variant=\"secondary\" {...rest}>\n <Icon aria-hidden=\"true\" />\n </Button>\n );\n}\n"],"names":["ChevronDownIcon","ChevronRightIcon","jsx","Button"],"mappings":";;;;;;;;AAKA,MAAM,gBAAmB,GAAA;AAAA,EACvB,QAAU,EAAA;AAAA,IACR,QAAU,EAAAA,qBAAA;AAAA,IACV,SAAW,EAAAC,sBAAA;AAAA,GACb;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAAD,qBAAA;AAAA,IACV,SAAW,EAAAA,qBAAA;AAAA,GACb;AACF,CAAA,CAAA;AAEO,SAAS,eAAgB,CAAA;AAAA,EAC9B,QAAW,GAAA,KAAA;AAAA,EACX,WAAc,GAAA,YAAA;AAAA,EACX,GAAA,IAAA;AACL,CACsC,EAAA;AACpC,EAAA,MAAM,IACJ,GAAA,gBAAA,CAAiB,WAAa,CAAA,CAAA,QAAA,GAAW,UAAa,GAAA,WAAA,CAAA,CAAA;AACxD,EAAA,uBACGE,cAAA,CAAAC,WAAA,EAAA;AAAA,IAAO,YAAW,EAAA,QAAA;AAAA,IAAS,OAAQ,EAAA,WAAA;AAAA,IAAa,GAAG,IAAA;AAAA,IAClD,QAAC,kBAAAD,cAAA,CAAA,IAAA,EAAA;AAAA,MAAK,aAAY,EAAA,MAAA;AAAA,KAAO,CAAA;AAAA,GAC3B,CAAA,CAAA;AAEJ;;;;"}
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var css_248z = "/* Vars applied to root NavItem component */\n.saltNavItem {\n --navItem-color: var(--salt-text-secondary-foreground);\n --navItem-fill: var(--salt-text-secondary-foreground);\n --navItem-bar-inset: var(--salt-spacing-25);\n --navItem-bar-size: calc(var(--salt-size-bar) / 2);\n --navItem-indicator-background: var(--salt-navigable-indicator-active);\n}\n\n/* Vars applied to NavItem component when active or selected */\n.saltNavItem-active,\n.saltNavItem-blurSelected {\n --navItem-color: var(--salt-text-primary-foreground);\n --navItem-fill: var(--salt-text-primary-foreground);\n}\n\n/* Styles applied to root NavItem component */\n.saltNavItem {\n display: flex;\n align-items: center;\n position: relative;\n gap: var(--salt-spacing-100);\n font-weight: var(--salt-text-fontWeight-strong);\n /* Hover off animation */\n transition: all var(--salt-duration-instant) ease-in-out;\n}\n\n/* Styles applied to NavItem icon */\n.saltNavItem .saltNavItem-icon {\n fill: var(--navItem-fill);\n}\n\n/* Styles applied when orientation = \"horizontal\" */\n.saltNavItem-horizontal {\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100) + var(--salt-spacing-100));\n padding: calc(var(--salt-spacing-100) + var(--navItem-bar-inset)) 0 var(--salt-spacing-100) 0;\n margin: 0 var(--salt-spacing-100);\n}\n\n/* Styles applied when orientation = \"vertical\" */\n.saltNavItem-vertical {\n min-height: calc(var(--salt-size-base));\n padding-left: calc(var(--salt-spacing-100) + var(--navItem-bar-inset));\n margin: var(--salt-spacing-50) 0;\n}\n\n/* Styles applied to NavItem label */\n.saltNavItem .saltNavItem-label {\n --link-color-visited: var(--navItem-color);\n --link-color-hover: var(--navItem-color);\n\n text-decoration: none;\n color: var(--navItem-color);\n line-height: var(--salt-text-lineHeight);\n font-family: var(--salt-text-fontFamily);\n padding-left: calc(var(--saltNavItem-level, 0) * var(--salt-spacing-100));\n flex: 1;\n}\n\n/* Styles applied when level is not 0 */\n.saltNavItem-nested {\n padding-left: calc(var(--salt-spacing-250) + (var(--saltNavItem-level, 0) * var(--salt-spacing-100)));\n}\n\n/* Styles applied to expand button icon */\n.saltNavItem .saltNavItem-expandButton {\n --saltIcon-color: var(--navItem-fill);\n --saltButton-background-hover: none;\n --saltButton-background-active: none;\n}\n\n/* Styles applied to NavItem when focus is visible */\n.saltNavItem:focus-visible {\n outline: var(--salt-focused-outline);\n}\n\n/* Styles applied to activation line */\n.saltNavItem::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n}\n\n/* Styles applied to activation line when orientation = \"horizontal\" */\n.saltNavItem-horizontal::after {\n width: 100%;\n height: var(--navItem-bar-size);\n top: var(--navItem-bar-inset);\n}\n\n/* Styles applied to activation line when orientation = \"vertical\" */\n.saltNavItem-vertical::after {\n width: var(--navItem-bar-size);\n height: 100%;\n left: var(--navItem-bar-inset);\n}\n\n/* Styles applied to activation line on hover and on focus */\n.saltNavItem:hover::after,\n.saltNavItem:focus::after {\n background: var(--salt-navigable-indicator-hover);\n /* Hover on animation */\n transition: all var(--salt-duration-perceptible) ease-in-out;\n}\n\n/* Styles applied to activation line when item has active children */\n.saltNavItem.saltNavItem-blurSelected::after,\n.saltNavItem.saltNavItem-blurSelected:hover::after,\n.saltNavItem.saltNavItem-blurSelected:focus::after {\n --navItem-indicator-background: none;\n}\n\n/* Styles applied to activation line when item is active */\n.saltNavItem.saltNavItem-active::after,\n.saltNavItem.saltNavItem-active:hover::after,\n.saltNavItem.saltNavItem-active:focus::after {\n background: var(--navItem-indicator-background);\n /* Hover on animation */\n transition: all var(--salt-duration-perceptible) ease-in-out;\n}\n";
4
-
5
- module.exports = css_248z;
6
- //# sourceMappingURL=NavItem.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NavItem.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}