@ndlib/component-library 1.0.21 → 1.0.22
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 +26 -8
- package/dist/assets/index-3cfb730f.js +1 -0
- package/dist/components/composites/Card/Card.stories.js +2 -0
- package/dist/components/composites/Card/index.js +4 -3
- package/dist/components/composites/CardV2/CardV2.module.css +74 -0
- package/dist/components/composites/CardV2/CardV2.stories.d.ts +19 -0
- package/dist/components/composites/CardV2/CardV2.stories.js +187 -0
- package/dist/components/composites/CardV2/CardV2.test.js +67 -0
- package/dist/components/composites/CardV2/index.d.ts +42 -0
- package/dist/components/composites/CardV2/index.js +97 -0
- package/dist/components/composites/DragDropList/DragDropList.stories.js +3 -1
- package/dist/components/composites/DropdownLinks/DropdownLinks.stories.js +2 -0
- package/dist/components/composites/DropdownLinks/index.d.ts +1 -1
- package/dist/components/composites/EmptyState/EmptyState.stories.js +2 -0
- package/dist/components/composites/EmptyState/index.js +1 -1
- package/dist/components/composites/Modal/Modal.stories.js +5 -2
- package/dist/components/composites/Modal/index.js +3 -2
- package/dist/components/composites/ModalV2/ModalV2.stories.d.ts +6 -0
- package/dist/components/composites/ModalV2/ModalV2.stories.js +41 -0
- package/dist/components/composites/ModalV2/ModalV2.test.js +37 -0
- package/dist/components/composites/ModalV2/index.d.ts +20 -0
- package/dist/components/composites/ModalV2/index.js +65 -0
- package/dist/components/composites/NavMenu/NavMenu.stories.js +2 -0
- package/dist/components/composites/NavMenu/index.js +1 -1
- package/dist/components/composites/Seo/seo.stories.js +2 -0
- package/dist/components/composites/SnackBar/SnackBar.stories.js +2 -0
- package/dist/components/composites/StructuredData/StructuredData.stories.js +2 -0
- package/dist/components/elements/Alerts/Alert.stories.js +2 -0
- package/dist/components/elements/Alerts/Alerts.stories.js +2 -0
- package/dist/components/elements/Alerts/index.js +2 -1
- package/dist/components/elements/ArrowLink/ArrowLink.stories.js +2 -0
- package/dist/components/elements/{Fields/AutoComplete → AutoComplete}/AutoComplete.stories.js +6 -4
- package/dist/components/elements/{Fields/AutoComplete → AutoComplete}/AutoComplete.test.js +1 -1
- package/dist/components/elements/{Fields/AutoComplete → AutoComplete}/index.js +3 -3
- package/dist/components/elements/BrandingBar/BrandingBar.stories.js +2 -0
- package/dist/components/elements/Button/Button.stories.js +4 -2
- package/dist/components/elements/ButtonV2/ButtonV2.module.css +25 -0
- package/dist/components/elements/ButtonV2/ButtonV2.stories.d.ts +15 -0
- package/dist/components/elements/ButtonV2/ButtonV2.stories.js +90 -0
- package/dist/components/elements/ButtonV2/ButtonV2.test.js +45 -0
- package/dist/components/elements/ButtonV2/index.d.ts +49 -0
- package/dist/components/elements/ButtonV2/index.js +136 -0
- package/dist/components/elements/{Fields/Checkbox → Checkbox}/Checkbox.stories.js +3 -1
- package/dist/components/elements/{Fields/Checkbox → Checkbox}/Checkbox.test.js +1 -1
- package/dist/components/elements/{Fields/Checkbox → Checkbox}/index.d.ts +1 -1
- package/dist/components/elements/{Fields/Checkbox → Checkbox}/index.js +2 -2
- package/dist/components/elements/{Fields/CheckboxGroup → CheckboxGroup}/CheckboxGroup.stories.js +3 -1
- package/dist/components/elements/{Fields/CheckboxGroup → CheckboxGroup}/CheckboxGroup.test.js +1 -1
- package/dist/components/elements/{Fields/CheckboxGroup → CheckboxGroup}/index.d.ts +1 -1
- package/dist/components/elements/{Fields/CheckboxGroup → CheckboxGroup}/index.js +7 -7
- package/dist/components/elements/CheckboxGroupV2/CheckboxGroupV2.stories.d.ts +8 -0
- package/dist/components/elements/CheckboxGroupV2/CheckboxGroupV2.stories.js +31 -0
- package/dist/components/elements/CheckboxGroupV2/CheckboxGroupV2.test.js +34 -0
- package/dist/components/elements/CheckboxGroupV2/index.d.ts +17 -0
- package/dist/components/elements/CheckboxGroupV2/index.js +50 -0
- package/dist/components/elements/CheckboxV2/CheckboxV2.module.css +5 -0
- package/dist/components/elements/CheckboxV2/CheckboxV2.stories.d.ts +6 -0
- package/dist/components/elements/CheckboxV2/CheckboxV2.stories.js +19 -0
- package/dist/components/elements/CheckboxV2/CheckboxV2.test.js +35 -0
- package/dist/components/elements/CheckboxV2/index.d.ts +9 -0
- package/dist/components/elements/CheckboxV2/index.js +22 -0
- package/dist/components/elements/{Fields/DatePicker → DatePicker}/DatePicker.stories.js +3 -1
- package/dist/components/elements/{Fields/DatePicker → DatePicker}/DatePicker.test.js +1 -1
- package/dist/components/elements/{Fields/DatePicker → DatePicker}/index.d.ts +1 -1
- package/dist/components/elements/{Fields/DatePicker → DatePicker}/index.js +2 -2
- package/dist/components/elements/Dropdown/Dropdown.stories.js +3 -1
- package/dist/components/elements/Dropdown/index.js +1 -1
- package/dist/components/elements/GroupV2/index.d.ts +22 -0
- package/dist/components/elements/GroupV2/index.js +71 -0
- package/dist/components/elements/{text/Heading → Heading}/Heading.stories.js +5 -3
- package/dist/components/elements/{text/Heading → Heading}/Heading.test.js +3 -3
- package/dist/components/elements/{text/Heading → Heading}/index.d.ts +3 -3
- package/dist/components/elements/{text/Heading → Heading}/index.js +10 -9
- package/dist/components/elements/HeadingV2/HeadingV2.module.css +8 -0
- package/dist/components/elements/HeadingV2/HeadingV2.stories.d.ts +8 -0
- package/dist/components/elements/HeadingV2/HeadingV2.stories.js +37 -0
- package/dist/components/elements/HeadingV2/HeadingV2.test.js +51 -0
- package/dist/components/elements/HeadingV2/index.d.ts +22 -0
- package/dist/components/elements/HeadingV2/index.js +100 -0
- package/dist/components/elements/Icon/Icon.stories.js +3 -1
- package/dist/components/elements/IconV2/IconV2.module.css +10 -0
- package/dist/components/elements/IconV2/IconV2.stories.d.ts +7 -0
- package/dist/components/elements/IconV2/IconV2.stories.js +31 -0
- package/dist/components/elements/IconV2/IconV2.test.js +62 -0
- package/dist/components/elements/IconV2/index.d.ts +10 -0
- package/dist/components/elements/IconV2/index.js +33 -0
- package/dist/components/elements/{text/Inline → Inline}/Inline.stories.js +2 -0
- package/dist/components/elements/{text/Inline → Inline}/index.d.ts +1 -1
- package/dist/components/elements/{text/Inline → Inline}/index.js +1 -1
- package/dist/components/elements/{text/Label → Label}/Label.stories.js +4 -2
- package/dist/components/elements/Label/Label.test.d.ts +1 -0
- package/dist/components/elements/{text/Label → Label}/Label.test.js +3 -3
- package/dist/components/elements/{text/Label → Label}/index.d.ts +2 -2
- package/dist/components/elements/{text/Label → Label}/index.js +3 -3
- package/dist/components/elements/LabelV2/LabelV2.stories.d.ts +6 -0
- package/dist/components/elements/LabelV2/LabelV2.stories.js +22 -0
- package/dist/components/elements/LabelV2/LabelV2.test.d.ts +1 -0
- package/dist/components/elements/LabelV2/LabelV2.test.js +56 -0
- package/dist/components/elements/LabelV2/index.d.ts +20 -0
- package/dist/components/elements/LabelV2/index.js +41 -0
- package/dist/components/elements/Link/Link.stories.js +3 -1
- package/dist/components/elements/List/List.stories.js +3 -1
- package/dist/components/elements/List/index.js +1 -1
- package/dist/components/elements/ListBox/Listbox.stories.js +2 -0
- package/dist/components/elements/ListBox/index.d.ts +1 -1
- package/dist/components/elements/ListBox/index.js +1 -1
- package/dist/components/elements/ListBoxV2/ListBoxV2.module.css +33 -0
- package/dist/components/elements/ListBoxV2/ListBoxV2.stories.d.ts +6 -0
- package/dist/components/elements/ListBoxV2/ListBoxV2.stories.js +19 -0
- package/dist/components/elements/ListBoxV2/index.d.ts +33 -0
- package/dist/components/elements/ListBoxV2/index.js +35 -0
- package/dist/components/elements/Markdown/Markdown.stories.js +2 -0
- package/dist/components/elements/Markdown/index.js +4 -4
- package/dist/components/elements/{Fields/MonthPicker → MonthPicker}/MonthPicker.stories.js +3 -1
- package/dist/components/elements/MonthPicker/MonthPicker.test.d.ts +1 -0
- package/dist/components/elements/{Fields/MonthPicker → MonthPicker}/MonthPicker.test.js +1 -1
- package/dist/components/elements/{Fields/MonthPicker → MonthPicker}/index.d.ts +1 -1
- package/dist/components/elements/{Fields/MonthPicker → MonthPicker}/index.js +2 -2
- package/dist/components/elements/{text/Paragraph → Paragraph}/Paragraph.stories.js +5 -3
- package/dist/components/elements/Paragraph/Paragraph.test.d.ts +1 -0
- package/dist/components/elements/{text/Paragraph → Paragraph}/Paragraph.test.js +1 -1
- package/dist/components/elements/{text/Paragraph → Paragraph}/index.d.ts +2 -2
- package/dist/components/elements/{text/Paragraph → Paragraph}/index.js +6 -5
- package/dist/components/elements/ParagraphV2/ParagraphV2.stories.d.ts +7 -0
- package/dist/components/elements/ParagraphV2/ParagraphV2.stories.js +33 -0
- package/dist/components/elements/ParagraphV2/ParagraphV2.test.d.ts +1 -0
- package/dist/components/elements/ParagraphV2/ParagraphV2.test.js +9 -0
- package/dist/components/elements/ParagraphV2/index.d.ts +15 -0
- package/dist/components/elements/ParagraphV2/index.js +39 -0
- package/dist/components/elements/Pill/Pill.stories.js +3 -1
- package/dist/components/elements/Pill/index.js +2 -1
- package/dist/components/elements/{Fields/Radio → Radio}/Radio.stories.js +3 -1
- package/dist/components/elements/Radio/Radio.test.d.ts +1 -0
- package/dist/components/elements/{Fields/Radio → Radio}/Radio.test.js +3 -3
- package/dist/components/elements/{Fields/Radio → Radio}/index.d.ts +1 -1
- package/dist/components/elements/{Fields/Radio → Radio}/index.js +1 -1
- package/dist/components/elements/{Fields/RadioGroup → RadioGroup}/RadioGroup.stories.js +3 -1
- package/dist/components/elements/{Fields/RadioGroup → RadioGroup}/RadioGroup.test.js +1 -1
- package/dist/components/elements/{Fields/RadioGroup → RadioGroup}/index.d.ts +1 -1
- package/dist/components/elements/{Fields/RadioGroup → RadioGroup}/index.js +6 -6
- package/dist/components/elements/{text/ReadMore → ReadMore}/ReadMore.stories.js +5 -3
- package/dist/components/elements/ReadMore/ReadMore.test.d.ts +1 -0
- package/dist/components/elements/{text/ReadMore → ReadMore}/ReadMore.test.js +4 -9
- package/dist/components/elements/{text/ReadMore → ReadMore}/index.d.ts +2 -2
- package/dist/components/elements/{text/ReadMore → ReadMore}/index.js +10 -9
- package/dist/components/elements/ReadMoreV2/ReadMoreV2.module.css +19 -0
- package/dist/components/elements/ReadMoreV2/ReadMoreV2.stories.d.ts +8 -0
- package/dist/components/elements/ReadMoreV2/ReadMoreV2.stories.js +28 -0
- package/dist/components/elements/ReadMoreV2/ReadMoreV2.test.d.ts +1 -0
- package/dist/components/elements/ReadMoreV2/ReadMoreV2.test.js +30 -0
- package/dist/components/elements/ReadMoreV2/index.d.ts +12 -0
- package/dist/components/elements/ReadMoreV2/index.js +81 -0
- package/dist/components/elements/{Fields/Select → Select}/Select.stories.js +6 -4
- package/dist/components/elements/Select/Select.test.d.ts +1 -0
- package/dist/components/elements/{Fields/Select → Select}/Select.test.js +1 -1
- package/dist/components/elements/{Fields/Select → Select}/index.d.ts +1 -1
- package/dist/components/elements/{Fields/Select → Select}/index.js +9 -9
- package/dist/components/elements/SelectV2/SelectV2.module.css +27 -0
- package/dist/components/elements/SelectV2/SelectV2.stories.d.ts +8 -0
- package/dist/components/elements/SelectV2/SelectV2.stories.js +41 -0
- package/dist/components/elements/SelectV2/SelectV2.test.d.ts +1 -0
- package/dist/components/elements/SelectV2/SelectV2.test.js +52 -0
- package/dist/components/elements/SelectV2/index.d.ts +18 -0
- package/dist/components/elements/SelectV2/index.js +164 -0
- package/dist/components/elements/Spinner/Spinner.stories.js +2 -0
- package/dist/components/elements/Spinner/index.js +1 -1
- package/dist/components/elements/SpinnerV2/SpinnerV2.module.css +12 -0
- package/dist/components/elements/SpinnerV2/SpinnerV2.stories.d.ts +7 -0
- package/dist/components/elements/SpinnerV2/SpinnerV2.stories.js +29 -0
- package/dist/components/elements/SpinnerV2/SpinnerV2.test.d.ts +1 -0
- package/dist/components/elements/SpinnerV2/SpinnerV2.test.js +9 -0
- package/dist/components/elements/SpinnerV2/index.d.ts +14 -0
- package/dist/components/elements/SpinnerV2/index.js +35 -0
- package/dist/components/elements/TabList/TabList.stories.js +2 -0
- package/dist/components/elements/Table/Table.stories.js +2 -0
- package/dist/components/elements/{Fields/TextInput → TextInput}/TextInput.stories.js +6 -4
- package/dist/components/elements/TextInput/TextInput.test.d.ts +1 -0
- package/dist/components/elements/{Fields/TextInput → TextInput}/TextInput.test.js +2 -2
- package/dist/components/elements/{Fields/TextInput → TextInput}/index.d.ts +3 -3
- package/dist/components/elements/{Fields/TextInput → TextInput}/index.js +9 -8
- package/dist/components/elements/TextInputV2/TextInputV2.module.css +71 -0
- package/dist/components/elements/TextInputV2/TextInputV2.stories.d.ts +9 -0
- package/dist/components/elements/TextInputV2/TextInputV2.stories.js +37 -0
- package/dist/components/elements/TextInputV2/TextInputV2.test.d.ts +1 -0
- package/dist/components/elements/TextInputV2/TextInputV2.test.js +59 -0
- package/dist/components/elements/TextInputV2/index.d.ts +45 -0
- package/dist/components/elements/TextInputV2/index.js +97 -0
- package/dist/components/elements/layout/Box.stories.js +2 -0
- package/dist/components/elements/layout/Flex.stories.js +3 -1
- package/dist/components/elements/layoutV2/BoxV2.d.ts +9 -0
- package/dist/components/elements/layoutV2/BoxV2.js +19 -0
- package/dist/components/elements/layoutV2/BoxV2.stories.d.ts +6 -0
- package/dist/components/elements/layoutV2/BoxV2.stories.js +14 -0
- package/dist/components/elements/layoutV2/ColumnV2.d.ts +8 -0
- package/dist/components/elements/layoutV2/ColumnV2.js +21 -0
- package/dist/components/elements/layoutV2/RowV2.d.ts +19 -0
- package/dist/components/elements/layoutV2/RowV2.js +54 -0
- package/dist/components/providers/alerts.js +0 -1
- package/dist/components/providers/alerts.test.d.ts +1 -0
- package/dist/components/providers/alerts.test.js +115 -0
- package/dist/components/providers/componentConfigV2.d.ts +25 -0
- package/dist/components/providers/componentConfigV2.js +37 -0
- package/dist/components/providers/media.js +1 -1
- package/dist/components/providers/mediaV2.d.ts +11 -0
- package/dist/components/providers/mediaV2.js +48 -0
- package/dist/components/providers/uiV2.d.ts +20 -0
- package/dist/components/providers/uiV2.js +16 -0
- package/dist/index.d.ts +34 -14
- package/dist/index.html +14 -0
- package/dist/index.js +33 -13
- package/dist/theme/Color.stories.js +3 -1
- package/dist/theme/GlobalStylesV2.d.ts +2 -0
- package/dist/theme/GlobalStylesV2.js +212 -0
- package/dist/theme/Typography.stories.js +3 -1
- package/dist/theme/css-variables.css +57 -0
- package/dist/theme/index.d.ts +127 -1
- package/dist/theme/index.js +14 -0
- package/dist/theme/typography.js +2 -2
- package/dist/utils/decorators/UIVersion1.d.ts +2 -0
- package/dist/utils/decorators/UIVersion1.js +7 -0
- package/dist/utils/decorators/UIVersion2.d.ts +2 -0
- package/dist/utils/decorators/UIVersion2.js +7 -0
- package/dist/utils/hooks/useFocus.d.ts +7 -0
- package/dist/utils/hooks/useFocus.js +12 -0
- package/dist/utils/processSx.d.ts +3 -0
- package/dist/utils/processSx.js +135 -0
- package/package.json +7 -4
- /package/dist/components/{elements/Fields/Checkbox/Checkbox.test.d.ts → composites/CardV2/CardV2.test.d.ts} +0 -0
- /package/dist/components/{elements/Fields/CheckboxGroup/CheckboxGroup.test.d.ts → composites/ModalV2/ModalV2.test.d.ts} +0 -0
- /package/dist/components/elements/{Fields/AutoComplete → AutoComplete}/AutoComplete.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/AutoComplete → AutoComplete}/AutoComplete.test.d.ts +0 -0
- /package/dist/components/elements/{Fields/AutoComplete → AutoComplete}/index.d.ts +0 -0
- /package/dist/components/elements/{Fields/DatePicker/DatePicker.test.d.ts → ButtonV2/ButtonV2.test.d.ts} +0 -0
- /package/dist/components/elements/{text/Caption → Caption}/index.d.ts +0 -0
- /package/dist/components/elements/{text/Caption → Caption}/index.js +0 -0
- /package/dist/components/elements/{Fields/Checkbox → Checkbox}/Checkbox.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/MonthPicker/MonthPicker.test.d.ts → Checkbox/Checkbox.test.d.ts} +0 -0
- /package/dist/components/elements/{Fields/CheckboxGroup → CheckboxGroup}/CheckboxGroup.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/Radio/Radio.test.d.ts → CheckboxGroup/CheckboxGroup.test.d.ts} +0 -0
- /package/dist/components/elements/{Fields/Select/Select.test.d.ts → CheckboxGroupV2/CheckboxGroupV2.test.d.ts} +0 -0
- /package/dist/components/elements/{text/Heading/Heading.test.d.ts → CheckboxV2/CheckboxV2.test.d.ts} +0 -0
- /package/dist/components/elements/{Fields/DatePicker → DatePicker}/DatePicker.stories.d.ts +0 -0
- /package/dist/components/elements/{text/Label/Label.test.d.ts → DatePicker/DatePicker.test.d.ts} +0 -0
- /package/dist/components/elements/{text/Heading → Heading}/Heading.stories.d.ts +0 -0
- /package/dist/components/elements/{text/Paragraph/Paragraph.test.d.ts → Heading/Heading.test.d.ts} +0 -0
- /package/dist/components/elements/{text/ReadMore/ReadMore.test.d.ts → HeadingV2/HeadingV2.test.d.ts} +0 -0
- /package/dist/components/elements/{Fields/RadioGroup/RadioGroup.test.d.ts → IconV2/IconV2.test.d.ts} +0 -0
- /package/dist/components/elements/{text/Inline → Inline}/Inline.stories.d.ts +0 -0
- /package/dist/components/elements/{text/Label → Label}/Label.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/MonthPicker → MonthPicker}/MonthPicker.stories.d.ts +0 -0
- /package/dist/components/elements/{text/Paragraph → Paragraph}/Paragraph.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/Radio → Radio}/Radio.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/RadioGroup → RadioGroup}/RadioGroup.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/TextInput/TextInput.test.d.ts → RadioGroup/RadioGroup.test.d.ts} +0 -0
- /package/dist/components/elements/{text/ReadMore → ReadMore}/ReadMore.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/Select → Select}/Select.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/TextInput → TextInput}/TextInput.stories.d.ts +0 -0
- /package/dist/components/elements/{Fields/option.d.ts → option.d.ts} +0 -0
- /package/dist/components/elements/{Fields/option.js → option.js} +0 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { TextInputV2 } from '.';
|
|
3
|
+
declare const meta: Meta<typeof TextInputV2>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof TextInputV2>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const WithLabel: Story;
|
|
8
|
+
export declare const Inverted: Story;
|
|
9
|
+
export declare const Disabled: Story;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import SearchIcon from '@mui/icons-material/Search';
|
|
3
|
+
import { INPUTV2_SIZE, TextInputV2 } from '.';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { ColumnV2 } from '../layoutV2/ColumnV2';
|
|
6
|
+
import { GroupV2 } from '../GroupV2';
|
|
7
|
+
import { HeadingV2, HEADINGV2_SIZE } from '../HeadingV2';
|
|
8
|
+
import { COLOR } from '../../../theme/colors';
|
|
9
|
+
import { UIVersion2 } from '../../../utils/decorators/UIVersion2';
|
|
10
|
+
const meta = {
|
|
11
|
+
title: 'Elements/Fields/TextInputV2',
|
|
12
|
+
component: TextInputV2,
|
|
13
|
+
tags: ['autodocs'],
|
|
14
|
+
decorators: [UIVersion2],
|
|
15
|
+
};
|
|
16
|
+
export default meta;
|
|
17
|
+
const sizes = [
|
|
18
|
+
{ label: 'Large', size: INPUTV2_SIZE.LG },
|
|
19
|
+
{ label: 'Medium', size: INPUTV2_SIZE.MD },
|
|
20
|
+
{ label: 'Small', size: INPUTV2_SIZE.SM },
|
|
21
|
+
];
|
|
22
|
+
const StatefulInput = (props) => {
|
|
23
|
+
const [value, setValue] = useState('');
|
|
24
|
+
return _jsx(TextInputV2, Object.assign({ value: value, onChange: setValue }, props));
|
|
25
|
+
};
|
|
26
|
+
export const Default = {
|
|
27
|
+
render: () => (_jsx(ColumnV2, { children: sizes.map((size, i) => (_jsxs(GroupV2, { children: [_jsx(HeadingV2, Object.assign({ size: HEADINGV2_SIZE.MD }, { children: size.label })), _jsx(StatefulInput, { size: size.size, leftIcon: SearchIcon, placeholder: "Placeholder", sx: { mt: 2 } })] }, i))) })),
|
|
28
|
+
};
|
|
29
|
+
export const WithLabel = {
|
|
30
|
+
render: () => (_jsx(ColumnV2, { children: sizes.map((size, i) => (_jsxs(GroupV2, { children: [_jsx(HeadingV2, Object.assign({ size: HEADINGV2_SIZE.MD }, { children: size.label })), _jsx(StatefulInput, { size: size.size, leftIcon: SearchIcon, label: "Search", placeholder: "Placeholder", sx: { mt: 2 } })] }, i))) })),
|
|
31
|
+
};
|
|
32
|
+
export const Inverted = {
|
|
33
|
+
render: () => (_jsx(ColumnV2, Object.assign({ sx: { backgroundColor: COLOR.BLACK, p: 2 } }, { children: sizes.map((size, i) => (_jsxs(GroupV2, { children: [_jsx(HeadingV2, Object.assign({ size: HEADINGV2_SIZE.MD, sx: { color: COLOR.WHITE } }, { children: size.label })), _jsx(StatefulInput, { inverted: true, size: size.size, leftIcon: SearchIcon, placeholder: "Placeholder", label: "Search", sx: { mt: 2 } })] }, i))) }))),
|
|
34
|
+
};
|
|
35
|
+
export const Disabled = {
|
|
36
|
+
render: () => (_jsx(ColumnV2, Object.assign({ sx: { p: 2 } }, { children: sizes.map((size, i) => (_jsxs(GroupV2, { children: [_jsx(HeadingV2, Object.assign({ size: HEADINGV2_SIZE.MD, sx: { color: COLOR.WHITE } }, { children: size.label })), _jsx(StatefulInput, { disabled: true, size: size.size, leftIcon: SearchIcon, placeholder: "Placeholder", label: "Search", sx: { mt: 2 } })] }, i))) }))),
|
|
37
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { render, screen, fireEvent } from '@testing-library/react';
|
|
3
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
4
|
+
import { TextInputV2, INPUTV2_SIZE } from '.';
|
|
5
|
+
import '@testing-library/jest-dom';
|
|
6
|
+
vi.mock('../../../providers/uniqueIds', () => ({
|
|
7
|
+
useUniqueId: (prefix) => `${prefix}-mock-id`,
|
|
8
|
+
}));
|
|
9
|
+
describe('TextInputV2 Component', () => {
|
|
10
|
+
const setup = (props = {}) => {
|
|
11
|
+
const initialProps = Object.assign({ value: '', onChange: vi.fn(), onChangeRaw: vi.fn(), size: INPUTV2_SIZE.MD }, props);
|
|
12
|
+
return render(_jsx(TextInputV2, Object.assign({}, initialProps)));
|
|
13
|
+
};
|
|
14
|
+
it('renders with the correct initial value', () => {
|
|
15
|
+
setup({ value: 'Initial value' });
|
|
16
|
+
expect(screen.getByDisplayValue('Initial value')).toBeInTheDocument();
|
|
17
|
+
});
|
|
18
|
+
it('calls onChange when input value changes', () => {
|
|
19
|
+
const mockOnChange = vi.fn();
|
|
20
|
+
setup({ value: 'Initial value', onChange: mockOnChange });
|
|
21
|
+
const input = screen.getByRole('textbox');
|
|
22
|
+
fireEvent.change(input, { target: { value: 'New value' } });
|
|
23
|
+
expect(mockOnChange).toHaveBeenCalledWith('New value');
|
|
24
|
+
});
|
|
25
|
+
it('calls onChangeRaw with the event when input value changes', () => {
|
|
26
|
+
const mockOnChangeRaw = vi.fn();
|
|
27
|
+
setup({ value: 'Initial value', onChangeRaw: mockOnChangeRaw });
|
|
28
|
+
const input = screen.getByRole('textbox');
|
|
29
|
+
fireEvent.change(input, { target: { value: 'New value' } });
|
|
30
|
+
expect(mockOnChangeRaw).toHaveBeenCalled();
|
|
31
|
+
const value = mockOnChangeRaw.mock.calls[0][0];
|
|
32
|
+
expect(value).toBe('New value');
|
|
33
|
+
});
|
|
34
|
+
it('renders the left icon if provided', () => {
|
|
35
|
+
const MockIcon = () => _jsx("span", Object.assign({ "data-testid": "mock-icon" }, { children: "Icon" }));
|
|
36
|
+
setup({ leftIcon: MockIcon });
|
|
37
|
+
expect(screen.getByTestId('mock-icon')).toBeInTheDocument();
|
|
38
|
+
});
|
|
39
|
+
it('renders the label if provided', () => {
|
|
40
|
+
setup({ label: 'Test Label' });
|
|
41
|
+
const labelElements = screen.getAllByText('Test Label');
|
|
42
|
+
expect(labelElements.length).toBeGreaterThan(0);
|
|
43
|
+
});
|
|
44
|
+
it('applies the correct styles for the input size', () => {
|
|
45
|
+
setup({ size: INPUTV2_SIZE.SM });
|
|
46
|
+
const inputContainer = screen.getByRole('textbox');
|
|
47
|
+
expect(inputContainer).toHaveStyle({ height: '2.25rem;' });
|
|
48
|
+
});
|
|
49
|
+
it('disables the input if the disabled prop is true', () => {
|
|
50
|
+
setup({ disabled: true });
|
|
51
|
+
const input = screen.getByRole('textbox');
|
|
52
|
+
expect(input).toBeDisabled();
|
|
53
|
+
});
|
|
54
|
+
it('renders with inverted styles if the inverted prop is true', () => {
|
|
55
|
+
setup({ inverted: true });
|
|
56
|
+
const input = screen.getByRole('textbox');
|
|
57
|
+
expect(input).toHaveStyle({ backgroundColor: 'rgb(51, 51, 51);' });
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TYPOGRAPHY_TYPE } from '../../../theme/typography';
|
|
3
|
+
import { StyledElementPropsV2 } from '../../../theme';
|
|
4
|
+
export declare enum INPUTV2_SIZE {
|
|
5
|
+
SM = "sm",
|
|
6
|
+
MD = "md",
|
|
7
|
+
LG = "lg"
|
|
8
|
+
}
|
|
9
|
+
export declare const labelTypographyMapV2: {
|
|
10
|
+
sm: TYPOGRAPHY_TYPE;
|
|
11
|
+
md: TYPOGRAPHY_TYPE;
|
|
12
|
+
lg: TYPOGRAPHY_TYPE;
|
|
13
|
+
};
|
|
14
|
+
export declare const labelOffsetMapV2: {
|
|
15
|
+
sm: string;
|
|
16
|
+
md: string;
|
|
17
|
+
lg: string;
|
|
18
|
+
};
|
|
19
|
+
export type TextInputV2Props = StyledElementPropsV2<HTMLInputElement, {
|
|
20
|
+
size?: INPUTV2_SIZE;
|
|
21
|
+
leftIcon?: React.FC<any>;
|
|
22
|
+
inline?: boolean;
|
|
23
|
+
inverted?: boolean;
|
|
24
|
+
label?: string;
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
value: string;
|
|
27
|
+
onChange?: (value: string) => void;
|
|
28
|
+
onChangeRaw?: (e: string | React.ChangeEvent) => void;
|
|
29
|
+
}, string>;
|
|
30
|
+
export declare const TextInputV2: React.ForwardRefExoticComponent<{
|
|
31
|
+
sx?: import("../../../theme").StylesPropV2 | undefined;
|
|
32
|
+
children?: string | undefined;
|
|
33
|
+
} & Omit<React.HTMLAttributes<HTMLInputElement>, "children" | "onChange"> & {
|
|
34
|
+
size?: INPUTV2_SIZE | undefined;
|
|
35
|
+
leftIcon?: React.FC<any> | undefined;
|
|
36
|
+
inline?: boolean | undefined;
|
|
37
|
+
inverted?: boolean | undefined;
|
|
38
|
+
label?: string | undefined;
|
|
39
|
+
disabled?: boolean | undefined;
|
|
40
|
+
value: string;
|
|
41
|
+
onChange?: ((value: string) => void) | undefined;
|
|
42
|
+
onChangeRaw?: ((e: string | React.ChangeEvent) => void) | undefined;
|
|
43
|
+
} & {
|
|
44
|
+
htmlFor?: string | undefined;
|
|
45
|
+
} & React.RefAttributes<any>>;
|
|
@@ -0,0 +1,97 @@
|
|
|
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 React from 'react';
|
|
14
|
+
import { TYPOGRAPHY_TYPE, getIconSize, getTypographyStyles, } from '../../../theme/typography';
|
|
15
|
+
import { IconV2 } from '../IconV2';
|
|
16
|
+
import { COLOR } from '../../../theme/colors';
|
|
17
|
+
import { LabelV2 } from '../LabelV2';
|
|
18
|
+
import { useUniqueId } from '../../providers/uniqueIds';
|
|
19
|
+
import { BOX_SHADOW, Z_INDEX } from '../../../theme/custom';
|
|
20
|
+
import { useHover } from '../../../utils/hooks/useHover';
|
|
21
|
+
import { useFocus } from '../../../utils/hooks/useFocus';
|
|
22
|
+
import { processSx } from '../../../utils/processSx';
|
|
23
|
+
import * as styles from './TextInputV2.module.css';
|
|
24
|
+
export var INPUTV2_SIZE;
|
|
25
|
+
(function (INPUTV2_SIZE) {
|
|
26
|
+
INPUTV2_SIZE["SM"] = "sm";
|
|
27
|
+
INPUTV2_SIZE["MD"] = "md";
|
|
28
|
+
INPUTV2_SIZE["LG"] = "lg";
|
|
29
|
+
})(INPUTV2_SIZE || (INPUTV2_SIZE = {}));
|
|
30
|
+
const typographyMap = {
|
|
31
|
+
[INPUTV2_SIZE.SM]: TYPOGRAPHY_TYPE.PARAGRAPH_SMALL,
|
|
32
|
+
[INPUTV2_SIZE.MD]: TYPOGRAPHY_TYPE.PARAGRAPH_MEDIUM,
|
|
33
|
+
[INPUTV2_SIZE.LG]: TYPOGRAPHY_TYPE.PARAGRAPH_LARGE,
|
|
34
|
+
};
|
|
35
|
+
export const labelTypographyMapV2 = {
|
|
36
|
+
[INPUTV2_SIZE.SM]: TYPOGRAPHY_TYPE.CONTROL_SMALL,
|
|
37
|
+
[INPUTV2_SIZE.MD]: TYPOGRAPHY_TYPE.CONTROL_SMALL,
|
|
38
|
+
[INPUTV2_SIZE.LG]: TYPOGRAPHY_TYPE.CONTROL_MEDIUM,
|
|
39
|
+
};
|
|
40
|
+
export const labelOffsetMapV2 = {
|
|
41
|
+
[INPUTV2_SIZE.SM]: '-0.375rem',
|
|
42
|
+
[INPUTV2_SIZE.MD]: '-0.45rem',
|
|
43
|
+
[INPUTV2_SIZE.LG]: '-0.5rem',
|
|
44
|
+
};
|
|
45
|
+
const defaultPaddingX = {
|
|
46
|
+
[INPUTV2_SIZE.SM]: '0.5rem',
|
|
47
|
+
[INPUTV2_SIZE.MD]: '0.75rem',
|
|
48
|
+
[INPUTV2_SIZE.LG]: '0.75rem',
|
|
49
|
+
};
|
|
50
|
+
const defaultHeight = {
|
|
51
|
+
[INPUTV2_SIZE.SM]: '2.25rem',
|
|
52
|
+
[INPUTV2_SIZE.MD]: '2.5rem',
|
|
53
|
+
[INPUTV2_SIZE.LG]: '3rem',
|
|
54
|
+
};
|
|
55
|
+
const typeSafeStyles = styles;
|
|
56
|
+
export const TextInputV2 = React.forwardRef((_a, ref) => {
|
|
57
|
+
var { value, label, onChange, onChangeRaw, onClick, inline, inverted, size: sizeParam, leftIcon, sx, disabled } = _a, rest = __rest(_a, ["value", "label", "onChange", "onChangeRaw", "onClick", "inline", "inverted", "size", "leftIcon", "sx", "disabled"]);
|
|
58
|
+
const id = useUniqueId('text-input');
|
|
59
|
+
const size = sizeParam || INPUTV2_SIZE.MD;
|
|
60
|
+
const display = inline === false ? 'flex' : '';
|
|
61
|
+
const { isHovered, anchorElementProps } = useHover();
|
|
62
|
+
const { isFocused } = useFocus();
|
|
63
|
+
const paddingX = defaultPaddingX[size];
|
|
64
|
+
const height = defaultHeight[size];
|
|
65
|
+
const typography = typographyMap[size];
|
|
66
|
+
const typographyStyles = getTypographyStyles(typography);
|
|
67
|
+
const processedStyles = processSx(Object.assign(Object.assign({}, typographyStyles), sx));
|
|
68
|
+
const focusStyles = disabled
|
|
69
|
+
? {}
|
|
70
|
+
: {
|
|
71
|
+
boxShadow: inverted ? BOX_SHADOW.INVERTED : BOX_SHADOW.NORMAL,
|
|
72
|
+
};
|
|
73
|
+
const appliedHoverStyles = isHovered ? focusStyles : {};
|
|
74
|
+
const appliedFocusStyles = isFocused ? focusStyles : {};
|
|
75
|
+
return (_jsxs("div", Object.assign({}, anchorElementProps, { ref: ref, onClick: onClick, id: id, className: `${typeSafeStyles.wrapper} ${inverted ? typeSafeStyles.inverted : ''}`, style: Object.assign(Object.assign(Object.assign({ height,
|
|
76
|
+
display, paddingLeft: paddingX, paddingRight: paddingX }, appliedHoverStyles), appliedFocusStyles), processedStyles) }, { children: [_jsx("fieldset", Object.assign({ className: `${typeSafeStyles.fieldset} ${inverted ? typeSafeStyles.inverted : ''}` }, { children: _jsx("legend", Object.assign({ className: typeSafeStyles.legend }, { children: label && (_jsx(LabelV2, Object.assign({ standalone: true, "aria-hidden": "true", sx: {
|
|
77
|
+
px: 1,
|
|
78
|
+
position: 'relative',
|
|
79
|
+
display: 'inline-flex',
|
|
80
|
+
opacity: '0',
|
|
81
|
+
visibility: 'hidden',
|
|
82
|
+
}, typography: labelTypographyMapV2[size] }, { children: label }))) })) })), leftIcon && (_jsx(IconV2, { icon: leftIcon, color: inverted ? COLOR.EXTRA_LIGHT_GRAY : COLOR.TEXT, sx: {
|
|
83
|
+
mr: 2,
|
|
84
|
+
fontSize: getIconSize(typographyStyles.fontSize),
|
|
85
|
+
} })), _jsx("input", Object.assign({ value: value, onChange: (event) => {
|
|
86
|
+
onChange && onChange(event.target.value);
|
|
87
|
+
onChangeRaw && onChangeRaw(event.target.value);
|
|
88
|
+
}, className: `${typeSafeStyles.input} ${inverted ? typeSafeStyles.inverted : ''}`, style: Object.assign({}, processSx(Object.assign({}, typographyStyles))), disabled: disabled }, rest)), label && (_jsx(LabelV2, Object.assign({ htmlFor: id, typography: labelTypographyMapV2[size], sx: {
|
|
89
|
+
position: 'absolute',
|
|
90
|
+
color: inverted ? COLOR.EXTRA_LIGHT_GRAY : COLOR.ND_PROVOST_BLUE,
|
|
91
|
+
left: '0.5rem',
|
|
92
|
+
lineHeight: 1,
|
|
93
|
+
zIndex: Z_INDEX.ELEVATED,
|
|
94
|
+
px: 1,
|
|
95
|
+
top: labelOffsetMapV2[size],
|
|
96
|
+
} }, { children: label })))] })));
|
|
97
|
+
});
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Box as BoxComponent } from './Box';
|
|
3
3
|
import { COLOR } from '../../../theme/colors';
|
|
4
|
+
import { UIVersion1 } from '../../../utils/decorators/UIVersion1';
|
|
4
5
|
const meta = {
|
|
5
6
|
title: 'Elements/Layout/Box',
|
|
6
7
|
component: BoxComponent,
|
|
7
8
|
tags: ['autodocs'],
|
|
9
|
+
decorators: [UIVersion1],
|
|
8
10
|
};
|
|
9
11
|
export default meta;
|
|
10
12
|
export const Box = {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Column } from './Column';
|
|
3
3
|
import { Row } from './Row';
|
|
4
|
-
import { Paragraph } from '../
|
|
4
|
+
import { Paragraph } from '../Paragraph';
|
|
5
5
|
import { COLOR } from '../../../theme/colors';
|
|
6
|
+
import { UIVersion1 } from '../../../utils/decorators/UIVersion1';
|
|
6
7
|
const meta = {
|
|
7
8
|
title: 'Elements/Layout/Flex',
|
|
8
9
|
component: Row,
|
|
9
10
|
tags: ['autodocs'],
|
|
11
|
+
decorators: [UIVersion1],
|
|
10
12
|
};
|
|
11
13
|
export default meta;
|
|
12
14
|
export const Columns = {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyledElementPropsV2 } from '../../../theme';
|
|
3
|
+
export type BoxV2Props = StyledElementPropsV2<HTMLDivElement>;
|
|
4
|
+
export declare const BoxV2: React.ForwardRefExoticComponent<{
|
|
5
|
+
sx?: import("../../../theme").StylesPropV2 | undefined;
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
} & Omit<React.HTMLAttributes<HTMLDivElement>, "children" | "onChange"> & object & {
|
|
8
|
+
htmlFor?: string | undefined;
|
|
9
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,19 @@
|
|
|
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 "react/jsx-runtime";
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { processSx } from '../../../utils/processSx';
|
|
15
|
+
export const BoxV2 = React.forwardRef((_a, ref) => {
|
|
16
|
+
var { sx } = _a, rest = __rest(_a, ["sx"]);
|
|
17
|
+
const processedStyles = processSx(sx);
|
|
18
|
+
return _jsx("div", Object.assign({}, rest, { style: processedStyles, ref: ref }));
|
|
19
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { BoxV2 as BoxV2Component } from './BoxV2';
|
|
3
|
+
import { COLOR } from '../../../theme/colors';
|
|
4
|
+
import { UIVersion2 } from '../../../utils/decorators/UIVersion2';
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Elements/Layout/BoxV2',
|
|
7
|
+
component: BoxV2Component,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
decorators: [UIVersion2],
|
|
10
|
+
};
|
|
11
|
+
export default meta;
|
|
12
|
+
export const Box = {
|
|
13
|
+
render: () => (_jsx(BoxV2Component, Object.assign({ sx: { p: 1, bg: COLOR.PRIMARY } }, { children: _jsx(BoxV2Component, { sx: { p: 1, bg: COLOR.SECONDARY } }) }))),
|
|
14
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FlexHelperPropsV2 } from './RowV2';
|
|
3
|
+
export declare const ColumnV2: React.ForwardRefExoticComponent<{
|
|
4
|
+
sx?: import("../../../theme").StylesPropV2 | undefined;
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
} & Omit<React.HTMLAttributes<HTMLDivElement>, "children" | "onChange"> & FlexHelperPropsV2 & {
|
|
7
|
+
htmlFor?: string | undefined;
|
|
8
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,21 @@
|
|
|
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 "react/jsx-runtime";
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { convertFlexHelperPropsV2 } from './RowV2';
|
|
15
|
+
import { processSx } from '../../../utils/processSx';
|
|
16
|
+
export const ColumnV2 = React.forwardRef((_a, ref) => {
|
|
17
|
+
var { sx, children } = _a, rest = __rest(_a, ["sx", "children"]);
|
|
18
|
+
const flexStyles = convertFlexHelperPropsV2(rest);
|
|
19
|
+
const processedStyles = processSx(sx);
|
|
20
|
+
return (_jsx("div", Object.assign({ ref: ref }, rest, { style: Object.assign(Object.assign(Object.assign({}, flexStyles), processedStyles), { display: 'flex', flexDirection: 'column' }) }, { children: children })));
|
|
21
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React, { CSSProperties } from 'react';
|
|
2
|
+
export declare const convertFlexHelperPropsV2: (props: FlexHelperPropsV2) => React.CSSProperties;
|
|
3
|
+
export type FlexHelperPropsV2 = {
|
|
4
|
+
grow?: number;
|
|
5
|
+
shrink?: number;
|
|
6
|
+
basis?: string;
|
|
7
|
+
flex?: string;
|
|
8
|
+
align?: CSSProperties['alignItems'];
|
|
9
|
+
justify?: CSSProperties['justifyContent'];
|
|
10
|
+
centered?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare const RowV2: React.ForwardRefExoticComponent<{
|
|
13
|
+
sx?: import("../../../theme").StylesPropV2 | undefined;
|
|
14
|
+
children?: React.ReactNode;
|
|
15
|
+
} & Omit<React.HTMLAttributes<HTMLDivElement>, "children" | "onChange"> & FlexHelperPropsV2 & {
|
|
16
|
+
breakpoint?: number | undefined;
|
|
17
|
+
} & {
|
|
18
|
+
htmlFor?: string | undefined;
|
|
19
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,54 @@
|
|
|
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 "react/jsx-runtime";
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { processSx } from '../../../utils/processSx';
|
|
15
|
+
export const convertFlexHelperPropsV2 = (props) => {
|
|
16
|
+
const styleObject = {};
|
|
17
|
+
if (props.grow) {
|
|
18
|
+
styleObject.flexGrow = props.grow;
|
|
19
|
+
}
|
|
20
|
+
if (props.shrink) {
|
|
21
|
+
styleObject.flexShrink = props.shrink;
|
|
22
|
+
}
|
|
23
|
+
if (props.flex) {
|
|
24
|
+
styleObject.flex = props.flex;
|
|
25
|
+
}
|
|
26
|
+
if (props.basis) {
|
|
27
|
+
styleObject.flexBasis = props.basis;
|
|
28
|
+
}
|
|
29
|
+
if (props.centered) {
|
|
30
|
+
styleObject.alignItems = 'center';
|
|
31
|
+
styleObject.justifyContent = 'center';
|
|
32
|
+
}
|
|
33
|
+
if (props.align) {
|
|
34
|
+
styleObject.alignItems = props.align;
|
|
35
|
+
}
|
|
36
|
+
if (props.justify) {
|
|
37
|
+
styleObject.justifyContent = props.justify;
|
|
38
|
+
}
|
|
39
|
+
return styleObject;
|
|
40
|
+
};
|
|
41
|
+
export const RowV2 = React.forwardRef((_a, ref) => {
|
|
42
|
+
var { sx, children, breakpoint: breakpointParam } = _a, rest = __rest(_a, ["sx", "children", "breakpoint"]);
|
|
43
|
+
const flexStyles = convertFlexHelperPropsV2(rest);
|
|
44
|
+
let flexDirection = 'row';
|
|
45
|
+
if (breakpointParam !== undefined) {
|
|
46
|
+
flexDirection = [];
|
|
47
|
+
for (let i = 0; i <= breakpointParam; i++) {
|
|
48
|
+
flexDirection.push('column');
|
|
49
|
+
}
|
|
50
|
+
flexDirection.push('row');
|
|
51
|
+
}
|
|
52
|
+
const processedStyles = processSx(Object.assign(Object.assign({}, sx), { flexDirection }));
|
|
53
|
+
return (_jsx("div", Object.assign({}, rest, { ref: ref, style: Object.assign(Object.assign(Object.assign({}, flexStyles), processedStyles), { display: 'flex' }) }, { children: children })));
|
|
54
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { render, screen, waitFor } from '@testing-library/react';
|
|
12
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
13
|
+
import { AlertsProvider, useAlerts } from './alerts';
|
|
14
|
+
describe('AlertsProvider and useAlerts', () => {
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
vi.resetAllMocks();
|
|
17
|
+
localStorage.clear();
|
|
18
|
+
});
|
|
19
|
+
const mockAlerts = [
|
|
20
|
+
{
|
|
21
|
+
uuid: '1',
|
|
22
|
+
domains: ['library'],
|
|
23
|
+
startTime: '2020-09-06T04:00:00.000Z',
|
|
24
|
+
endTime: '2020-09-09T04:00:00.000Z',
|
|
25
|
+
title: 'Aleph API down due to DNS problem',
|
|
26
|
+
description: 'Test 1',
|
|
27
|
+
type: 'Warning',
|
|
28
|
+
global: true,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
uuid: '2',
|
|
32
|
+
title: 'Test Alert 2',
|
|
33
|
+
type: 'Warning',
|
|
34
|
+
description: 'Issue with Primo',
|
|
35
|
+
domains: ['primo'],
|
|
36
|
+
global: false,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
uuid: '3',
|
|
40
|
+
domains: ['library'],
|
|
41
|
+
startTime: '2020-09-06T04:00:00.000Z',
|
|
42
|
+
endTime: '2020-09-09T04:00:00.000Z',
|
|
43
|
+
title: 'Aleph API down due to DNS problem',
|
|
44
|
+
description: '__bold__ [Test 2 Link](https://onesearch.library.nd.edu/)',
|
|
45
|
+
type: 'Warning',
|
|
46
|
+
global: true,
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
const mockApiResponse = {
|
|
50
|
+
data: {
|
|
51
|
+
alerts: {
|
|
52
|
+
data: mockAlerts.map((alert) => ({
|
|
53
|
+
attributes: alert,
|
|
54
|
+
})),
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
it('fetches and displays alerts correctly', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
60
|
+
json: vi.fn().mockResolvedValue(mockApiResponse),
|
|
61
|
+
});
|
|
62
|
+
const TestComponent = () => {
|
|
63
|
+
const { alerts } = useAlerts();
|
|
64
|
+
return (_jsx("div", { children: alerts.map((alert) => (_jsx("div", { children: alert.title }, alert.uuid))) }));
|
|
65
|
+
};
|
|
66
|
+
render(_jsx(AlertsProvider, { children: _jsx(TestComponent, {}) }));
|
|
67
|
+
yield waitFor(() => {
|
|
68
|
+
expect(screen.getAllByText('Aleph API down due to DNS problem').length).toBe(2);
|
|
69
|
+
expect(screen.queryAllByText('Test Alert 2').length).toBe(0);
|
|
70
|
+
});
|
|
71
|
+
}));
|
|
72
|
+
it('handles empty response from GraphQL', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
74
|
+
json: vi.fn().mockResolvedValue({ data: { alerts: { data: [] } } }),
|
|
75
|
+
});
|
|
76
|
+
const TestComponent = () => {
|
|
77
|
+
const { alerts } = useAlerts();
|
|
78
|
+
return (_jsx("div", { children: alerts.length === 0
|
|
79
|
+
? 'No Alerts'
|
|
80
|
+
: alerts.map((alert) => _jsx("div", { children: alert.title }, alert.uuid)) }));
|
|
81
|
+
};
|
|
82
|
+
render(_jsx(AlertsProvider, { children: _jsx(TestComponent, {}) }));
|
|
83
|
+
yield waitFor(() => {
|
|
84
|
+
expect(screen.getByText('No Alerts')).toBeInTheDocument();
|
|
85
|
+
});
|
|
86
|
+
}));
|
|
87
|
+
it('handles missing data in GraphQL response', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
88
|
+
global.fetch = vi.fn().mockResolvedValue({
|
|
89
|
+
json: vi.fn().mockResolvedValue({ data: {} }),
|
|
90
|
+
});
|
|
91
|
+
const TestComponent = () => {
|
|
92
|
+
const { alerts } = useAlerts();
|
|
93
|
+
return (_jsx("div", { children: alerts.length === 0
|
|
94
|
+
? 'No Alerts'
|
|
95
|
+
: alerts.map((alert) => _jsx("div", { children: alert.title }, alert.uuid)) }));
|
|
96
|
+
};
|
|
97
|
+
render(_jsx(AlertsProvider, { children: _jsx(TestComponent, {}) }));
|
|
98
|
+
yield waitFor(() => {
|
|
99
|
+
expect(screen.getByText('No Alerts')).toBeInTheDocument();
|
|
100
|
+
});
|
|
101
|
+
}));
|
|
102
|
+
it('handles network error during fetch', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
103
|
+
global.fetch = vi.fn().mockRejectedValue(new Error('Network error'));
|
|
104
|
+
const TestComponent = () => {
|
|
105
|
+
const { alerts } = useAlerts();
|
|
106
|
+
return (_jsx("div", { children: alerts.length === 0
|
|
107
|
+
? 'No Alerts'
|
|
108
|
+
: alerts.map((alert) => _jsx("div", { children: alert.title }, alert.uuid)) }));
|
|
109
|
+
};
|
|
110
|
+
render(_jsx(AlertsProvider, { children: _jsx(TestComponent, {}) }));
|
|
111
|
+
yield waitFor(() => {
|
|
112
|
+
expect(screen.getByText('No Alerts')).toBeInTheDocument();
|
|
113
|
+
});
|
|
114
|
+
}));
|
|
115
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { DeepPartial } from '../../utils/misc';
|
|
3
|
+
import { StyledElementPropsV2 } from '../../theme';
|
|
4
|
+
export type ComponentConfigV2 = {
|
|
5
|
+
link: {
|
|
6
|
+
externalMatcher: RegExp;
|
|
7
|
+
navigate: (url: string) => void;
|
|
8
|
+
internalLinkComponent: React.FC<LinkComponentPropsV2>;
|
|
9
|
+
externalLinkComponent: React.FC<LinkComponentPropsV2>;
|
|
10
|
+
};
|
|
11
|
+
modal: {
|
|
12
|
+
appElement: HTMLElement | undefined;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export type ComponentConfigParamV2 = DeepPartial<ComponentConfigV2>;
|
|
16
|
+
export type LinkComponentPropsV2 = StyledElementPropsV2<HTMLAnchorElement, {
|
|
17
|
+
to: string;
|
|
18
|
+
target?: string;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const DefaultLinkV2: React.FC<LinkComponentPropsV2>;
|
|
21
|
+
export declare const ComponentConfigContextV2: import("react").Context<ComponentConfigV2>;
|
|
22
|
+
export declare const useComponentConfigV2: () => ComponentConfigV2;
|
|
23
|
+
export declare const ComponentConfigProviderV2: React.FC<PropsWithChildren<{
|
|
24
|
+
config: ComponentConfigParamV2;
|
|
25
|
+
}>>;
|
|
@@ -0,0 +1,37 @@
|
|
|
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 "react/jsx-runtime";
|
|
13
|
+
import { createContext, useContext, useMemo } from 'react';
|
|
14
|
+
const DEFAULT_EXTERNAL_LINK_MATCHER = /[a-zA-Z0-9]*:(\/\/)?[^\s]*/g;
|
|
15
|
+
export const DefaultLinkV2 = (_a) => {
|
|
16
|
+
var { to } = _a, rest = __rest(_a, ["to"]);
|
|
17
|
+
return _jsx("a", Object.assign({ href: to }, rest));
|
|
18
|
+
};
|
|
19
|
+
const defaultComponentConfig = {
|
|
20
|
+
link: {
|
|
21
|
+
externalMatcher: DEFAULT_EXTERNAL_LINK_MATCHER,
|
|
22
|
+
navigate: (url) => {
|
|
23
|
+
window.location.href = url;
|
|
24
|
+
},
|
|
25
|
+
internalLinkComponent: DefaultLinkV2,
|
|
26
|
+
externalLinkComponent: DefaultLinkV2,
|
|
27
|
+
},
|
|
28
|
+
modal: {
|
|
29
|
+
appElement: undefined,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export const ComponentConfigContextV2 = createContext(defaultComponentConfig);
|
|
33
|
+
export const useComponentConfigV2 = () => useContext(ComponentConfigContextV2);
|
|
34
|
+
export const ComponentConfigProviderV2 = ({ config: configParam, children }) => {
|
|
35
|
+
const config = useMemo(() => (Object.assign(Object.assign(Object.assign({}, defaultComponentConfig), configParam), { link: Object.assign(Object.assign({}, defaultComponentConfig.link), configParam.link) })), []);
|
|
36
|
+
return (_jsx(ComponentConfigContextV2.Provider, Object.assign({ value: config }, { children: children })));
|
|
37
|
+
};
|
|
@@ -9,7 +9,7 @@ export const MediaSizeProvider = ({ useHydrationPatch, ssrBreakpoint: ssrBreakpo
|
|
|
9
9
|
const [renderCount, setRenderCount] = useState(0);
|
|
10
10
|
const ssrBreakpoint = ssrBreakpointParam || -1;
|
|
11
11
|
const theme = useTheme();
|
|
12
|
-
const breakpoints = theme.breakpoints.map((bp) => parseInt(bp.slice(0, -2)), [theme]);
|
|
12
|
+
const breakpoints = (theme.breakpoints || ['576px', '768px', '992px', '1200px', '1400px']).map((bp) => parseInt((bp === null || bp === void 0 ? void 0 : bp.slice(0, -2)) || '0'), [theme]);
|
|
13
13
|
const getBreakpoint = (screenSize) => {
|
|
14
14
|
const closestBreakpoint = breakpoints.findIndex((bp) => screenSize < bp);
|
|
15
15
|
return closestBreakpoint === -1 ? breakpoints.length : closestBreakpoint;
|