@ndlib/component-library 0.0.7-9.1
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/README.md +101 -0
- package/dist/FontLoader.d.ts +1 -0
- package/dist/FontLoader.js +4 -0
- package/dist/components/composites/Card/Card.stories.d.ts +13 -0
- package/dist/components/composites/Card/Card.stories.js +122 -0
- package/dist/components/composites/Card/Card.test.d.ts +1 -0
- package/dist/components/composites/Card/Card.test.js +37 -0
- package/dist/components/composites/Card/index.d.ts +36 -0
- package/dist/components/composites/Card/index.js +89 -0
- package/dist/components/composites/DragDropList/DragDropList.stories.d.ts +7 -0
- package/dist/components/composites/DragDropList/DragDropList.stories.js +32 -0
- package/dist/components/composites/DragDropList/index.d.ts +25 -0
- package/dist/components/composites/DragDropList/index.js +48 -0
- package/dist/components/composites/DropdownLinks/DropdownLinks.stories.d.ts +8 -0
- package/dist/components/composites/DropdownLinks/DropdownLinks.stories.js +25 -0
- package/dist/components/composites/DropdownLinks/DropdownLinks.test.d.ts +1 -0
- package/dist/components/composites/DropdownLinks/DropdownLinks.test.js +27 -0
- package/dist/components/composites/DropdownLinks/index.d.ts +15 -0
- package/dist/components/composites/DropdownLinks/index.js +28 -0
- package/dist/components/composites/EmptyState/EmptyState.stories.d.ts +10 -0
- package/dist/components/composites/EmptyState/EmptyState.stories.js +31 -0
- package/dist/components/composites/EmptyState/EmptyState.test.d.ts +1 -0
- package/dist/components/composites/EmptyState/EmptyState.test.js +20 -0
- package/dist/components/composites/EmptyState/index.d.ts +15 -0
- package/dist/components/composites/EmptyState/index.js +32 -0
- package/dist/components/composites/Modal/Modal.stories.d.ts +6 -0
- package/dist/components/composites/Modal/Modal.stories.js +40 -0
- package/dist/components/composites/Modal/index.d.ts +21 -0
- package/dist/components/composites/Modal/index.js +64 -0
- package/dist/components/composites/NavMenu/NavMenu.stories.d.ts +6 -0
- package/dist/components/composites/NavMenu/NavMenu.stories.js +12 -0
- package/dist/components/composites/NavMenu/NavMenu.test.d.ts +1 -0
- package/dist/components/composites/NavMenu/NavMenu.test.js +96 -0
- package/dist/components/composites/NavMenu/demo.d.ts +1 -0
- package/dist/components/composites/NavMenu/demo.js +172 -0
- package/dist/components/composites/NavMenu/index.d.ts +5 -0
- package/dist/components/composites/NavMenu/index.js +52 -0
- package/dist/components/composites/Seo/SeoDataDisplay/index.d.ts +2 -0
- package/dist/components/composites/Seo/SeoDataDisplay/index.js +9 -0
- package/dist/components/composites/Seo/index.d.ts +11 -0
- package/dist/components/composites/Seo/index.js +16 -0
- package/dist/components/composites/Seo/seo.stories.d.ts +6 -0
- package/dist/components/composites/Seo/seo.stories.js +12 -0
- package/dist/components/composites/Seo/seo.test.d.ts +1 -0
- package/dist/components/composites/Seo/seo.test.js +56 -0
- package/dist/components/composites/Seo/siteMetadata.d.ts +9 -0
- package/dist/components/composites/Seo/siteMetadata.js +16 -0
- package/dist/components/composites/SnackBar/SnackBar.stories.d.ts +8 -0
- package/dist/components/composites/SnackBar/SnackBar.stories.js +20 -0
- package/dist/components/composites/SnackBar/SnackBar.test.d.ts +1 -0
- package/dist/components/composites/SnackBar/SnackBar.test.js +75 -0
- package/dist/components/composites/SnackBar/examples.d.ts +3 -0
- package/dist/components/composites/SnackBar/examples.js +35 -0
- package/dist/components/composites/SnackBar/index.d.ts +1 -0
- package/dist/components/composites/SnackBar/index.js +45 -0
- package/dist/components/composites/StructuredData/StructuredData.stories.d.ts +6 -0
- package/dist/components/composites/StructuredData/StructuredData.stories.js +12 -0
- package/dist/components/composites/StructuredData/StructuredData.test.d.ts +1 -0
- package/dist/components/composites/StructuredData/StructuredData.test.js +48 -0
- package/dist/components/composites/StructuredData/StructuredDataDisplay/index.d.ts +2 -0
- package/dist/components/composites/StructuredData/StructuredDataDisplay/index.js +37 -0
- package/dist/components/composites/StructuredData/index.d.ts +38 -0
- package/dist/components/composites/StructuredData/index.js +58 -0
- package/dist/components/composites/StructuredData/sdEvent/index.d.ts +13 -0
- package/dist/components/composites/StructuredData/sdEvent/index.js +16 -0
- package/dist/components/composites/StructuredData/sdEvent/makeEventSchema.d.ts +15 -0
- package/dist/components/composites/StructuredData/sdEvent/makeEventSchema.js +16 -0
- package/dist/components/composites/StructuredData/sdNews/index.d.ts +11 -0
- package/dist/components/composites/StructuredData/sdNews/index.js +14 -0
- package/dist/components/composites/StructuredData/sdNews/makeNewsSchema.d.ts +12 -0
- package/dist/components/composites/StructuredData/sdNews/makeNewsSchema.js +11 -0
- package/dist/components/composites/StructuredData/sdWebsite/index.d.ts +8 -0
- package/dist/components/composites/StructuredData/sdWebsite/index.js +11 -0
- package/dist/components/composites/StructuredData/sdWebsite/makeWebPageSchema.d.ts +9 -0
- package/dist/components/composites/StructuredData/sdWebsite/makeWebPageSchema.js +9 -0
- package/dist/components/composites/StructuredData/siteMetadata.d.ts +9 -0
- package/dist/components/composites/StructuredData/siteMetadata.js +12 -0
- package/dist/components/elements/Alerts/Alert.stories.d.ts +9 -0
- package/dist/components/elements/Alerts/Alert.stories.js +41 -0
- package/dist/components/elements/Alerts/Alerts.stories.d.ts +6 -0
- package/dist/components/elements/Alerts/Alerts.stories.js +12 -0
- package/dist/components/elements/Alerts/Alerts.test.d.ts +1 -0
- package/dist/components/elements/Alerts/Alerts.test.js +61 -0
- package/dist/components/elements/Alerts/index.d.ts +14 -0
- package/dist/components/elements/Alerts/index.js +64 -0
- package/dist/components/elements/ArrowLink/ArrowLink.stories.d.ts +6 -0
- package/dist/components/elements/ArrowLink/ArrowLink.stories.js +12 -0
- package/dist/components/elements/ArrowLink/ArrowLink.test.d.ts +1 -0
- package/dist/components/elements/ArrowLink/ArrowLink.test.js +34 -0
- package/dist/components/elements/ArrowLink/index.d.ts +7 -0
- package/dist/components/elements/ArrowLink/index.js +39 -0
- package/dist/components/elements/BrandingBar/BrandingBar.stories.d.ts +6 -0
- package/dist/components/elements/BrandingBar/BrandingBar.stories.js +11 -0
- package/dist/components/elements/BrandingBar/index.d.ts +2 -0
- package/dist/components/elements/BrandingBar/index.js +52 -0
- package/dist/components/elements/Button/Button.stories.d.ts +15 -0
- package/dist/components/elements/Button/Button.stories.js +88 -0
- package/dist/components/elements/Button/Button.test.d.ts +1 -0
- package/dist/components/elements/Button/Button.test.js +39 -0
- package/dist/components/elements/Button/index.d.ts +49 -0
- package/dist/components/elements/Button/index.js +138 -0
- package/dist/components/elements/Dropdown/Dropdown.stories.d.ts +7 -0
- package/dist/components/elements/Dropdown/Dropdown.stories.js +20 -0
- package/dist/components/elements/Dropdown/index.d.ts +24 -0
- package/dist/components/elements/Dropdown/index.js +87 -0
- package/dist/components/elements/Fields/AutoComplete/AutoComplete.stories.d.ts +6 -0
- package/dist/components/elements/Fields/AutoComplete/AutoComplete.stories.js +60 -0
- package/dist/components/elements/Fields/AutoComplete/index.d.ts +11 -0
- package/dist/components/elements/Fields/AutoComplete/index.js +26 -0
- package/dist/components/elements/Fields/Checkbox/Checkbox.stories.d.ts +6 -0
- package/dist/components/elements/Fields/Checkbox/Checkbox.stories.js +17 -0
- package/dist/components/elements/Fields/Checkbox/index.d.ts +8 -0
- package/dist/components/elements/Fields/Checkbox/index.js +22 -0
- package/dist/components/elements/Fields/CheckboxGroup/CheckboxGroup.stories.d.ts +7 -0
- package/dist/components/elements/Fields/CheckboxGroup/CheckboxGroup.stories.js +26 -0
- package/dist/components/elements/Fields/CheckboxGroup/index.d.ts +16 -0
- package/dist/components/elements/Fields/CheckboxGroup/index.js +49 -0
- package/dist/components/elements/Fields/DatePicker/DatePicker.stories.d.ts +8 -0
- package/dist/components/elements/Fields/DatePicker/DatePicker.stories.js +31 -0
- package/dist/components/elements/Fields/DatePicker/index.d.ts +20 -0
- package/dist/components/elements/Fields/DatePicker/index.js +48 -0
- package/dist/components/elements/Fields/MonthPicker/MonthPicker.stories.d.ts +7 -0
- package/dist/components/elements/Fields/MonthPicker/MonthPicker.stories.js +20 -0
- package/dist/components/elements/Fields/MonthPicker/index.d.ts +13 -0
- package/dist/components/elements/Fields/MonthPicker/index.js +24 -0
- package/dist/components/elements/Fields/Radio/Radio.stories.d.ts +6 -0
- package/dist/components/elements/Fields/Radio/Radio.stories.js +17 -0
- package/dist/components/elements/Fields/Radio/index.d.ts +8 -0
- package/dist/components/elements/Fields/Radio/index.js +22 -0
- package/dist/components/elements/Fields/RadioGroup/RadioGroup.stories.d.ts +6 -0
- package/dist/components/elements/Fields/RadioGroup/RadioGroup.stories.js +23 -0
- package/dist/components/elements/Fields/RadioGroup/index.d.ts +14 -0
- package/dist/components/elements/Fields/RadioGroup/index.js +28 -0
- package/dist/components/elements/Fields/Select/Select.stories.d.ts +8 -0
- package/dist/components/elements/Fields/Select/Select.stories.js +39 -0
- package/dist/components/elements/Fields/Select/index.d.ts +18 -0
- package/dist/components/elements/Fields/Select/index.js +178 -0
- package/dist/components/elements/Fields/TextInput/TextInput.stories.d.ts +9 -0
- package/dist/components/elements/Fields/TextInput/TextInput.stories.js +35 -0
- package/dist/components/elements/Fields/TextInput/index.d.ts +45 -0
- package/dist/components/elements/Fields/TextInput/index.js +119 -0
- package/dist/components/elements/Fields/option.d.ts +16 -0
- package/dist/components/elements/Fields/option.js +3 -0
- package/dist/components/elements/Group/index.d.ts +22 -0
- package/dist/components/elements/Group/index.js +69 -0
- package/dist/components/elements/Icon/Icon.stories.d.ts +7 -0
- package/dist/components/elements/Icon/Icon.stories.js +29 -0
- package/dist/components/elements/Icon/Icon.test.d.ts +1 -0
- package/dist/components/elements/Icon/Icon.test.js +26 -0
- package/dist/components/elements/Icon/index.d.ts +10 -0
- package/dist/components/elements/Icon/index.js +34 -0
- package/dist/components/elements/Link/Link.stories.d.ts +6 -0
- package/dist/components/elements/Link/Link.stories.js +21 -0
- package/dist/components/elements/Link/Link.test.d.ts +1 -0
- package/dist/components/elements/Link/Link.test.js +58 -0
- package/dist/components/elements/Link/index.d.ts +14 -0
- package/dist/components/elements/Link/index.js +41 -0
- package/dist/components/elements/List/List.stories.d.ts +10 -0
- package/dist/components/elements/List/List.stories.js +37 -0
- package/dist/components/elements/List/List.test.d.ts +1 -0
- package/dist/components/elements/List/List.test.js +24 -0
- package/dist/components/elements/List/index.d.ts +27 -0
- package/dist/components/elements/List/index.js +103 -0
- package/dist/components/elements/ListBox/Listbox.stories.d.ts +6 -0
- package/dist/components/elements/ListBox/Listbox.stories.js +17 -0
- package/dist/components/elements/ListBox/index.d.ts +33 -0
- package/dist/components/elements/ListBox/index.js +51 -0
- package/dist/components/elements/Markdown/Markdown.stories.d.ts +10 -0
- package/dist/components/elements/Markdown/Markdown.stories.js +97 -0
- package/dist/components/elements/Markdown/Markdown.test.d.ts +1 -0
- package/dist/components/elements/Markdown/Markdown.test.js +91 -0
- package/dist/components/elements/Markdown/index.d.ts +21 -0
- package/dist/components/elements/Markdown/index.js +75 -0
- package/dist/components/elements/Pill/Pill.stories.d.ts +8 -0
- package/dist/components/elements/Pill/Pill.stories.js +40 -0
- package/dist/components/elements/Pill/Pill.test.d.ts +1 -0
- package/dist/components/elements/Pill/Pill.test.js +18 -0
- package/dist/components/elements/Pill/index.d.ts +21 -0
- package/dist/components/elements/Pill/index.js +117 -0
- package/dist/components/elements/Spinner/Spinner.stories.d.ts +7 -0
- package/dist/components/elements/Spinner/Spinner.stories.js +26 -0
- package/dist/components/elements/Spinner/Spinner.test.d.ts +1 -0
- package/dist/components/elements/Spinner/Spinner.test.js +9 -0
- package/dist/components/elements/Spinner/index.d.ts +14 -0
- package/dist/components/elements/Spinner/index.js +49 -0
- package/dist/components/elements/TabList/TabList.stories.d.ts +6 -0
- package/dist/components/elements/TabList/TabList.stories.js +12 -0
- package/dist/components/elements/TabList/TabList.test.d.ts +1 -0
- package/dist/components/elements/TabList/TabList.test.js +19 -0
- package/dist/components/elements/TabList/example.d.ts +7 -0
- package/dist/components/elements/TabList/example.js +36 -0
- package/dist/components/elements/TabList/index.d.ts +10 -0
- package/dist/components/elements/TabList/index.js +30 -0
- package/dist/components/elements/Table/Table.stories.d.ts +10 -0
- package/dist/components/elements/Table/Table.stories.js +96 -0
- package/dist/components/elements/Table/Table.test.d.ts +1 -0
- package/dist/components/elements/Table/Table.test.js +36 -0
- package/dist/components/elements/Table/index.d.ts +30 -0
- package/dist/components/elements/Table/index.js +100 -0
- package/dist/components/elements/layout/Box.d.ts +9 -0
- package/dist/components/elements/layout/Box.js +3 -0
- package/dist/components/elements/layout/Box.stories.d.ts +6 -0
- package/dist/components/elements/layout/Box.stories.js +12 -0
- package/dist/components/elements/layout/Column.d.ts +8 -0
- package/dist/components/elements/layout/Column.js +19 -0
- package/dist/components/elements/layout/Flex.stories.d.ts +10 -0
- package/dist/components/elements/layout/Flex.stories.js +26 -0
- package/dist/components/elements/layout/Flex.test.d.ts +1 -0
- package/dist/components/elements/layout/Flex.test.js +34 -0
- package/dist/components/elements/layout/Row.d.ts +20 -0
- package/dist/components/elements/layout/Row.js +52 -0
- package/dist/components/elements/text/Heading/Heading.stories.d.ts +8 -0
- package/dist/components/elements/text/Heading/Heading.stories.js +35 -0
- package/dist/components/elements/text/Heading/Heading.test.d.ts +1 -0
- package/dist/components/elements/text/Heading/Heading.test.js +51 -0
- package/dist/components/elements/text/Heading/index.d.ts +20 -0
- package/dist/components/elements/text/Heading/index.js +62 -0
- package/dist/components/elements/text/Inline/Inline.stories.d.ts +6 -0
- package/dist/components/elements/text/Inline/Inline.stories.js +12 -0
- package/dist/components/elements/text/Inline/index.d.ts +6 -0
- package/dist/components/elements/text/Inline/index.js +21 -0
- package/dist/components/elements/text/Label/Label.stories.d.ts +6 -0
- package/dist/components/elements/text/Label/Label.stories.js +20 -0
- package/dist/components/elements/text/Label/Label.test.d.ts +1 -0
- package/dist/components/elements/text/Label/Label.test.js +56 -0
- package/dist/components/elements/text/Label/index.d.ts +20 -0
- package/dist/components/elements/text/Label/index.js +38 -0
- package/dist/components/elements/text/Paragraph/Paragraph.stories.d.ts +6 -0
- package/dist/components/elements/text/Paragraph/Paragraph.stories.js +25 -0
- package/dist/components/elements/text/Paragraph/Paragraph.test.d.ts +1 -0
- package/dist/components/elements/text/Paragraph/Paragraph.test.js +9 -0
- package/dist/components/elements/text/Paragraph/index.d.ts +14 -0
- package/dist/components/elements/text/Paragraph/index.js +29 -0
- package/dist/components/elements/text/ReadMore/ReadMore.stories.d.ts +8 -0
- package/dist/components/elements/text/ReadMore/ReadMore.stories.js +26 -0
- package/dist/components/elements/text/ReadMore/index.d.ts +12 -0
- package/dist/components/elements/text/ReadMore/index.js +71 -0
- package/dist/components/providers/alerts.d.ts +41 -0
- package/dist/components/providers/alerts.js +133 -0
- package/dist/components/providers/componentConfig.d.ts +25 -0
- package/dist/components/providers/componentConfig.js +37 -0
- package/dist/components/providers/dialogs.d.ts +9 -0
- package/dist/components/providers/dialogs.js +32 -0
- package/dist/components/providers/env.d.ts +14 -0
- package/dist/components/providers/env.js +25 -0
- package/dist/components/providers/media.d.ts +8 -0
- package/dist/components/providers/media.js +43 -0
- package/dist/components/providers/menu.d.ts +46 -0
- package/dist/components/providers/menu.js +304 -0
- package/dist/components/providers/snackBar.d.ts +23 -0
- package/dist/components/providers/snackBar.js +53 -0
- package/dist/components/providers/ui.d.ts +18 -0
- package/dist/components/providers/ui.js +16 -0
- package/dist/components/providers/uniqueIds.d.ts +3 -0
- package/dist/components/providers/uniqueIds.js +23 -0
- package/dist/components/providers/uniqueIds.test.d.ts +1 -0
- package/dist/components/providers/uniqueIds.test.js +26 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.js +51 -0
- package/dist/theme/Color.stories.d.ts +5 -0
- package/dist/theme/Color.stories.js +63 -0
- package/dist/theme/GlobalStyles.d.ts +1 -0
- package/dist/theme/GlobalStyles.js +167 -0
- package/dist/theme/Typography.stories.d.ts +5 -0
- package/dist/theme/Typography.stories.js +44 -0
- package/dist/theme/colors.d.ts +51 -0
- package/dist/theme/colors.js +97 -0
- package/dist/theme/custom.d.ts +11 -0
- package/dist/theme/custom.js +13 -0
- package/dist/theme/index.d.ts +185 -0
- package/dist/theme/index.js +25 -0
- package/dist/theme/spacing.d.ts +0 -0
- package/dist/theme/spacing.js +1 -0
- package/dist/theme/typography.d.ts +100 -0
- package/dist/theme/typography.js +206 -0
- package/dist/utils/hooks/useCheckMidClick.d.ts +8 -0
- package/dist/utils/hooks/useCheckMidClick.js +17 -0
- package/dist/utils/hooks/useCheckMidKeyPress.d.ts +9 -0
- package/dist/utils/hooks/useCheckMidKeyPress.js +23 -0
- package/dist/utils/hooks/useHover.d.ts +7 -0
- package/dist/utils/hooks/useHover.js +12 -0
- package/dist/utils/hooks/useStorage.d.ts +14 -0
- package/dist/utils/hooks/useStorage.js +37 -0
- package/dist/utils/misc.d.ts +14 -0
- package/dist/utils/misc.js +19 -0
- package/dist/utils/sortByKey.d.ts +12 -0
- package/dist/utils/sortByKey.js +20 -0
- package/dist/utils/test.d.ts +2 -0
- package/dist/utils/test.js +9 -0
- package/package.json +98 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { fireEvent } from '@testing-library/react';
|
|
3
|
+
import { vi } from 'vitest';
|
|
4
|
+
import { render } from '../../../utils/test';
|
|
5
|
+
import { Button } from '.';
|
|
6
|
+
const MockPrimaryIcon = () => _jsx("div", { children: "Mock Primary Icon" });
|
|
7
|
+
const MockLeftIcon = () => _jsx("div", { children: "Mock Left Icon" });
|
|
8
|
+
const MockRightIcon = () => _jsx("div", { children: "Mock Right Icon" });
|
|
9
|
+
describe('Button', () => {
|
|
10
|
+
const mockClickHandler = vi.fn();
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
vi.resetAllMocks();
|
|
13
|
+
});
|
|
14
|
+
it('renders without throwing an error', () => {
|
|
15
|
+
const { getByText } = render(_jsx(Button, { children: "Foo" }));
|
|
16
|
+
expect(getByText('Foo')).toBeInTheDocument();
|
|
17
|
+
});
|
|
18
|
+
it('renders icon component passed to it', () => {
|
|
19
|
+
const { getByText } = render(_jsxs(_Fragment, { children: [_jsx(Button, Object.assign({ leftIcon: MockLeftIcon }, { children: "Click Me" })), _jsx(Button, Object.assign({ primaryIcon: MockPrimaryIcon }, { children: "Click Me" })), _jsx(Button, Object.assign({ rightIcon: MockRightIcon }, { children: "Click Me" }))] }));
|
|
20
|
+
expect(getByText('Mock Primary Icon')).toBeDefined();
|
|
21
|
+
expect(getByText('Mock Left Icon')).toBeDefined();
|
|
22
|
+
expect(getByText('Mock Right Icon')).toBeDefined();
|
|
23
|
+
});
|
|
24
|
+
it('responds to click handlers', () => {
|
|
25
|
+
const { getByRole } = render(_jsx(Button, { onClick: mockClickHandler }));
|
|
26
|
+
fireEvent.click(getByRole('button'));
|
|
27
|
+
expect(mockClickHandler).toHaveBeenCalledTimes(1);
|
|
28
|
+
});
|
|
29
|
+
it('does not respond to click handler when disabled', () => {
|
|
30
|
+
const { getByRole } = render(_jsx(Button, { onClick: mockClickHandler, disabled: true }));
|
|
31
|
+
fireEvent.click(getByRole('button'));
|
|
32
|
+
expect(mockClickHandler).not.toHaveBeenCalled();
|
|
33
|
+
});
|
|
34
|
+
it('does not respond to click handler when loading', () => {
|
|
35
|
+
const { getByRole } = render(_jsx(Button, { onClick: mockClickHandler, loading: true }));
|
|
36
|
+
fireEvent.click(getByRole('button'));
|
|
37
|
+
expect(mockClickHandler).not.toHaveBeenCalled();
|
|
38
|
+
});
|
|
39
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyledElementProps } from '../../../theme';
|
|
3
|
+
import { COLOR } from '../../../theme/colors';
|
|
4
|
+
export declare enum BUTTON_SIZE {
|
|
5
|
+
SM = "sm",
|
|
6
|
+
MD = "md",
|
|
7
|
+
LG = "lg"
|
|
8
|
+
}
|
|
9
|
+
export declare enum BUTTON_TYPE {
|
|
10
|
+
DEFAULT = "default",
|
|
11
|
+
TEXT = "text",
|
|
12
|
+
OUTLINE = "outline"
|
|
13
|
+
}
|
|
14
|
+
export type ButtonProps = StyledElementProps<HTMLButtonElement, {
|
|
15
|
+
size?: BUTTON_SIZE;
|
|
16
|
+
type?: BUTTON_TYPE;
|
|
17
|
+
color?: COLOR;
|
|
18
|
+
textColor?: COLOR;
|
|
19
|
+
customColor?: string;
|
|
20
|
+
primaryIcon?: React.FC<any>;
|
|
21
|
+
leftIcon?: React.FC<any>;
|
|
22
|
+
rightIcon?: React.FC<any>;
|
|
23
|
+
accessibleLabel?: string;
|
|
24
|
+
loading?: boolean;
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
disableFocusStyles?: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const Button: React.ForwardRefExoticComponent<{
|
|
29
|
+
sx?: import("../../../theme").StylesProp | undefined;
|
|
30
|
+
children?: React.ReactNode;
|
|
31
|
+
} & Omit<React.HTMLAttributes<HTMLButtonElement>, "children" | "onChange"> & {
|
|
32
|
+
size?: BUTTON_SIZE | undefined;
|
|
33
|
+
type?: BUTTON_TYPE | undefined;
|
|
34
|
+
color?: COLOR | undefined;
|
|
35
|
+
textColor?: COLOR | undefined;
|
|
36
|
+
customColor?: string | undefined;
|
|
37
|
+
primaryIcon?: React.FC<any> | undefined;
|
|
38
|
+
leftIcon?: React.FC<any> | undefined;
|
|
39
|
+
rightIcon?: React.FC<any> | undefined;
|
|
40
|
+
accessibleLabel?: string | undefined;
|
|
41
|
+
loading?: boolean | undefined;
|
|
42
|
+
disabled?: boolean | undefined;
|
|
43
|
+
disableFocusStyles?: boolean | undefined;
|
|
44
|
+
} & {
|
|
45
|
+
htmlFor?: string | undefined;
|
|
46
|
+
} & React.RefAttributes<HTMLButtonElement>>;
|
|
47
|
+
type LinkButtonProps = Omit<ButtonProps, 'type' | 'color' | 'textColor'>;
|
|
48
|
+
export declare const LinkButton: React.FC<LinkButtonProps>;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "theme-ui/jsx-runtime";
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { useTheme } from '../../../theme';
|
|
15
|
+
import { COLOR } from '../../../theme/colors';
|
|
16
|
+
import { TYPOGRAPHY_TYPE, getIconSize, getTypographyStyles, } from '../../../theme/typography';
|
|
17
|
+
import { Icon } from '../Icon';
|
|
18
|
+
import { useEnvironment } from '../../providers/env';
|
|
19
|
+
import { SPINNER_SIZE, Spinner } from '../Spinner';
|
|
20
|
+
export var BUTTON_SIZE;
|
|
21
|
+
(function (BUTTON_SIZE) {
|
|
22
|
+
BUTTON_SIZE["SM"] = "sm";
|
|
23
|
+
BUTTON_SIZE["MD"] = "md";
|
|
24
|
+
BUTTON_SIZE["LG"] = "lg";
|
|
25
|
+
})(BUTTON_SIZE || (BUTTON_SIZE = {}));
|
|
26
|
+
const typographyMap = {
|
|
27
|
+
[BUTTON_SIZE.SM]: TYPOGRAPHY_TYPE.CONTROL_SMALL,
|
|
28
|
+
[BUTTON_SIZE.MD]: TYPOGRAPHY_TYPE.CONTROL_MEDIUM,
|
|
29
|
+
[BUTTON_SIZE.LG]: TYPOGRAPHY_TYPE.CONTROL_LARGE,
|
|
30
|
+
};
|
|
31
|
+
const defaultPaddingX = {
|
|
32
|
+
[BUTTON_SIZE.SM]: 2,
|
|
33
|
+
[BUTTON_SIZE.MD]: 3,
|
|
34
|
+
[BUTTON_SIZE.LG]: 4,
|
|
35
|
+
};
|
|
36
|
+
const defaultHeight = {
|
|
37
|
+
[BUTTON_SIZE.SM]: '2rem',
|
|
38
|
+
[BUTTON_SIZE.MD]: '2.5rem',
|
|
39
|
+
[BUTTON_SIZE.LG]: '3rem',
|
|
40
|
+
};
|
|
41
|
+
const iconMargin = {
|
|
42
|
+
[BUTTON_SIZE.SM]: 1,
|
|
43
|
+
[BUTTON_SIZE.MD]: 2,
|
|
44
|
+
[BUTTON_SIZE.LG]: 2,
|
|
45
|
+
};
|
|
46
|
+
export var BUTTON_TYPE;
|
|
47
|
+
(function (BUTTON_TYPE) {
|
|
48
|
+
BUTTON_TYPE["DEFAULT"] = "default";
|
|
49
|
+
BUTTON_TYPE["TEXT"] = "text";
|
|
50
|
+
BUTTON_TYPE["OUTLINE"] = "outline";
|
|
51
|
+
})(BUTTON_TYPE || (BUTTON_TYPE = {}));
|
|
52
|
+
export const Button = React.forwardRef((_a, ref) => {
|
|
53
|
+
var { size: sizeParam, type: typeParam, color, customColor, textColor: textColorParam, primaryIcon, leftIcon, rightIcon, disabled: disabledParam, children, sx, loading, disableFocusStyles } = _a, rest = __rest(_a, ["size", "type", "color", "customColor", "textColor", "primaryIcon", "leftIcon", "rightIcon", "disabled", "children", "sx", "loading", "disableFocusStyles"]);
|
|
54
|
+
const disabled = disabledParam || loading;
|
|
55
|
+
const theme = useTheme();
|
|
56
|
+
const { flagInDevelopment } = useEnvironment();
|
|
57
|
+
let bg = COLOR.PRIMARY;
|
|
58
|
+
let borderColor = COLOR.TRANSPARENT;
|
|
59
|
+
let cursor = 'pointer';
|
|
60
|
+
let textColor = COLOR.BACKGROUND;
|
|
61
|
+
let hoverShadow = theme.boxShadow.NORMAL;
|
|
62
|
+
let hoverDecoration = undefined;
|
|
63
|
+
let hoverTransform = 'scale(1.03)';
|
|
64
|
+
const isTextButton = typeParam === BUTTON_TYPE.TEXT;
|
|
65
|
+
const isIconButton = primaryIcon;
|
|
66
|
+
const type = typeParam || BUTTON_TYPE.DEFAULT;
|
|
67
|
+
const size = sizeParam || BUTTON_SIZE.MD;
|
|
68
|
+
const paddingX = isIconButton || isTextButton ? 0 : defaultPaddingX[size];
|
|
69
|
+
const height = isTextButton ? undefined : defaultHeight[size];
|
|
70
|
+
const width = primaryIcon ? height : undefined;
|
|
71
|
+
if (isIconButton && !rest['aria-label']) {
|
|
72
|
+
flagInDevelopment('Icon buttons should include aria-label prop for accessibility');
|
|
73
|
+
}
|
|
74
|
+
if (isIconButton) {
|
|
75
|
+
hoverTransform = 'scale(1.05)';
|
|
76
|
+
}
|
|
77
|
+
if (type === BUTTON_TYPE.DEFAULT) {
|
|
78
|
+
bg = color || COLOR.SECONDARY;
|
|
79
|
+
textColor = COLOR.BLACK;
|
|
80
|
+
}
|
|
81
|
+
if (type === BUTTON_TYPE.TEXT) {
|
|
82
|
+
bg = COLOR.TRANSPARENT;
|
|
83
|
+
textColor = color || COLOR.PRIMARY;
|
|
84
|
+
hoverShadow = undefined;
|
|
85
|
+
hoverDecoration = 'underline';
|
|
86
|
+
}
|
|
87
|
+
if (type === BUTTON_TYPE.OUTLINE) {
|
|
88
|
+
bg = COLOR.BACKGROUND;
|
|
89
|
+
textColor = color || COLOR.TEXT;
|
|
90
|
+
borderColor = textColor;
|
|
91
|
+
}
|
|
92
|
+
if (textColorParam) {
|
|
93
|
+
textColor = textColorParam;
|
|
94
|
+
}
|
|
95
|
+
if (disabled) {
|
|
96
|
+
cursor = 'not-allowed';
|
|
97
|
+
if (bg === COLOR.BACKGROUND || bg === COLOR.TRANSPARENT) {
|
|
98
|
+
textColor = COLOR.GRAY;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
bg = COLOR.GRAY;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const typography = typographyMap[size];
|
|
105
|
+
const typographyStyles = getTypographyStyles(typography);
|
|
106
|
+
let body = children;
|
|
107
|
+
if (primaryIcon) {
|
|
108
|
+
body = (_jsx(Icon, { icon: primaryIcon, size: getIconSize(typographyStyles.fontSize), color: textColor }));
|
|
109
|
+
}
|
|
110
|
+
if (loading) {
|
|
111
|
+
body = (_jsxs("div", Object.assign({ sx: {
|
|
112
|
+
position: 'relative',
|
|
113
|
+
display: 'flex',
|
|
114
|
+
alignItems: 'center',
|
|
115
|
+
justifyContent: 'center',
|
|
116
|
+
} }, { children: [_jsx(Spinner, { size: SPINNER_SIZE.SM, color: textColor, sx: { position: 'absolute' } }), _jsx("div", Object.assign({ sx: { visibility: 'hidden' } }, { children: body }))] })));
|
|
117
|
+
}
|
|
118
|
+
const hoverStyles = !disabled
|
|
119
|
+
? {
|
|
120
|
+
boxShadow: hoverShadow,
|
|
121
|
+
transform: hoverTransform,
|
|
122
|
+
textDecoration: hoverDecoration,
|
|
123
|
+
}
|
|
124
|
+
: undefined;
|
|
125
|
+
return (_jsxs("button", Object.assign({ ref: ref, tabIndex: disabled ? -1 : 0, disabled: disabled, css: {
|
|
126
|
+
backgroundColor: customColor,
|
|
127
|
+
}, sx: Object.assign(Object.assign({ cursor, bg: customColor ? undefined : bg, color: textColor, px: paddingX, width: width, height: height, border: 'solid 1px', borderRadius: '4px', borderColor, display: 'flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'center', ':hover': !disableFocusStyles ? hoverStyles : {}, ':focus': !disableFocusStyles ? hoverStyles : {} }, typographyStyles), sx) }, rest, { children: [leftIcon && (_jsx(Icon, { icon: leftIcon, size: typographyStyles.fontSize, sx: { mr: iconMargin[size] }, color: textColor })), _jsx("div", Object.assign({ css: {
|
|
128
|
+
flexGrow: 1,
|
|
129
|
+
justifyContent: 'flex-start',
|
|
130
|
+
textOverflow: 'ellipsis',
|
|
131
|
+
whiteSpace: 'nowrap',
|
|
132
|
+
overflow: 'hidden',
|
|
133
|
+
textAlign: 'start',
|
|
134
|
+
} }, { children: body })), rightIcon && (_jsx(Icon, { icon: rightIcon, size: typographyStyles.fontSize, sx: { ml: iconMargin[size] }, color: textColor }))] })));
|
|
135
|
+
});
|
|
136
|
+
export const LinkButton = (props) => {
|
|
137
|
+
return (_jsx(Button, Object.assign({}, props, { color: COLOR.ND_BLUE_BRIGHT, textColor: COLOR.WHITE })));
|
|
138
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Dropdown } from '.';
|
|
3
|
+
declare const meta: Meta<typeof Dropdown>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Dropdown>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const MatchWidth: Story;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
|
|
3
|
+
import { Button } from '../../elements/Button';
|
|
4
|
+
import { Box } from '../../elements/layout/Box';
|
|
5
|
+
import { Dropdown } from '.';
|
|
6
|
+
import { Paragraph } from '../text/Paragraph';
|
|
7
|
+
const meta = {
|
|
8
|
+
title: 'Elements/Dropdown',
|
|
9
|
+
component: Dropdown,
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
};
|
|
12
|
+
export default meta;
|
|
13
|
+
const lorem = `Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
14
|
+
Nullam id nunc vitae magna aliquam aliquet. In hac habitasse platea dictumst.`;
|
|
15
|
+
export const Default = {
|
|
16
|
+
render: () => (_jsx(Box, Object.assign({ sx: { width: '200px', height: '200px' } }, { children: _jsx(Dropdown, { renderAnchor: ({ anchorProps }) => (_jsx(Button, Object.assign({}, anchorProps, { rightIcon: ArrowDropDownIcon }, { children: "Open Dropdown" }))), renderDropdown: () => _jsx(Paragraph, { children: lorem }) }) }))),
|
|
17
|
+
};
|
|
18
|
+
export const MatchWidth = {
|
|
19
|
+
render: () => (_jsx(Box, Object.assign({ sx: { width: '200px', height: '200px' } }, { children: _jsx(Dropdown, { matchWidth: true, renderAnchor: ({ anchorProps }) => (_jsx(Button, Object.assign({}, anchorProps, { rightIcon: ArrowDropDownIcon }, { children: "Open Dropdown" }))), renderDropdown: () => _jsx(Paragraph, { children: lorem }) }) }))),
|
|
20
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyledElementProps } from '../../../theme';
|
|
3
|
+
type AnchorProps = Omit<React.HTMLAttributes<HTMLButtonElement>, 'color'>;
|
|
4
|
+
type AnchorRenderFn = (params: {
|
|
5
|
+
anchorProps: AnchorProps;
|
|
6
|
+
isOpen: boolean;
|
|
7
|
+
setIsOpen: (isOpen: boolean) => void;
|
|
8
|
+
}) => React.ReactNode;
|
|
9
|
+
type DropdownRenderFn = (params: {
|
|
10
|
+
styles: React.CSSProperties;
|
|
11
|
+
ref: React.Ref<any>;
|
|
12
|
+
isOpen: boolean;
|
|
13
|
+
setIsOpen: (isOpen: boolean) => void;
|
|
14
|
+
id: string;
|
|
15
|
+
}) => React.ReactNode;
|
|
16
|
+
type DropdownProps = StyledElementProps<HTMLDivElement, {
|
|
17
|
+
renderAnchor: AnchorRenderFn;
|
|
18
|
+
renderDropdown: DropdownRenderFn;
|
|
19
|
+
shouldRenderDropdownContainer?: boolean;
|
|
20
|
+
matchWidth?: boolean;
|
|
21
|
+
}>;
|
|
22
|
+
export declare const Overlay: React.FC<StyledElementProps<HTMLDivElement>>;
|
|
23
|
+
export declare const Dropdown: React.FC<DropdownProps>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
14
|
+
import { useTheme } from '../../../theme';
|
|
15
|
+
import { autoPlacement, offset, size, useFloating } from '@floating-ui/react';
|
|
16
|
+
import { Box } from '../../elements/layout/Box';
|
|
17
|
+
import { useUniqueId } from '../../providers/uniqueIds';
|
|
18
|
+
import { Z_INDEX } from '../../../theme/custom';
|
|
19
|
+
import { COLOR } from '../../../theme/colors';
|
|
20
|
+
export const Overlay = (props) => (_jsx(Box, Object.assign({}, props, { sx: {
|
|
21
|
+
position: 'fixed',
|
|
22
|
+
top: 0,
|
|
23
|
+
left: 0,
|
|
24
|
+
width: '100vw',
|
|
25
|
+
height: '100vh',
|
|
26
|
+
zIndex: Z_INDEX.ELEVATED,
|
|
27
|
+
} })));
|
|
28
|
+
export const Dropdown = (_a) => {
|
|
29
|
+
var { renderAnchor, renderDropdown, matchWidth, shouldRenderDropdownContainer = true } = _a, rest = __rest(_a, ["renderAnchor", "renderDropdown", "matchWidth", "shouldRenderDropdownContainer"]);
|
|
30
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
31
|
+
const [dropdownMinWidth, setDropdownMinWidth] = useState('0px');
|
|
32
|
+
const [dropdownMaxWidth, setDropdownMaxWidth] = useState();
|
|
33
|
+
const dropdownId = useUniqueId('dropdown');
|
|
34
|
+
const anchorId = useUniqueId('dropdown-anchor');
|
|
35
|
+
const { boxShadow } = useTheme();
|
|
36
|
+
const { refs, floatingStyles } = useFloating({
|
|
37
|
+
placement: 'bottom-start',
|
|
38
|
+
middleware: [
|
|
39
|
+
offset(2),
|
|
40
|
+
size({
|
|
41
|
+
apply({ rects }) {
|
|
42
|
+
setDropdownMinWidth(`${rects.reference.width}px`);
|
|
43
|
+
if (matchWidth) {
|
|
44
|
+
setDropdownMaxWidth(`${rects.reference.width}px`);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
autoPlacement({
|
|
49
|
+
allowedPlacements: [
|
|
50
|
+
'top-start',
|
|
51
|
+
'bottom-start',
|
|
52
|
+
'top-end',
|
|
53
|
+
'bottom-end',
|
|
54
|
+
],
|
|
55
|
+
}),
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
const dropdownBoxStyles = Object.assign(Object.assign({}, floatingStyles), { minWidth: dropdownMinWidth, maxWidth: dropdownMaxWidth, zIndex: Z_INDEX.DIALOG, backgroundColor: COLOR.WHITE, boxShadow: boxShadow.NORMAL });
|
|
59
|
+
const onClick = useCallback(() => {
|
|
60
|
+
setIsOpen(!isOpen);
|
|
61
|
+
}, [isOpen]);
|
|
62
|
+
const dropdownAnchorProps = useMemo(() => ({
|
|
63
|
+
id: anchorId,
|
|
64
|
+
'aria-haspopup': true,
|
|
65
|
+
'aria-expanded': isOpen,
|
|
66
|
+
'aria-owns': dropdownId,
|
|
67
|
+
ref: refs.setReference,
|
|
68
|
+
onClick,
|
|
69
|
+
}), [refs, onClick, anchorId, isOpen, dropdownId]);
|
|
70
|
+
return (_jsxs(Box, Object.assign({}, rest, { children: [renderAnchor({
|
|
71
|
+
anchorProps: dropdownAnchorProps,
|
|
72
|
+
isOpen,
|
|
73
|
+
setIsOpen,
|
|
74
|
+
}), isOpen && (_jsxs(_Fragment, { children: [shouldRenderDropdownContainer ? (_jsx(Box, Object.assign({ id: dropdownId, ref: refs.setFloating, style: dropdownBoxStyles }, { children: renderDropdown({
|
|
75
|
+
styles: dropdownBoxStyles,
|
|
76
|
+
ref: refs.setFloating,
|
|
77
|
+
setIsOpen,
|
|
78
|
+
isOpen,
|
|
79
|
+
id: dropdownId,
|
|
80
|
+
}) }))) : (renderDropdown({
|
|
81
|
+
styles: dropdownBoxStyles,
|
|
82
|
+
ref: refs.setFloating,
|
|
83
|
+
isOpen,
|
|
84
|
+
setIsOpen,
|
|
85
|
+
id: dropdownId,
|
|
86
|
+
})), _jsx(Overlay, { onClick: () => setIsOpen(false) })] }))] })));
|
|
87
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { AutoComplete } from '.';
|
|
3
|
+
import { Paragraph, PARAGRAPH_SIZE } from '../../text/Paragraph';
|
|
4
|
+
import { HEADING_SIZE, Heading } from '../../text/Heading';
|
|
5
|
+
import { Column } from '../../layout/Column';
|
|
6
|
+
import { Row } from '../../layout/Row';
|
|
7
|
+
const options = [
|
|
8
|
+
{
|
|
9
|
+
label: 'Cucumber',
|
|
10
|
+
value: 'Cucumber',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
label: 'Egg Plant',
|
|
14
|
+
value: 'Egg Plant',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
label: 'Napa',
|
|
18
|
+
value: 'Napa',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
label: 'Cabbage',
|
|
22
|
+
value: 'Cabbage',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: 'Broccoli',
|
|
26
|
+
value: 'Broccoli',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
label: 'Radish',
|
|
30
|
+
value: 'Radish',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
label: 'Cauliflower',
|
|
34
|
+
value: 'Cauliflower',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
label: 'Beet',
|
|
38
|
+
value: 'Beet',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Tomato',
|
|
42
|
+
value: 'Tomato',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: 'Zuchinni',
|
|
46
|
+
value: 'Zuchinni',
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
function onSelect() {
|
|
50
|
+
return console.log('clicked');
|
|
51
|
+
}
|
|
52
|
+
const meta = {
|
|
53
|
+
title: 'Elements/Fields/AutoComplete',
|
|
54
|
+
component: AutoComplete,
|
|
55
|
+
tags: ['autodocs'],
|
|
56
|
+
};
|
|
57
|
+
export default meta;
|
|
58
|
+
export const Default = {
|
|
59
|
+
render: () => (_jsx(_Fragment, { children: _jsx(Row, Object.assign({ justify: "space-between" }, { children: _jsxs(Column, { children: [_jsx(Heading, Object.assign({ size: HEADING_SIZE.LG }, { children: "Vegetables" })), _jsx("br", {}), _jsx(AutoComplete, { options: options, value: "cucumber", onSelect: onSelect }), _jsx("br", {}), _jsx(Paragraph, Object.assign({ size: PARAGRAPH_SIZE.LG }, { children: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ultrices venenatis purus at porta. Etiam congue sapien leo, sed malesuada justo commodo in. Nunc consequat, massa non cursus posuere, magna eros lacinia lectus, eget lobortis mi erat ut justo. Maecenas nisi mi, mollis sed ornare vitae, pharetra sed augue. Curabitur mollis orci risus, sed imperdiet nisi aliquet et. Ut non elit nec magna rhoncus maximus sit amet ut dui. Mauris sit amet eleifend lectus. Aliquam consectetur posuere libero eu ultricies. Etiam rutrum non orci nec vulputate. Sed vel accumsan diam. Cras aliquet eros eros, sit amet pharetra eros tincidunt ut. Vestibulum est erat, eleifend dapibus eros vel, elementum vehicula risus. Etiam blandit condimentum sodales. Donec non libero in orci aliquam egestas fringilla eget purus. Suspendisse pellentesque at ligula ut accumsan." }))] }) })) })),
|
|
60
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface Option {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
}
|
|
5
|
+
interface AutoCompleteProps {
|
|
6
|
+
value: string;
|
|
7
|
+
options: Option[];
|
|
8
|
+
onSelect: (option: string) => any;
|
|
9
|
+
}
|
|
10
|
+
export declare const AutoComplete: ({ value, options, onSelect, }: AutoCompleteProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export default AutoComplete;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { COLOR } from '../../../../theme/colors';
|
|
4
|
+
import { ListBox } from '../../ListBox';
|
|
5
|
+
import { TextInput } from '../../Fields/TextInput';
|
|
6
|
+
export const AutoComplete = ({ value, options, onSelect, }) => {
|
|
7
|
+
const [inputValue, setInputValue] = useState(value);
|
|
8
|
+
const [filteredOptions, setFilteredOptions] = useState(options);
|
|
9
|
+
const [showOptions, setShowOptions] = useState(false);
|
|
10
|
+
const handleChange = (value) => {
|
|
11
|
+
setInputValue(value);
|
|
12
|
+
const newFilteredOptions = options.filter((option) => option.label.toLowerCase().includes(value.toLowerCase()));
|
|
13
|
+
setFilteredOptions(newFilteredOptions);
|
|
14
|
+
setShowOptions(true);
|
|
15
|
+
};
|
|
16
|
+
const handleSelect = (selectedOption) => {
|
|
17
|
+
setShowOptions(false);
|
|
18
|
+
setInputValue(selectedOption.label);
|
|
19
|
+
onSelect(selectedOption.value);
|
|
20
|
+
};
|
|
21
|
+
return (_jsxs("div", { children: [_jsx(TextInput, { value: inputValue, onChange: handleChange }), showOptions && (_jsx(ListBox, { options: filteredOptions, selectOption: handleSelect, sx: {
|
|
22
|
+
bg: COLOR.PRIMARY,
|
|
23
|
+
marginTop: 2,
|
|
24
|
+
} }))] }));
|
|
25
|
+
};
|
|
26
|
+
export default AutoComplete;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Checkbox } from './index';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Row } from '../../layout/Row';
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Elements/Fields/Checkbox',
|
|
7
|
+
component: Checkbox,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
};
|
|
10
|
+
export default meta;
|
|
11
|
+
const StatefulCheckbox = (props) => {
|
|
12
|
+
const [checked, setChecked] = useState(false);
|
|
13
|
+
return _jsx(Checkbox, Object.assign({}, props, { checked: checked, onChange: setChecked }));
|
|
14
|
+
};
|
|
15
|
+
export const Default = {
|
|
16
|
+
render: () => (_jsx(Row, { children: _jsx(StatefulCheckbox, {}) })),
|
|
17
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyledElementProps } from '../../../../theme';
|
|
3
|
+
type CheckboxProps = StyledElementProps<HTMLInputElement, {
|
|
4
|
+
checked: boolean;
|
|
5
|
+
onChange: (value: boolean) => void;
|
|
6
|
+
}, string>;
|
|
7
|
+
export declare const Checkbox: React.FC<CheckboxProps>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "theme-ui/jsx-runtime";
|
|
13
|
+
import { useTheme } from '../../../../theme';
|
|
14
|
+
export const Checkbox = (_a) => {
|
|
15
|
+
var { checked, onChange, sx } = _a, rest = __rest(_a, ["checked", "onChange", "sx"]);
|
|
16
|
+
const theme = useTheme();
|
|
17
|
+
return (_jsx("input", Object.assign({ type: "checkbox", onChange: (e) => {
|
|
18
|
+
onChange(e.target.checked);
|
|
19
|
+
}, checked: checked, sx: Object.assign({ margin: '0px', height: '1.25rem', width: '1.25rem', cursor: 'pointer', ':hover': {
|
|
20
|
+
boxShadow: theme.boxShadow,
|
|
21
|
+
} }, sx) }, rest)));
|
|
22
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { CheckboxGroup } from './index';
|
|
3
|
+
declare const meta: Meta<typeof CheckboxGroup>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof CheckboxGroup>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Columns: Story;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { CheckboxGroup } from './index';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Row } from '../../layout/Row';
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Elements/Fields/CheckboxGroup',
|
|
7
|
+
component: CheckboxGroup,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
};
|
|
10
|
+
export default meta;
|
|
11
|
+
const options = [
|
|
12
|
+
{ value: 'orange', label: 'Orange' },
|
|
13
|
+
{ value: 'apple', label: 'Apple' },
|
|
14
|
+
{ value: 'strawberry', label: 'Strawberry' },
|
|
15
|
+
{ value: 'pineapple', label: 'Pineapple' },
|
|
16
|
+
];
|
|
17
|
+
const StatefulCheckboxGroup = (props) => {
|
|
18
|
+
const [checked, setChecked] = useState(new Set());
|
|
19
|
+
return (_jsx(CheckboxGroup, Object.assign({}, props, { checkedOptions: checked, options: options, onChange: setChecked })));
|
|
20
|
+
};
|
|
21
|
+
export const Default = {
|
|
22
|
+
render: () => (_jsx(Row, { children: _jsx(StatefulCheckboxGroup, {}) })),
|
|
23
|
+
};
|
|
24
|
+
export const Columns = {
|
|
25
|
+
render: () => (_jsx(Row, { children: _jsx(StatefulCheckboxGroup, { columns: 2 }) })),
|
|
26
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyledElementProps, StylesProp } from '../../../../theme';
|
|
3
|
+
import { Key } from '../option';
|
|
4
|
+
type Option = {
|
|
5
|
+
value: Key;
|
|
6
|
+
label: string;
|
|
7
|
+
};
|
|
8
|
+
type CheckboxGroupProps = StyledElementProps<HTMLDivElement, {
|
|
9
|
+
onChange: (value: Set<Key>) => void;
|
|
10
|
+
options: Option[];
|
|
11
|
+
checkedOptions?: Set<Key>;
|
|
12
|
+
columnStyles: StylesProp;
|
|
13
|
+
columns?: number;
|
|
14
|
+
}, string>;
|
|
15
|
+
export declare const CheckboxGroup: React.FC<CheckboxGroupProps>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { useMemo } from 'react';
|
|
14
|
+
import { Row } from '../../layout/Row';
|
|
15
|
+
import { Checkbox } from '../Checkbox';
|
|
16
|
+
import { Label } from '../../text/Label';
|
|
17
|
+
import { Group } from '../../Group';
|
|
18
|
+
import { GROUP_TYPE } from '../../Group';
|
|
19
|
+
import { Column } from '../../layout/Column';
|
|
20
|
+
import { TYPOGRAPHY_TYPE, getTypographyStyles, } from '../../../../theme/typography';
|
|
21
|
+
export const CheckboxGroup = (_a) => {
|
|
22
|
+
var { options, checkedOptions, columns: columnsProp, columnStyles, onChange } = _a, rest = __rest(_a, ["options", "checkedOptions", "columns", "columnStyles", "onChange"]);
|
|
23
|
+
const columns = columnsProp || 1;
|
|
24
|
+
const optionsByColumn = useMemo(() => {
|
|
25
|
+
const optionsByColumn = [];
|
|
26
|
+
for (let i = 0; i < options.length; i++) {
|
|
27
|
+
const maxPerColumn = Math.ceil(options.length / columns);
|
|
28
|
+
const columnIndex = Math.floor(i / maxPerColumn);
|
|
29
|
+
if (optionsByColumn[columnIndex] === undefined) {
|
|
30
|
+
optionsByColumn[columnIndex] = [];
|
|
31
|
+
}
|
|
32
|
+
optionsByColumn[columnIndex].push(options[i]);
|
|
33
|
+
}
|
|
34
|
+
return optionsByColumn;
|
|
35
|
+
}, [options, columns]);
|
|
36
|
+
return (_jsx(Row, Object.assign({}, rest, { children: optionsByColumn.map((options, index) => (_jsx(Column, Object.assign({ grow: 1, sx: Object.assign({ mr: 4 }, columnStyles) }, { children: options.map((option) => (_jsx(Group, Object.assign({ type: GROUP_TYPE.RAW }, { children: ({ labelTargetId }) => (_jsxs(Row, Object.assign({ sx: {
|
|
37
|
+
mb: 2,
|
|
38
|
+
alignItems: 'center',
|
|
39
|
+
} }, { children: [_jsx(Checkbox, { onChange: (checked) => {
|
|
40
|
+
const updatedSet = new Set(checkedOptions || []);
|
|
41
|
+
if (checked) {
|
|
42
|
+
updatedSet.add(option.value);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
updatedSet.delete(option.value);
|
|
46
|
+
}
|
|
47
|
+
onChange(updatedSet);
|
|
48
|
+
}, checked: !!(checkedOptions === null || checkedOptions === void 0 ? void 0 : checkedOptions.has(option.value)), id: labelTargetId, sx: { mr: 2 } }), _jsx(Label, Object.assign({ sx: Object.assign({ cursor: 'pointer' }, getTypographyStyles(TYPOGRAPHY_TYPE.CONDENSED_TEXT_MEDIUM)) }, { children: option.label }))] }))) }), option.value))) }), index))) })));
|
|
49
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { DatePicker } from '.';
|
|
3
|
+
declare const meta: Meta<typeof DatePicker>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof DatePicker>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Inline: Story;
|
|
8
|
+
export declare const HighlightedDates: Story;
|