@grasp-labs/ds-react-components 0.17.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/baseButton/BaseButton.styles.d.ts +20 -0
- package/dist/components/baseButton/index.d.ts +1 -0
- package/dist/components/button/Button.styles.d.ts +10 -0
- package/dist/components/datePicker/datePicker.const.d.ts +1 -0
- package/dist/components/datePicker/datePicker.d.ts +1 -5
- package/dist/components/datePicker/datePicker.util.d.ts +3 -0
- package/dist/components/datePicker/datePickerTextBox.d.ts +15 -0
- package/dist/components/dropdown/Dropdown.d.ts +18 -0
- package/dist/components/dropdown/DropdownItem.d.ts +7 -0
- package/dist/components/dropdown/index.d.ts +3 -0
- package/dist/components/link/Link.d.ts +21 -0
- package/dist/components/link/index.d.ts +1 -0
- package/dist/components/{menu/Menu.d.ts → sidebar/Sidebar.d.ts} +14 -14
- package/dist/components/{menu/MenuEntry.d.ts → sidebar/SidebarEntry.d.ts} +18 -18
- package/dist/components/sidebar/index.d.ts +11 -0
- package/dist/index-wJPxf68W.js +13626 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/{index.esm-B4HiWhze.js → index.esm-hxxEbnri.js} +1 -1
- package/dist/index.js +49 -46
- package/package.json +6 -4
- package/dist/components/menu/index.d.ts +0 -11
- package/dist/index-CTQbH0dg.js +0 -11518
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type Variant = "contained" | "outlined" | "text";
|
|
2
|
+
export type Color = "primary" | "secondary" | "danger";
|
|
3
|
+
export declare const colorVariantClasses: {
|
|
4
|
+
readonly contained: {
|
|
5
|
+
readonly primary: "border-2 border-primary bg-primary text-contrast disabled:hover:bg-primary disabled:hover:text-contrast hover:bg-contrast hover:text-text ";
|
|
6
|
+
readonly secondary: "border-2 border-secondary bg-secondary text-text disabled:hover:bg-secondary disabled:hover:text-text hover:bg-contrast hover:text-text";
|
|
7
|
+
readonly danger: "border-2 border-error bg-error text-contrast disabled:hover:bg-error disabled:hover:text-contrast hover:bg-contrast hover:text-error";
|
|
8
|
+
};
|
|
9
|
+
readonly outlined: {
|
|
10
|
+
readonly primary: "border-2 border-primary bg-contrast text-text disabled:hover:bg-contrast disabled:hover:text-text hover:bg-primary hover:text-contrast";
|
|
11
|
+
readonly secondary: "border-2 border-secondary bg-contrast text-text disabled:hover:bg-contrast disabled:hover:text-text hover:bg-secondary hover:text-text";
|
|
12
|
+
readonly danger: "border-2 border-error bg-contrast text-error disabled:hover:bg-contrast disabled:hover:text-error hover:bg-error hover:text-contrast";
|
|
13
|
+
};
|
|
14
|
+
readonly text: {
|
|
15
|
+
readonly primary: "text-primary hover:text-primary-light";
|
|
16
|
+
readonly secondary: "text-text";
|
|
17
|
+
readonly danger: "text-error";
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare function getBaseButtonClassName(variant: Variant, color: Color, className?: string): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const buttonSizeClasses: {
|
|
2
|
+
readonly small: "rounded-lg px-3 py-1 text-xs gap-1";
|
|
3
|
+
readonly medium: "rounded-xl px-5 py-2 text-xs gap-2";
|
|
4
|
+
readonly large: "rounded-xl px-7 py-3 text-sm gap-2";
|
|
5
|
+
};
|
|
6
|
+
export declare const buttonContentClasses: {
|
|
7
|
+
readonly small: "h-4";
|
|
8
|
+
readonly medium: "h-5";
|
|
9
|
+
readonly large: "h-5";
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DEFAULT_MASK_PLACEHOLDER = "_";
|
|
@@ -4,8 +4,6 @@ type DayPickerClassNamesConfig = Pick<ComponentProps<typeof DayPicker>, "classNa
|
|
|
4
4
|
export type DatePickerProps = {
|
|
5
5
|
/** Label text displayed nex to the trigger button */
|
|
6
6
|
labelText: string;
|
|
7
|
-
/** Text displayed in trigger button, when date is not selected */
|
|
8
|
-
placeholderText: string;
|
|
9
7
|
/** Date displayed in trigger button, when date is selected */
|
|
10
8
|
selectedDate: Date | null;
|
|
11
9
|
/** Locale used to display texts of date-picker in correct language and present date with correct format */
|
|
@@ -20,8 +18,6 @@ export type DatePickerProps = {
|
|
|
20
18
|
className?: string;
|
|
21
19
|
/** Config for class names used to override default styles of calendar */
|
|
22
20
|
dayPickerClassNames?: DayPickerClassNamesConfig;
|
|
23
|
-
/** Aria label added to the button, when date is selected */
|
|
24
|
-
nonEmptyButtonAriaLabel: string;
|
|
25
21
|
/** Callback function called when the date is changed */
|
|
26
22
|
onSelectedDateChange: (selectedDate: Date | null) => void;
|
|
27
23
|
};
|
|
@@ -31,5 +27,5 @@ export type DatePickerProps = {
|
|
|
31
27
|
* @param props - The props for the DatePicker component
|
|
32
28
|
* @returns The rendered date-picker
|
|
33
29
|
*/
|
|
34
|
-
export declare const DatePicker: ({ labelText,
|
|
30
|
+
export declare const DatePicker: ({ labelText, selectedDate, locale, minDate, maxDate, defaultMonth, className, dayPickerClassNames, onSelectedDateChange, }: DatePickerProps) => import("react/jsx-runtime").JSX.Element;
|
|
35
31
|
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const DatePickerTextBox: import('react').ForwardRefExoticComponent<Omit<Omit<import('react').InputHTMLAttributes<HTMLInputElement>, "children"> & {
|
|
2
|
+
prefixContent?: import('react').ReactNode;
|
|
3
|
+
suffixContent?: import('react').ReactNode;
|
|
4
|
+
error?: boolean;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
id?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
rootClassName?: string;
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
12
|
+
acceptOnly?: import('../baseTextBox').AcceptOnlyPattern | ((value: string) => string);
|
|
13
|
+
} & {
|
|
14
|
+
onCalendarToggle: () => void;
|
|
15
|
+
}, "ref"> & import('react').RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { JSX } from 'react';
|
|
2
|
+
export type DropdownProps = {
|
|
3
|
+
/** Element that will trigger the dropdown, e.g. button */
|
|
4
|
+
triggerElement: JSX.Element;
|
|
5
|
+
/** Determines if dropdown is open, when passed - default open/close behavior of component is disabled */
|
|
6
|
+
isOpen?: boolean;
|
|
7
|
+
/** Optional className for popup, that allows to add custom styles */
|
|
8
|
+
popupClassName?: string;
|
|
9
|
+
/** Dropdown options, that will be shown when dropdown is open. */
|
|
10
|
+
children: JSX.Element | JSX.Element[];
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A flexible Dropdown component
|
|
14
|
+
*
|
|
15
|
+
* @param props - The props for the Dropdown component
|
|
16
|
+
* @returns The rendered dropdown
|
|
17
|
+
*/
|
|
18
|
+
export declare const Dropdown: ({ triggerElement, popupClassName, children, ...props }: DropdownProps) => JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type DropdownItemProps = {
|
|
2
|
+
isDisabled?: boolean;
|
|
3
|
+
className?: string;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
onClick?: () => void;
|
|
6
|
+
};
|
|
7
|
+
export declare const DropdownItem: ({ isDisabled, className, children, onClick, }: DropdownItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ElementType } from 'react';
|
|
2
|
+
import { Variant } from '../baseButton';
|
|
3
|
+
import { Button } from '../button';
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
type BaseButtonProps = Pick<React.ComponentProps<typeof Button>, "color" | "size" | "className" | "children" | "prefixContent" | "suffixContent">;
|
|
6
|
+
type VisualConfigProps = BaseButtonProps & {
|
|
7
|
+
variant?: Variant | "generic";
|
|
8
|
+
};
|
|
9
|
+
type PassedComponentProps<Props extends ElementType> = React.ComponentPropsWithoutRef<Props>;
|
|
10
|
+
export type LinkProps<Component extends ElementType = "a"> = VisualConfigProps & {
|
|
11
|
+
as?: Component;
|
|
12
|
+
} & Omit<PassedComponentProps<Component>, keyof VisualConfigProps | "as" | "className" | "children">;
|
|
13
|
+
/**
|
|
14
|
+
* A foundational link component with configurable variants and color schemes.
|
|
15
|
+
* Provides consistent styling, behavior and children rendering.
|
|
16
|
+
*
|
|
17
|
+
* @param props - The props for the Link component.
|
|
18
|
+
* @returns The rendered link element.
|
|
19
|
+
*/
|
|
20
|
+
export declare function Link<ComponentType extends ElementType = "a">({ as, variant, color, size, className, prefixContent, suffixContent, children, ...props }: LinkProps<ComponentType>): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Link';
|
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
import { JSX, ReactElement, ReactNode } from 'react';
|
|
2
2
|
/**
|
|
3
|
-
* Represents a single route in the
|
|
3
|
+
* Represents a single route in the sidebar.
|
|
4
4
|
*/
|
|
5
|
-
export type
|
|
5
|
+
export type SidebarRoute = {
|
|
6
6
|
/** Unique path of the route, used as key and for navigation */
|
|
7
7
|
path: string;
|
|
8
|
-
/** Display title of the
|
|
8
|
+
/** Display title of the sidebar item */
|
|
9
9
|
title: string;
|
|
10
10
|
/** Optional icon element to render next to the title */
|
|
11
11
|
icon?: ReactNode;
|
|
12
12
|
/** Nested children entries for submenus */
|
|
13
|
-
children?:
|
|
13
|
+
children?: SidebarRoute[];
|
|
14
14
|
/** Permissions required to display this route */
|
|
15
15
|
permissions?: string[];
|
|
16
|
-
/** Whether this route should be hidden from the
|
|
17
|
-
|
|
16
|
+
/** Whether this route should be hidden from the sidebar */
|
|
17
|
+
isHidden?: boolean;
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
|
-
* Props for the `
|
|
20
|
+
* Props for the `Sidebar` component.
|
|
21
21
|
*/
|
|
22
|
-
export type
|
|
23
|
-
/** React element to display as the
|
|
22
|
+
export type SidebarProps = {
|
|
23
|
+
/** React element to display as the sidebar logo (e.g. an SVG component or img element) */
|
|
24
24
|
logo: ReactElement;
|
|
25
25
|
/** Content to display in the footer */
|
|
26
26
|
footerContent: React.ReactNode;
|
|
27
|
-
/** Array of routes to display in the
|
|
28
|
-
routes:
|
|
27
|
+
/** Array of routes to display in the sidebar */
|
|
28
|
+
routes: SidebarRoute[];
|
|
29
29
|
/** Current user permissions used to filter routes */
|
|
30
30
|
permissions?: string[];
|
|
31
31
|
/** Optional additional class names for styling */
|
|
32
32
|
className?: string;
|
|
33
33
|
};
|
|
34
34
|
/**
|
|
35
|
-
* `
|
|
35
|
+
* `Sidebar` is a vertical navigation component that displays a header with a logo,
|
|
36
36
|
* a list of navigable entries (filtered by permissions), and a footer.
|
|
37
37
|
*
|
|
38
38
|
* @example
|
|
39
39
|
* ```tsx
|
|
40
|
-
* <
|
|
40
|
+
* <Sidebar
|
|
41
41
|
* logo={<MyLogo />}
|
|
42
42
|
* footerContent="© 2025 My Company"
|
|
43
43
|
* routes={[
|
|
@@ -48,4 +48,4 @@ export type MenuProps = {
|
|
|
48
48
|
* />
|
|
49
49
|
* ```
|
|
50
50
|
*/
|
|
51
|
-
export declare const
|
|
51
|
+
export declare const Sidebar: ({ logo, footerContent, routes, permissions, className, }: SidebarProps) => JSX.Element;
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { JSX, ReactNode } from 'react';
|
|
2
2
|
/**
|
|
3
|
-
* Represents a child route/entry in the
|
|
3
|
+
* Represents a child route/entry in the sidebar hierarchy.
|
|
4
4
|
*/
|
|
5
|
-
export type
|
|
5
|
+
export type SidebarChild = {
|
|
6
6
|
/** Unique path of the child entry (if navigable) */
|
|
7
7
|
path?: string;
|
|
8
|
-
/** Display title of the
|
|
8
|
+
/** Display title of the sidebar item */
|
|
9
9
|
title: string;
|
|
10
|
-
/** Optional icon for the
|
|
10
|
+
/** Optional icon for the sidebar item */
|
|
11
11
|
icon?: ReactNode;
|
|
12
12
|
/** Nested children for submenus */
|
|
13
|
-
children?:
|
|
13
|
+
children?: SidebarChild[];
|
|
14
14
|
/** Required permissions for the entry */
|
|
15
15
|
permissions?: string[];
|
|
16
|
-
/** Whether this entry should be hidden from the
|
|
17
|
-
|
|
16
|
+
/** Whether this entry should be hidden from the sidebar */
|
|
17
|
+
isHidden?: boolean;
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
|
-
* Props for the `
|
|
20
|
+
* Props for the `SidebarEntry` component.
|
|
21
21
|
*/
|
|
22
|
-
export type
|
|
22
|
+
export type SidebarEntryProps = {
|
|
23
23
|
/** Icon to display before the title */
|
|
24
24
|
icon?: ReactNode;
|
|
25
|
-
/** Title text of the
|
|
25
|
+
/** Title text of the sidebar item */
|
|
26
26
|
title: string;
|
|
27
27
|
/** Path used for navigation when clicked (ignored if it has children) */
|
|
28
28
|
path?: string;
|
|
29
|
-
/** Nested children
|
|
30
|
-
childrenEntries?:
|
|
29
|
+
/** Nested children sidebar entries */
|
|
30
|
+
childrenEntries?: SidebarChild[];
|
|
31
31
|
/** Current user permissions for filtering children */
|
|
32
32
|
permissions?: string[];
|
|
33
33
|
/** The currently active path to highlight the entry */
|
|
@@ -40,15 +40,15 @@ export type MenuEntryProps = {
|
|
|
40
40
|
depth?: number;
|
|
41
41
|
};
|
|
42
42
|
/**
|
|
43
|
-
* `
|
|
43
|
+
* `SidebarEntry` renders a single sidebar item.
|
|
44
44
|
*
|
|
45
45
|
* - If the entry has children, it can expand/collapse to reveal them.
|
|
46
46
|
* - If it has a `path`, clicking navigates to that path via `onNavigate`.
|
|
47
|
-
* - Entries are filtered by `permissions` and `
|
|
47
|
+
* - Entries are filtered by `permissions` and `isHidden` before rendering.
|
|
48
48
|
*
|
|
49
49
|
* @example
|
|
50
50
|
* ```tsx
|
|
51
|
-
* <
|
|
51
|
+
* <SidebarEntry
|
|
52
52
|
* title="Settings"
|
|
53
53
|
* path="/settings"
|
|
54
54
|
* icon={<SettingsIcon />}
|
|
@@ -56,7 +56,7 @@ export type MenuEntryProps = {
|
|
|
56
56
|
* onNavigate={(path) => console.log("Navigate to:", path)}
|
|
57
57
|
* />
|
|
58
58
|
*
|
|
59
|
-
* <
|
|
59
|
+
* <SidebarEntry
|
|
60
60
|
* title="Admin"
|
|
61
61
|
* icon={<AdminIcon />}
|
|
62
62
|
* childrenEntries={[
|
|
@@ -69,5 +69,5 @@ export type MenuEntryProps = {
|
|
|
69
69
|
* />
|
|
70
70
|
* ```
|
|
71
71
|
*/
|
|
72
|
-
declare const
|
|
73
|
-
export default
|
|
72
|
+
declare const SidebarEntry: ({ icon, title, path, childrenEntries, permissions, className, activePath, onNavigate, depth, }: SidebarEntryProps) => JSX.Element;
|
|
73
|
+
export default SidebarEntry;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Barrel exports for the Sidebar system.
|
|
3
|
+
* Allows importing the main Sidebar component.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* import { Sidebar } from "@/components/Sidebar";
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export { Sidebar } from './Sidebar';
|
|
11
|
+
export type { SidebarProps, SidebarRoute } from './Sidebar';
|