@popsure/dirty-swan 0.65.1 → 0.66.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/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +361 -209
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/components/searchableDropdown/index.d.ts +22 -0
- package/dist/cjs/lib/components/searchableDropdown/index.stories.d.ts +108 -0
- package/dist/cjs/lib/components/searchableDropdown/index.test.d.ts +1 -0
- package/dist/cjs/lib/hooks/useDropdownAlignment.d.ts +5 -0
- package/dist/cjs/lib/index.d.ts +3 -2
- package/dist/esm/{Calendar-C7I0F5Gv.js → Calendar-8rhyapMz.js} +3 -19
- package/dist/esm/Calendar-8rhyapMz.js.map +1 -0
- package/dist/esm/components/dateSelector/components/Calendar.js +2 -1
- package/dist/esm/components/dateSelector/components/Calendar.js.map +1 -1
- package/dist/esm/components/dateSelector/index.js +2 -1
- package/dist/esm/components/dateSelector/index.js.map +1 -1
- package/dist/esm/components/dateSelector/index.stories.js +2 -1
- package/dist/esm/components/dateSelector/index.stories.js.map +1 -1
- package/dist/esm/components/dateSelector/index.test.js +2 -1
- package/dist/esm/components/dateSelector/index.test.js.map +1 -1
- package/dist/esm/components/searchableDropdown/index.js +13 -0
- package/dist/esm/components/searchableDropdown/index.js.map +1 -0
- package/dist/esm/components/searchableDropdown/index.stories.js +201 -0
- package/dist/esm/components/searchableDropdown/index.stories.js.map +1 -0
- package/dist/esm/components/searchableDropdown/index.test.js +607 -0
- package/dist/esm/components/searchableDropdown/index.test.js.map +1 -0
- package/dist/esm/components/toast/index.js +1 -1
- package/dist/esm/components/toast/index.stories.js +1 -1
- package/dist/esm/components/toast/index.test.js +1 -1
- package/dist/esm/{index-C4IAMlRE.js → index-CT0_LjIR.js} +2 -2
- package/dist/esm/{index-C4IAMlRE.js.map → index-CT0_LjIR.js.map} +1 -1
- package/dist/esm/index-QeP_xz9v.js +175 -0
- package/dist/esm/index-QeP_xz9v.js.map +1 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +7 -17
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/components/searchableDropdown/index.d.ts +22 -0
- package/dist/esm/lib/components/searchableDropdown/index.stories.d.ts +108 -0
- package/dist/esm/lib/components/searchableDropdown/index.test.d.ts +1 -0
- package/dist/esm/lib/hooks/useDropdownAlignment.d.ts +5 -0
- package/dist/esm/lib/index.d.ts +3 -2
- package/dist/esm/useOnClickOutside-B5hujnpp.js +21 -0
- package/dist/esm/useOnClickOutside-B5hujnpp.js.map +1 -0
- package/dist/esm/util/images/index.stories.js +2 -1
- package/dist/esm/util/images/index.stories.js.map +1 -1
- package/package.json +1 -1
- package/src/index.tsx +3 -0
- package/src/lib/components/searchableDropdown/index.stories.tsx +286 -0
- package/src/lib/components/searchableDropdown/index.test.tsx +355 -0
- package/src/lib/components/searchableDropdown/index.tsx +267 -0
- package/src/lib/components/searchableDropdown/style.module.scss +137 -0
- package/src/lib/hooks/useDropdownAlignment.test.ts +210 -0
- package/src/lib/hooks/useDropdownAlignment.ts +34 -0
- package/src/lib/index.tsx +8 -0
- package/dist/esm/Calendar-C7I0F5Gv.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sources":["../../../../../src/lib/components/searchableDropdown/index.test.tsx"],"sourcesContent":["import { render, screen } from '../../util/testUtils';\n\nimport { SearchableDropdown, SearchableDropdownProps } from '.';\n\nconst options = [\n { id: 'de', label: 'Germany' },\n { id: 'fr', label: 'France' },\n { id: 'es', label: 'Spain' },\n { id: 'it', label: 'Italy' },\n { id: 'pt', label: 'Portugal' },\n];\n\nconst defaultProps: SearchableDropdownProps = {\n options,\n value: 'de',\n onChange: jest.fn(),\n groupName: 'country',\n};\n\nconst setup = (props: Partial<SearchableDropdownProps> = {}) => {\n const onChange = jest.fn();\n const utils = render(\n <SearchableDropdown {...defaultProps} onChange={onChange} {...props} />\n );\n return { ...utils, onChange };\n};\n\ndescribe('SearchableDropdown', () => {\n describe('rendering', () => {\n it('should render the selected option label in the trigger', () => {\n setup();\n expect(screen.getByRole('button')).toHaveTextContent('Germany');\n });\n\n it('should render triggerPlaceholder when value is null', () => {\n setup({ value: null, triggerPlaceholder: 'Select a country' });\n expect(screen.getByRole('button')).toHaveTextContent('Select a country');\n });\n\n it('should not render the dropdown when closed', () => {\n setup();\n expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();\n });\n\n it('should render all options when opened', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n\n options.forEach((option) => {\n expect(screen.getByLabelText(option.label)).toBeInTheDocument();\n });\n });\n\n it('should render icons in options', async () => {\n const { user } = setup({\n options: [\n { id: 'de', label: 'Germany', icon: <span data-testid=\"icon-de\">flag</span> },\n ],\n });\n await user.click(screen.getByRole('button'));\n\n expect(screen.getAllByTestId('icon-de')).toHaveLength(2); // trigger + option\n });\n\n it('should render the selected option icon in the trigger', () => {\n setup({\n options: [\n { id: 'de', label: 'Germany', icon: <span data-testid=\"trigger-icon\">flag</span> },\n ],\n value: 'de',\n });\n\n expect(screen.getByTestId('trigger-icon')).toBeInTheDocument();\n });\n\n it('should show no results text when search has no matches', async () => {\n const { user } = setup({ searchable: true, noResultsText: 'Nothing here' });\n await user.click(screen.getByRole('button'));\n await user.type(screen.getByPlaceholderText('Search'), 'zzzzz');\n\n expect(screen.getByText('Nothing here')).toBeInTheDocument();\n });\n });\n\n describe('open / close', () => {\n it('should open the dropdown on trigger click', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n\n expect(screen.getByRole('radiogroup')).toBeInTheDocument();\n });\n\n it('should close the dropdown on second trigger click', async () => {\n const { user } = setup();\n const trigger = screen.getByRole('button');\n await user.click(trigger);\n await user.click(trigger);\n\n expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();\n });\n\n it('should close the dropdown on Escape', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n expect(screen.getByRole('radiogroup')).toBeInTheDocument();\n\n await user.keyboard('{Escape}');\n expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();\n });\n\n it('should close the dropdown when clicking outside', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n expect(screen.getByRole('radiogroup')).toBeInTheDocument();\n\n await user.click(document.body);\n expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();\n });\n });\n\n describe('selection', () => {\n it('should call onChange when an option is clicked', async () => {\n const { user, onChange } = setup();\n await user.click(screen.getByRole('button'));\n await user.click(screen.getByLabelText('France'));\n\n expect(onChange).toHaveBeenCalledWith('fr');\n });\n\n it('should close the dropdown after selecting an option', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n await user.click(screen.getByLabelText('France'));\n\n expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();\n });\n\n it('should mark the current value as checked', async () => {\n const { user } = setup({ value: 'fr' });\n await user.click(screen.getByRole('button'));\n\n expect(screen.getByRole('radio', { name: 'France' })).toBeChecked();\n });\n });\n\n describe('search', () => {\n it('should filter options based on search term', async () => {\n const { user } = setup({ searchable: true });\n await user.click(screen.getByRole('button'));\n await user.type(screen.getByPlaceholderText('Search'), 'ger');\n\n expect(screen.getByLabelText('Germany')).toBeInTheDocument();\n expect(screen.queryByLabelText('France')).not.toBeInTheDocument();\n });\n\n it('should prioritize options that start with the search term', async () => {\n const { user } = setup({\n searchable: true,\n options: [\n { id: 'al', label: 'Algeria' },\n { id: 'po', label: 'Portugal' },\n { id: 'pl', label: 'Poland' },\n ],\n });\n await user.click(screen.getByRole('button'));\n await user.type(screen.getByPlaceholderText('Search'), 'po');\n\n const radios = screen.getAllByRole('radio');\n expect(radios[0]).toHaveAttribute('value', 'po');\n expect(radios[1]).toHaveAttribute('value', 'pl');\n });\n\n it('should clear the search term when dropdown closes', async () => {\n const { user } = setup({ searchable: true });\n await user.click(screen.getByRole('button'));\n await user.type(screen.getByPlaceholderText('Search'), 'ger');\n await user.keyboard('{Escape}');\n\n await user.click(screen.getByRole('button'));\n expect(screen.getByPlaceholderText('Search')).toHaveValue('');\n expect(screen.getAllByRole('radio')).toHaveLength(options.length);\n });\n\n it('should select the first filtered option on Enter in search input', async () => {\n const { user, onChange } = setup({ searchable: true });\n await user.click(screen.getByRole('button'));\n await user.type(screen.getByPlaceholderText('Search'), 'fra');\n await user.keyboard('{Enter}');\n\n expect(onChange).toHaveBeenCalledWith('fr');\n });\n\n it('should use custom placeholder text', async () => {\n const { user } = setup({ searchable: true, placeholder: 'Find a country' });\n await user.click(screen.getByRole('button'));\n\n expect(screen.getByPlaceholderText('Find a country')).toBeInTheDocument();\n });\n });\n\n describe('keyboard navigation', () => {\n it('should move focus to the first option on ArrowDown from search input', async () => {\n const { user } = setup({ searchable: true });\n await user.click(screen.getByRole('button'));\n await user.keyboard('{ArrowDown}');\n\n expect(screen.getByRole('radio', { name: 'Germany' })).toHaveFocus();\n });\n\n it('should move focus to the last option on ArrowUp from search input', async () => {\n const { user } = setup({ searchable: true });\n await user.click(screen.getByRole('button'));\n await user.keyboard('{ArrowUp}');\n\n expect(screen.getByRole('radio', { name: 'Portugal' })).toHaveFocus();\n });\n\n it('should navigate between options with ArrowDown and ArrowUp', async () => {\n const { user } = setup({ searchable: true });\n await user.click(screen.getByRole('button'));\n await user.keyboard('{ArrowDown}');\n\n expect(screen.getByRole('radio', { name: 'Germany' })).toHaveFocus();\n\n await user.keyboard('{ArrowDown}');\n expect(screen.getByRole('radio', { name: 'France' })).toHaveFocus();\n\n await user.keyboard('{ArrowUp}');\n expect(screen.getByRole('radio', { name: 'Germany' })).toHaveFocus();\n });\n\n it('should not go past the last option on ArrowDown', async () => {\n const { user } = setup({\n searchable: true,\n options: [\n { id: 'a', label: 'Alpha' },\n { id: 'b', label: 'Beta' },\n ],\n });\n await user.click(screen.getByRole('button'));\n await user.keyboard('{ArrowDown}{ArrowDown}{ArrowDown}');\n\n expect(screen.getByRole('radio', { name: 'Beta' })).toHaveFocus();\n });\n\n it('should not go past the first option on ArrowUp', async () => {\n const { user } = setup({\n searchable: true,\n options: [\n { id: 'a', label: 'Alpha' },\n { id: 'b', label: 'Beta' },\n ],\n });\n await user.click(screen.getByRole('button'));\n await user.keyboard('{ArrowDown}{ArrowUp}{ArrowUp}');\n\n expect(screen.getByRole('radio', { name: 'Alpha' })).toHaveFocus();\n });\n\n it('should select option and close on Enter key', async () => {\n const { user, onChange } = setup({ searchable: true });\n await user.click(screen.getByRole('button'));\n await user.keyboard('{ArrowDown}{ArrowDown}{Enter}');\n\n expect(onChange).toHaveBeenCalledWith('fr');\n expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();\n });\n\n it('should select option and close on Space key', async () => {\n const { user, onChange } = setup({ searchable: true });\n await user.click(screen.getByRole('button'));\n await user.keyboard('{ArrowDown}{ArrowDown} ');\n\n expect(onChange).toHaveBeenCalledWith('fr');\n expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();\n });\n });\n\n describe('disabled', () => {\n it('should not open the dropdown when disabled', async () => {\n const { user } = setup({ disabled: true });\n await user.click(screen.getByRole('button'));\n\n expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument();\n });\n\n it('should have the disabled attribute on the trigger', () => {\n setup({ disabled: true });\n expect(screen.getByRole('button')).toBeDisabled();\n });\n });\n\n describe('accessibility', () => {\n it('should have aria-expanded false when closed', () => {\n setup();\n expect(screen.getByRole('button')).toHaveAttribute('aria-expanded', 'false');\n });\n\n it('should have aria-expanded true when open', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n\n expect(screen.getByRole('button')).toHaveAttribute('aria-expanded', 'true');\n });\n\n it('should have aria-haspopup on the trigger', () => {\n setup();\n expect(screen.getByRole('button')).toHaveAttribute('aria-haspopup', 'listbox');\n });\n\n it('should have aria-controls linking to the dropdown when open', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n\n const trigger = screen.getByRole('button');\n const controlsId = trigger.getAttribute('aria-controls');\n expect(controlsId).toBeTruthy();\n expect(document.getElementById(controlsId!)).toBeInTheDocument();\n });\n\n it('should have a radiogroup with aria-label', async () => {\n const { user } = setup({ groupName: 'test-group' });\n await user.click(screen.getByRole('button'));\n\n expect(screen.getByRole('radiogroup')).toHaveAttribute('aria-label', 'test-group');\n });\n\n it('should return focus to the trigger after selection', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n await user.click(screen.getByLabelText('France'));\n\n expect(screen.getByRole('button')).toHaveFocus();\n });\n\n it('should return focus to the trigger after pressing Escape', async () => {\n const { user } = setup();\n await user.click(screen.getByRole('button'));\n await user.keyboard('{Escape}');\n\n expect(screen.getByRole('button')).toHaveFocus();\n });\n });\n\n describe('groupName', () => {\n it('should auto-generate a groupName when not provided', async () => {\n const { user } = setup({ groupName: undefined });\n await user.click(screen.getByRole('button'));\n\n expect(screen.getByRole('radiogroup')).toHaveAttribute('aria-label');\n const radios = screen.getAllByRole('radio');\n expect(radios[0]).toHaveAttribute('name');\n });\n });\n});\n"],"names":["render","_jsx"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '../../tslib.es6-CVlKGIvp.js';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import '../../index-DLQEsiym.js';
|
|
4
|
-
export {
|
|
4
|
+
export { a as Toast, T as Toaster, t as toast } from '../../index-CT0_LjIR.js';
|
|
5
5
|
import '../../index-D_8pWbzR.js';
|
|
6
6
|
import 'react';
|
|
7
7
|
import '../icon/icons/X.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { b as __assign } from '../../tslib.es6-CVlKGIvp.js';
|
|
2
2
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import {
|
|
3
|
+
import { a as Toast, T as Toaster, t as toast, s as styles } from '../../index-CT0_LjIR.js';
|
|
4
4
|
import { Button } from '../button/index.js';
|
|
5
5
|
import { c as classNames } from '../../index-DLQEsiym.js';
|
|
6
6
|
import '../../style-inject.es-tgCJW-Cu.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _ as __awaiter, a as __generator } from '../../tslib.es6-CVlKGIvp.js';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { c as customRender, s as screen } from '../../customRender-DzdqZxUd.js';
|
|
4
|
-
import {
|
|
4
|
+
import { a as Toast } from '../../index-CT0_LjIR.js';
|
|
5
5
|
import '../../_commonjsHelpers-BFTU3MAI.js';
|
|
6
6
|
import 'react';
|
|
7
7
|
import 'react-dom';
|
|
@@ -28,5 +28,5 @@ var toast = function (title, _a) {
|
|
|
28
28
|
return (n(function (t) { return (jsx(Toast, __assign({ title: title, onDismiss: function () { return n.dismiss(t.id); } }, toastOptions))); }, { duration: duration }));
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
export {
|
|
32
|
-
//# sourceMappingURL=index-
|
|
31
|
+
export { Toaster as T, Toast as a, styles as s, toast as t };
|
|
32
|
+
//# sourceMappingURL=index-CT0_LjIR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-CT0_LjIR.js","sources":["../../../src/lib/components/toast/index.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport classNames from 'classnames';\n\nimport styles from './style.module.scss';\nimport { Toaster as HotToaster, toast as hotToast } from 'react-hot-toast';\nimport { XIcon } from '../icon';\n\nexport interface ToasterProps {\n classNames?: {\n wrapper?: string;\n toast?: string;\n };\n}\n\nexport type ToastType = 'warning' | 'error' | 'success' | 'information';\n\nexport interface ToastOptions {\n type?: ToastType;\n description?: ReactNode;\n duration?: number;\n action?: {\n title: string;\n onClick: () => void;\n }\n};\n\nexport interface ToastProps extends ToastOptions { \n onDismiss: () => void,\n title: string \n};\n\nconst Toaster = ({ classNames: toasterClassNames }: ToasterProps) => (\n <HotToaster \n containerClassName={toasterClassNames?.wrapper}\n toastOptions={{\n className: classNames(styles.toast, 'bs-lg', toasterClassNames?.toast),\n }}\n />\n);\n\nconst Toast = ({\n action,\n description,\n onDismiss,\n title,\n type = \"success\"\n}: ToastProps) => (\n <div \n className={classNames(\n styles.toastContent,\n 'd-flex jc-between w100'\n )}>\n <div\n className={classNames(\n styles.toastSidebar, \n styles[`toastSidebar--${type}`]\n )}\n />\n <div className='d-flex fd-column jc-center ta-left mr8'>\n <h4 className='p-h4'>{title}</h4>\n \n {description && (\n <p className='p-p p-p--small mt8 tc-neutral-700'>{description}</p>\n )}\n\n {action && (\n <button\n className={classNames(\n styles.actionButton,\n styles[`actionButton--${type}`],\n 'mt8 c-pointer ta-left'\n )}\n onClick={() => {\n action.onClick();\n onDismiss();\n }}\n type=\"button\"\n >\n {action.title}\n </button>\n )}\n </div>\n\n <div className='d-flex ai-center'>\n <button\n className={classNames(styles.closeButton, 'c-pointer')}\n onClick={onDismiss}\n data-testid=\"toast-close-button\"\n >\n <XIcon size={24} /> \n </button>\n </div>\n </div>\n);\n\nconst toast = (title: string, { duration = 3000, ...toastOptions }: ToastOptions) => (\n hotToast((t) => (\n <Toast\n title={title} \n onDismiss={() => hotToast.dismiss(t.id)} \n {...toastOptions}\n />\n ), { duration })\n);\n\nexport { Toaster, Toast, toast };\n"],"names":["_jsx","HotToaster","_jsxs","hotToast"],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { d as __spreadArray } from './tslib.es6-CVlKGIvp.js';
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useState, useCallback, useEffect, useRef, useMemo } from 'react';
|
|
4
|
+
import { c as classNames } from './index-DLQEsiym.js';
|
|
5
|
+
import { Input } from './components/input/index.js';
|
|
6
|
+
import ChevronDownIcon from './components/icon/icons/ChevronDown.js';
|
|
7
|
+
import { u as useOnClickOutside } from './useOnClickOutside-B5hujnpp.js';
|
|
8
|
+
import { g as generateId } from './index-CNcEE5dn.js';
|
|
9
|
+
import { s as styleInject } from './style-inject.es-tgCJW-Cu.js';
|
|
10
|
+
|
|
11
|
+
var useDropdownAlignment = function (containerRef, dropdownRef, isOpen) {
|
|
12
|
+
var _a = useState(false), alignRight = _a[0], setAlignRight = _a[1];
|
|
13
|
+
var _b = useState(false), alignUp = _b[0], setAlignUp = _b[1];
|
|
14
|
+
var updateAlignment = useCallback(function () {
|
|
15
|
+
if (containerRef.current && dropdownRef.current) {
|
|
16
|
+
var containerRect = containerRef.current.getBoundingClientRect();
|
|
17
|
+
var dropdownWidth = dropdownRef.current.offsetWidth;
|
|
18
|
+
var dropdownHeight = dropdownRef.current.offsetHeight;
|
|
19
|
+
var spaceOnRight = window.innerWidth - containerRect.left;
|
|
20
|
+
var spaceBelow = window.innerHeight - containerRect.bottom;
|
|
21
|
+
setAlignRight(spaceOnRight < dropdownWidth);
|
|
22
|
+
setAlignUp(spaceBelow < dropdownHeight && containerRect.top > spaceBelow);
|
|
23
|
+
}
|
|
24
|
+
}, [containerRef, dropdownRef]);
|
|
25
|
+
useEffect(function () {
|
|
26
|
+
if (!isOpen)
|
|
27
|
+
return;
|
|
28
|
+
updateAlignment();
|
|
29
|
+
var observer = new ResizeObserver(updateAlignment);
|
|
30
|
+
observer.observe(document.documentElement);
|
|
31
|
+
return function () { return observer.disconnect(); };
|
|
32
|
+
}, [isOpen, updateAlignment]);
|
|
33
|
+
return { alignRight: alignRight, alignUp: alignUp };
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
var useEscapeKey = function (callback) {
|
|
37
|
+
var handleOnEscape = useCallback(function (e) {
|
|
38
|
+
if (e.key === 'Escape') {
|
|
39
|
+
callback();
|
|
40
|
+
}
|
|
41
|
+
}, [callback]);
|
|
42
|
+
useEffect(function () {
|
|
43
|
+
window.addEventListener('keydown', handleOnEscape);
|
|
44
|
+
return function () { return window.removeEventListener('keydown', handleOnEscape); };
|
|
45
|
+
}, [handleOnEscape]);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
var css_248z = ".style-module_bs-xs__2KEsk {\n box-shadow: 0 2px 12px rgba(38, 38, 46, 0.03);\n}\n\n.style-module_bs-sm__3u9QM {\n box-shadow: 0 2px 20px 0 rgba(38, 38, 46, 0.04);\n}\n\n.style-module_bs-md__2LfxW {\n box-shadow: 0 2px 28px rgba(38, 38, 46, 0.08);\n}\n\n.style-module_bs-lg__2Qx0R {\n box-shadow: 0 2px 32px rgba(38, 38, 46, 0.1);\n}\n\n.style-module_bs-xl__kaOuM {\n box-shadow: 0 2px 50px rgba(38, 38, 46, 0.18);\n}\n\n.style-module_container__2064q {\n position: relative;\n}\n\n.style-module_selectTrigger__1GiSB {\n padding: 10px 12px;\n border: 1px solid #e7e7ed;\n}\n.style-module_selectTrigger__1GiSB:hover {\n border-color: #b8b8c0;\n}\n.style-module_selectTrigger__1GiSB:focus-visible {\n outline: 1px solid #26262e;\n outline-offset: 1px;\n}\n.style-module_selectTriggerOpen__29Kor {\n border-color: #26262e;\n box-shadow: 0 2px 12px rgba(38, 38, 46, 0.03);\n}\n\n.style-module_disabled__2BlO- {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.style-module_chevronOpen__Ot3RV {\n transform: rotate(180deg);\n}\n\n.style-module_condensed__GDq0d {\n width: auto;\n padding: 8px 10px;\n gap: 8px;\n}\n\n.style-module_bordered__tRh9H {\n border: 1px solid #e7e7ed;\n}\n.style-module_bordered__tRh9H:hover {\n border-color: #b8b8c0;\n}\n\n.style-module_dropdown__1A-wl {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n min-width: 280px;\n border: 1px solid #e7e7ed;\n box-shadow: 0 2px 28px rgba(38, 38, 46, 0.08);\n z-index: 10;\n}\n\n.style-module_dropdownRight__lLMiT {\n left: auto;\n right: 0;\n}\n\n.style-module_dropdownUp__2PCvx {\n top: auto;\n bottom: calc(100% + 4px);\n}\n.style-module_dropdownUp__2PCvx .style-module_searchContainer__4O1qv {\n order: 2;\n padding-bottom: 0;\n padding-top: 8px;\n}\n.style-module_dropdownUp__2PCvx .style-module_optionList__-2I8l {\n order: 1;\n}\n\n.style-module_searchContainer__4O1qv {\n position: sticky;\n top: 0;\n}\n\n.style-module_optionList__-2I8l {\n max-height: 308px;\n overflow-y: auto;\n scrollbar-width: none;\n}\n.style-module_optionList__-2I8l::-webkit-scrollbar {\n display: none;\n}\n\n.style-module_optionWrapper__3GVCB {\n position: relative;\n}\n\n.style-module_optionRadio__3GBog {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n.style-module_optionRadio__3GBog:focus-visible + label {\n outline: 2px solid #26262e;\n outline-offset: -2px;\n border-radius: 8px;\n}\n\n.style-module_option__1HkKR {\n padding: 10px 12px;\n border: none;\n background-color: transparent;\n}\n.style-module_option__1HkKR:hover {\n background-color: #f7f7fd;\n}\n.style-module_optionSelected__2pPt9 {\n background-color: #F6F6FE;\n}\n.style-module_optionSelected__2pPt9:hover {\n background-color: #F6F6FE;\n}\n\n.style-module_optionIcon__2hBSY {\n flex-shrink: 0;\n}\n\n.style-module_noResults__18exv {\n padding: 10px 12px;\n}";
|
|
49
|
+
var styles = {"container":"style-module_container__2064q","selectTrigger":"style-module_selectTrigger__1GiSB","selectTriggerOpen":"style-module_selectTriggerOpen__29Kor","disabled":"style-module_disabled__2BlO-","chevronOpen":"style-module_chevronOpen__Ot3RV","condensed":"style-module_condensed__GDq0d","bordered":"style-module_bordered__tRh9H","dropdown":"style-module_dropdown__1A-wl","dropdownRight":"style-module_dropdownRight__lLMiT","dropdownUp":"style-module_dropdownUp__2PCvx","searchContainer":"style-module_searchContainer__4O1qv","optionList":"style-module_optionList__-2I8l","optionWrapper":"style-module_optionWrapper__3GVCB","optionRadio":"style-module_optionRadio__3GBog","option":"style-module_option__1HkKR","optionSelected":"style-module_optionSelected__2pPt9","optionIcon":"style-module_optionIcon__2hBSY","noResults":"style-module_noResults__18exv"};
|
|
50
|
+
styleInject(css_248z);
|
|
51
|
+
|
|
52
|
+
var SearchableDropdown = function (_a) {
|
|
53
|
+
var _b, _c, _d;
|
|
54
|
+
var _e;
|
|
55
|
+
var options = _a.options, value = _a.value, onChange = _a.onChange, _f = _a.searchable, searchable = _f === void 0 ? false : _f, _g = _a.placeholder, placeholder = _g === void 0 ? 'Search' : _g, triggerPlaceholder = _a.triggerPlaceholder, _h = _a.noResultsText, noResultsText = _h === void 0 ? 'No results found' : _h, groupNameProp = _a.groupName, _j = _a.dropUp, dropUp = _j === void 0 ? false : _j, _k = _a.condensed, condensed = _k === void 0 ? false : _k, _l = _a.bordered, bordered = _l === void 0 ? false : _l, _m = _a.showChevron, showChevron = _m === void 0 ? false : _m, _o = _a.disabled, disabled = _o === void 0 ? false : _o;
|
|
56
|
+
var _p = useState(false), isOpen = _p[0], setIsOpen = _p[1];
|
|
57
|
+
var _q = useState(''), searchTerm = _q[0], setSearchTerm = _q[1];
|
|
58
|
+
var _r = useState(value), localValue = _r[0], setLocalValue = _r[1];
|
|
59
|
+
var searchInputRef = useRef(null);
|
|
60
|
+
var containerRef = useRef(null);
|
|
61
|
+
var triggerRef = useRef(null);
|
|
62
|
+
var dropdownRef = useRef(null);
|
|
63
|
+
var optionRefs = useRef(new Map());
|
|
64
|
+
var groupName = useState(function () { return groupNameProp !== null && groupNameProp !== void 0 ? groupNameProp : "sd-".concat(generateId()); })[0];
|
|
65
|
+
var dropdownId = "".concat(groupName, "-dropdown");
|
|
66
|
+
var closeAndRestoreFocus = useCallback(function () {
|
|
67
|
+
var _a;
|
|
68
|
+
setIsOpen(false);
|
|
69
|
+
(_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
70
|
+
}, []);
|
|
71
|
+
useOnClickOutside(containerRef, function () { return isOpen && closeAndRestoreFocus(); });
|
|
72
|
+
useEscapeKey(useCallback(function () {
|
|
73
|
+
if (isOpen)
|
|
74
|
+
closeAndRestoreFocus();
|
|
75
|
+
}, [isOpen, closeAndRestoreFocus]));
|
|
76
|
+
var _s = useDropdownAlignment(containerRef, dropdownRef, isOpen), alignRight = _s.alignRight, alignUp = _s.alignUp;
|
|
77
|
+
useEffect(function () {
|
|
78
|
+
if (isOpen && searchable && searchInputRef.current) {
|
|
79
|
+
searchInputRef.current.focus();
|
|
80
|
+
}
|
|
81
|
+
}, [isOpen, searchable]);
|
|
82
|
+
useEffect(function () {
|
|
83
|
+
if (!isOpen) {
|
|
84
|
+
setSearchTerm('');
|
|
85
|
+
setLocalValue(value);
|
|
86
|
+
}
|
|
87
|
+
}, [isOpen, value]);
|
|
88
|
+
var filteredOptions = useMemo(function () {
|
|
89
|
+
if (!searchTerm)
|
|
90
|
+
return options;
|
|
91
|
+
return __spreadArray([], options, true).filter(function (option) {
|
|
92
|
+
return option.label.toLowerCase().includes(searchTerm.toLowerCase());
|
|
93
|
+
})
|
|
94
|
+
.sort(function (a, b) {
|
|
95
|
+
var term = searchTerm.toLowerCase();
|
|
96
|
+
var aStartsWith = a.label.toLowerCase().startsWith(term);
|
|
97
|
+
var bStartsWith = b.label.toLowerCase().startsWith(term);
|
|
98
|
+
if (aStartsWith && !bStartsWith)
|
|
99
|
+
return -1;
|
|
100
|
+
if (!aStartsWith && bStartsWith)
|
|
101
|
+
return 1;
|
|
102
|
+
return 0;
|
|
103
|
+
});
|
|
104
|
+
}, [options, searchTerm]);
|
|
105
|
+
var selectedOption = options.find(function (option) { return option.id === value; });
|
|
106
|
+
var handleTriggerClick = function () {
|
|
107
|
+
if (!disabled)
|
|
108
|
+
setIsOpen(!isOpen);
|
|
109
|
+
};
|
|
110
|
+
var handleSearchKeyDown = function (e) {
|
|
111
|
+
var _a;
|
|
112
|
+
if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
|
113
|
+
e.preventDefault();
|
|
114
|
+
var target = e.key === 'ArrowDown'
|
|
115
|
+
? filteredOptions[0]
|
|
116
|
+
: filteredOptions[filteredOptions.length - 1];
|
|
117
|
+
if (target) {
|
|
118
|
+
setLocalValue(target.id);
|
|
119
|
+
(_a = optionRefs.current.get(target.id)) === null || _a === void 0 ? void 0 : _a.focus();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (e.key === 'Enter') {
|
|
123
|
+
e.preventDefault();
|
|
124
|
+
var target = filteredOptions[0];
|
|
125
|
+
if (target) {
|
|
126
|
+
onChange(target.id);
|
|
127
|
+
closeAndRestoreFocus();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
var handleOptionClick = function (optionId) {
|
|
132
|
+
onChange(optionId);
|
|
133
|
+
closeAndRestoreFocus();
|
|
134
|
+
};
|
|
135
|
+
var handleOptionRef = function (optionId, el) {
|
|
136
|
+
if (el)
|
|
137
|
+
optionRefs.current.set(optionId, el);
|
|
138
|
+
else
|
|
139
|
+
optionRefs.current.delete(optionId);
|
|
140
|
+
};
|
|
141
|
+
var handleOptionKeyDown = function (e, optionId) {
|
|
142
|
+
var _a;
|
|
143
|
+
if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
|
144
|
+
e.preventDefault();
|
|
145
|
+
var currentIndex = filteredOptions.findIndex(function (o) { return o.id === optionId; });
|
|
146
|
+
var nextIndex = e.key === 'ArrowDown'
|
|
147
|
+
? Math.min(currentIndex + 1, filteredOptions.length - 1)
|
|
148
|
+
: Math.max(currentIndex - 1, 0);
|
|
149
|
+
var next = filteredOptions[nextIndex];
|
|
150
|
+
if (next) {
|
|
151
|
+
setLocalValue(next.id);
|
|
152
|
+
(_a = optionRefs.current.get(next.id)) === null || _a === void 0 ? void 0 : _a.focus();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (e.key === 'Enter' || e.key === ' ') {
|
|
156
|
+
e.preventDefault();
|
|
157
|
+
onChange(optionId);
|
|
158
|
+
closeAndRestoreFocus();
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
return (jsxs("div", { className: classNames(styles.container, { 'd-inline-block': condensed }), ref: containerRef, children: [jsxs("button", { ref: triggerRef, type: "button", className: classNames('d-flex ai-center jc-between w100 br8 bg-white c-pointer ta-left tc-neutral-900', styles.selectTrigger, (_b = {},
|
|
162
|
+
_b[styles.selectTriggerOpen] = isOpen,
|
|
163
|
+
_b[styles.condensed] = condensed,
|
|
164
|
+
_b[styles.bordered] = bordered,
|
|
165
|
+
_b[styles.disabled] = disabled,
|
|
166
|
+
_b)), onClick: handleTriggerClick, disabled: disabled, "aria-expanded": isOpen, "aria-haspopup": "listbox", "aria-controls": isOpen ? dropdownId : undefined, children: [jsxs("span", { className: 'd-flex ai-center gap8', children: [(selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.icon) && (jsx("span", { className: styles.optionIcon, children: selectedOption.icon })), !condensed && (jsx("span", { className: "p-p", children: (_e = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) !== null && _e !== void 0 ? _e : triggerPlaceholder }))] }), showChevron && (jsx(ChevronDownIcon, { className: classNames('ml8', (_c = {}, _c[styles.chevronOpen] = isOpen, _c)), size: 20, noMargin: true, color: "neutral-600" }))] }), isOpen && (jsxs("div", { id: dropdownId, ref: dropdownRef, className: classNames(styles.dropdown, 'bg-white br8 p8 d-flex fd-column', (_d = {}, _d[styles.dropdownUp] = dropUp || alignUp, _d[styles.dropdownRight] = alignRight, _d)), children: [searchable && (jsx("div", { className: classNames('pb8 bg-white', styles.searchContainer), children: jsx(Input, { ref: searchInputRef, type: "text", placeholder: placeholder, value: searchTerm, onChange: function (e) { return setSearchTerm(e.target.value); }, label: placeholder, hideLabel: true, onKeyDown: handleSearchKeyDown }) })), jsxs("div", { className: styles.optionList, role: "radiogroup", "aria-label": groupName, children: [filteredOptions.map(function (option) {
|
|
167
|
+
var _a;
|
|
168
|
+
return (jsxs("div", { className: styles.optionWrapper, children: [jsx("input", { type: "radio", id: "".concat(groupName, "-").concat(option.id), name: groupName, value: option.id, checked: option.id === localValue, onChange: function () { return setLocalValue(option.id); }, onClick: function () { return handleOptionClick(option.id); }, tabIndex: option.id === localValue ? 0 : -1, className: styles.optionRadio, ref: function (el) { return handleOptionRef(option.id, el); }, onKeyDown: function (e) { return handleOptionKeyDown(e, option.id); } }), jsxs("label", { htmlFor: "".concat(groupName, "-").concat(option.id), className: classNames('d-flex ai-center gap8 w100 br8 c-pointer ta-left tc-neutral-900', styles.option, (_a = {},
|
|
169
|
+
_a[styles.optionSelected] = option.id === localValue,
|
|
170
|
+
_a)), children: [option.icon && (jsx("span", { className: styles.optionIcon, children: option.icon })), jsx("span", { className: "p-p", children: option.label })] })] }, option.id));
|
|
171
|
+
}), filteredOptions.length === 0 && (jsx("p", { className: "p-p tc-neutral-500 ".concat(styles.noResults), children: noResultsText }))] })] }))] }));
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export { SearchableDropdown as S, useEscapeKey as u };
|
|
175
|
+
//# sourceMappingURL=index-QeP_xz9v.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-QeP_xz9v.js","sources":["../../../src/lib/hooks/useDropdownAlignment.ts","../../../src/lib/hooks/useEscapeKey.ts","../../../src/lib/components/searchableDropdown/index.tsx"],"sourcesContent":["import { RefObject, useCallback, useEffect, useState } from 'react';\n\nexport const useDropdownAlignment = (\n containerRef: RefObject<HTMLElement | null>,\n dropdownRef: RefObject<HTMLElement | null>,\n isOpen: boolean\n) => {\n const [alignRight, setAlignRight] = useState(false);\n const [alignUp, setAlignUp] = useState(false);\n\n const updateAlignment = useCallback(() => {\n if (containerRef.current && dropdownRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect();\n const dropdownWidth = dropdownRef.current.offsetWidth;\n const dropdownHeight = dropdownRef.current.offsetHeight;\n const spaceOnRight = window.innerWidth - containerRect.left;\n const spaceBelow = window.innerHeight - containerRect.bottom;\n setAlignRight(spaceOnRight < dropdownWidth);\n setAlignUp(spaceBelow < dropdownHeight && containerRect.top > spaceBelow);\n }\n }, [containerRef, dropdownRef]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n updateAlignment();\n\n const observer = new ResizeObserver(updateAlignment);\n observer.observe(document.documentElement);\n return () => observer.disconnect();\n }, [isOpen, updateAlignment]);\n\n return { alignRight, alignUp };\n};\n","import { useCallback, useEffect } from 'react';\n\nexport const useEscapeKey = (callback: () => void) => {\n const handleOnEscape = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n callback();\n }\n },\n [callback]\n );\n\n useEffect(() => {\n window.addEventListener('keydown', handleOnEscape);\n\n return () => window.removeEventListener('keydown', handleOnEscape);\n }, [handleOnEscape]);\n};\n","import { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { Input } from '../input';\nimport { ChevronDownIcon } from '../icon';\nimport { useDropdownAlignment } from '../../hooks/useDropdownAlignment';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useOnClickOutside } from '../../hooks/useOnClickOutside';\nimport generateId from '../../util/generateId';\n\nimport styles from './style.module.scss';\n\nexport interface SearchableDropdownOption {\n id: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface SearchableDropdownProps {\n options: SearchableDropdownOption[];\n value: string | null;\n onChange: (value: string) => void;\n searchable?: boolean;\n placeholder?: string;\n triggerPlaceholder?: string;\n noResultsText?: string;\n groupName?: string;\n dropUp?: boolean;\n condensed?: boolean;\n bordered?: boolean;\n showChevron?: boolean;\n disabled?: boolean;\n}\n\nexport const SearchableDropdown = ({\n options,\n value,\n onChange,\n searchable = false,\n placeholder = 'Search',\n triggerPlaceholder,\n noResultsText = 'No results found',\n groupName: groupNameProp,\n dropUp = false,\n condensed = false,\n bordered = false,\n showChevron = false,\n disabled = false,\n}: SearchableDropdownProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [localValue, setLocalValue] = useState(value);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const optionRefs = useRef<Map<string, HTMLInputElement>>(new Map());\n const [groupName] = useState(() => groupNameProp ?? `sd-${generateId()}`);\n const dropdownId = `${groupName}-dropdown`;\n\n const closeAndRestoreFocus = useCallback(() => {\n setIsOpen(false);\n triggerRef.current?.focus();\n }, []);\n\n useOnClickOutside(containerRef, () => isOpen && closeAndRestoreFocus());\n useEscapeKey(\n useCallback(() => {\n if (isOpen) closeAndRestoreFocus();\n }, [isOpen, closeAndRestoreFocus])\n );\n\n const { alignRight, alignUp } = useDropdownAlignment(containerRef, dropdownRef, isOpen);\n\n useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n useEffect(() => {\n if (!isOpen) {\n setSearchTerm('');\n setLocalValue(value);\n }\n }, [isOpen, value]);\n\n const filteredOptions = useMemo(() => {\n if (!searchTerm) return options;\n return [...options]\n .filter((option) =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase())\n )\n .sort((a, b) => {\n const term = searchTerm.toLowerCase();\n const aStartsWith = a.label.toLowerCase().startsWith(term);\n const bStartsWith = b.label.toLowerCase().startsWith(term);\n if (aStartsWith && !bStartsWith) return -1;\n if (!aStartsWith && bStartsWith) return 1;\n return 0;\n });\n }, [options, searchTerm]);\n\n const selectedOption = options.find((option) => option.id === value);\n\n const handleTriggerClick = () => {\n if (!disabled) setIsOpen(!isOpen);\n };\n\n const handleSearchKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const target =\n e.key === 'ArrowDown'\n ? filteredOptions[0]\n : filteredOptions[filteredOptions.length - 1];\n if (target) {\n setLocalValue(target.id);\n optionRefs.current.get(target.id)?.focus();\n }\n } else if (e.key === 'Enter') {\n e.preventDefault();\n const target = filteredOptions[0];\n if (target) {\n onChange(target.id);\n closeAndRestoreFocus();\n }\n }\n };\n\n const handleOptionClick = (optionId: string) => {\n onChange(optionId);\n closeAndRestoreFocus();\n };\n\n const handleOptionRef = (optionId: string, el: HTMLInputElement | null) => {\n if (el) optionRefs.current.set(optionId, el);\n else optionRefs.current.delete(optionId);\n };\n\n const handleOptionKeyDown = (e: React.KeyboardEvent, optionId: string) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const currentIndex = filteredOptions.findIndex(\n (o) => o.id === optionId\n );\n const nextIndex =\n e.key === 'ArrowDown'\n ? Math.min(currentIndex + 1, filteredOptions.length - 1)\n : Math.max(currentIndex - 1, 0);\n const next = filteredOptions[nextIndex];\n if (next) {\n setLocalValue(next.id);\n optionRefs.current.get(next.id)?.focus();\n }\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onChange(optionId);\n closeAndRestoreFocus();\n }\n };\n\n return (\n <div className={classnames(styles.container, { 'd-inline-block': condensed })} ref={containerRef}>\n <button\n ref={triggerRef}\n type=\"button\"\n className={classnames(\n 'd-flex ai-center jc-between w100 br8 bg-white c-pointer ta-left tc-neutral-900',\n styles.selectTrigger, {\n [styles.selectTriggerOpen]: isOpen,\n [styles.condensed]: condensed,\n [styles.bordered]: bordered,\n [styles.disabled]: disabled,\n }\n )}\n onClick={handleTriggerClick}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={isOpen ? dropdownId : undefined}\n >\n <span className={'d-flex ai-center gap8'}>\n {selectedOption?.icon && (\n <span className={styles.optionIcon}>{selectedOption.icon}</span>\n )}\n {!condensed && (\n <span className=\"p-p\">\n {selectedOption?.label ?? triggerPlaceholder}\n </span>\n )}\n </span>\n {showChevron && (\n <ChevronDownIcon\n className={classnames('ml8', { [styles.chevronOpen]: isOpen })}\n size={20}\n noMargin\n color=\"neutral-600\"\n />\n )}\n </button>\n {isOpen && (\n <div\n id={dropdownId}\n ref={dropdownRef}\n className={classnames(\n styles.dropdown,\n 'bg-white br8 p8 d-flex fd-column',\n { [styles.dropdownUp]: dropUp || alignUp, [styles.dropdownRight]: alignRight }\n )}\n >\n {searchable && (\n <div className={classnames('pb8 bg-white', styles.searchContainer)}>\n <Input\n ref={searchInputRef}\n type=\"text\"\n placeholder={placeholder}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n label={placeholder}\n hideLabel\n onKeyDown={handleSearchKeyDown}\n />\n </div>\n )}\n <div className={styles.optionList} role=\"radiogroup\" aria-label={groupName}>\n {filteredOptions.map((option) => (\n <div key={option.id} className={styles.optionWrapper}>\n <input\n type=\"radio\"\n id={`${groupName}-${option.id}`}\n name={groupName}\n value={option.id}\n checked={option.id === localValue}\n onChange={() => setLocalValue(option.id)}\n onClick={() => handleOptionClick(option.id)}\n tabIndex={option.id === localValue ? 0 : -1}\n className={styles.optionRadio}\n ref={(el) => handleOptionRef(option.id, el)}\n onKeyDown={(e) => handleOptionKeyDown(e, option.id)}\n />\n <label\n htmlFor={`${groupName}-${option.id}`}\n className={classnames(\n 'd-flex ai-center gap8 w100 br8 c-pointer ta-left tc-neutral-900',\n styles.option, {\n [styles.optionSelected]: option.id === localValue,\n })}\n >\n {option.icon && (\n <span className={styles.optionIcon}>{option.icon}</span>\n )}\n <span className=\"p-p\">{option.label}</span>\n </label>\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <p className={`p-p tc-neutral-500 ${styles.noResults}`}>\n {noResultsText}\n </p>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"names":["_jsxs","classnames","_jsx"],"mappings":";;;;;;;;;;AAEO,IAAM,oBAAoB,GAAG,UAClC,YAA2C,EAC3C,WAA0C,EAC1C,MAAe,EAAA;IAET,IAAA,EAAA,GAA8B,QAAQ,CAAC,KAAK,CAAC,EAA5C,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAAmB;IAC7C,IAAA,EAAA,GAAwB,QAAQ,CAAC,KAAK,CAAC,EAAtC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAmB;IAE7C,IAAM,eAAe,GAAG,WAAW,CAAC,YAAA;QAClC,IAAI,YAAY,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE;YAC/C,IAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE;AAClE,YAAA,IAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW;AACrD,YAAA,IAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY;YACvD,IAAM,YAAY,GAAG,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI;YAC3D,IAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,MAAM;AAC5D,YAAA,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC;YAC3C,UAAU,CAAC,UAAU,GAAG,cAAc,IAAI,aAAa,CAAC,GAAG,GAAG,UAAU,CAAC;QAC3E;AACF,IAAA,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAE/B,IAAA,SAAS,CAAC,YAAA;AACR,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,eAAe,EAAE;AAEjB,QAAA,IAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC;AACpD,QAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1C,OAAO,YAAA,EAAM,OAAA,QAAQ,CAAC,UAAU,EAAE,CAAA,CAArB,CAAqB;AACpC,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE7B,IAAA,OAAO,EAAE,UAAU,EAAA,UAAA,EAAE,OAAO,EAAA,OAAA,EAAE;AAChC,CAAC;;AC/BM,IAAM,YAAY,GAAG,UAAC,QAAoB,EAAA;AAC/C,IAAA,IAAM,cAAc,GAAG,WAAW,CAChC,UAAC,CAAgB,EAAA;AACf,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AACtB,YAAA,QAAQ,EAAE;QACZ;AACF,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;AAED,IAAA,SAAS,CAAC,YAAA;AACR,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC;AAElD,QAAA,OAAO,YAAA,EAAM,OAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA,CAArD,CAAqD;AACpE,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AACtB;;;;;;ACiBO,IAAM,kBAAkB,GAAG,UAAC,EAcT,EAAA;;;AAbxB,IAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,EAAA,GAAA,EAAA,CAAA,UAAkB,EAAlB,UAAU,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,KAAA,EAClB,EAAA,GAAA,EAAA,CAAA,WAAsB,EAAtB,WAAW,GAAA,EAAA,KAAA,MAAA,GAAG,QAAQ,GAAA,EAAA,EACtB,kBAAkB,GAAA,EAAA,CAAA,kBAAA,EAClB,EAAA,GAAA,EAAA,CAAA,aAAkC,EAAlC,aAAa,GAAA,EAAA,KAAA,MAAA,GAAG,kBAAkB,GAAA,EAAA,EACvB,aAAa,GAAA,EAAA,CAAA,SAAA,EACxB,EAAA,GAAA,EAAA,CAAA,MAAc,EAAd,MAAM,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,KAAA,EACd,EAAA,GAAA,EAAA,CAAA,SAAiB,EAAjB,SAAS,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA,EAAA,EACjB,gBAAgB,EAAhB,QAAQ,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA,EAAA,EAChB,EAAA,GAAA,EAAA,CAAA,WAAmB,EAAnB,WAAW,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA,EAAA,EACnB,EAAA,GAAA,EAAA,CAAA,QAAgB,EAAhB,QAAQ,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA,EAAA;IAEV,IAAA,EAAA,GAAsB,QAAQ,CAAC,KAAK,CAAC,EAApC,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,SAAS,GAAA,EAAA,CAAA,CAAA,CAAmB;IACrC,IAAA,EAAA,GAA8B,QAAQ,CAAC,EAAE,CAAC,EAAzC,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAAgB;IAC1C,IAAA,EAAA,GAA8B,QAAQ,CAAC,KAAK,CAAC,EAA5C,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAAmB;AACnD,IAAA,IAAM,cAAc,GAAG,MAAM,CAAmB,IAAI,CAAC;AACrD,IAAA,IAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;AACjD,IAAA,IAAM,UAAU,GAAG,MAAM,CAAoB,IAAI,CAAC;AAClD,IAAA,IAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC;IAChD,IAAM,UAAU,GAAG,MAAM,CAAgC,IAAI,GAAG,EAAE,CAAC;IAC5D,IAAA,SAAS,GAAI,QAAQ,CAAC,cAAM,OAAA,aAAa,aAAb,aAAa,KAAA,MAAA,GAAb,aAAa,GAAI,KAAA,CAAA,MAAA,CAAM,UAAU,EAAE,CAAE,EAArC,CAAqC,CAAC,GAAzD;AAChB,IAAA,IAAM,UAAU,GAAG,EAAA,CAAA,MAAA,CAAG,SAAS,cAAW;IAE1C,IAAM,oBAAoB,GAAG,WAAW,CAAC,YAAA;;QACvC,SAAS,CAAC,KAAK,CAAC;AAChB,QAAA,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;IAC7B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,iBAAiB,CAAC,YAAY,EAAE,YAAA,EAAM,OAAA,MAAM,IAAI,oBAAoB,EAAE,CAAA,CAAhC,CAAgC,CAAC;IACvE,YAAY,CACV,WAAW,CAAC,YAAA;AACV,QAAA,IAAI,MAAM;AAAE,YAAA,oBAAoB,EAAE;IACpC,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CACnC;AAEK,IAAA,IAAA,EAAA,GAA0B,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,EAA/E,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,OAAO,aAA4D;AAEvF,IAAA,SAAS,CAAC,YAAA;QACR,IAAI,MAAM,IAAI,UAAU,IAAI,cAAc,CAAC,OAAO,EAAE;AAClD,YAAA,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE;QAChC;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAExB,IAAA,SAAS,CAAC,YAAA;QACR,IAAI,CAAC,MAAM,EAAE;YACX,aAAa,CAAC,EAAE,CAAC;YACjB,aAAa,CAAC,KAAK,CAAC;QACtB;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEnB,IAAM,eAAe,GAAG,OAAO,CAAC,YAAA;AAC9B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,OAAO;AAC/B,QAAA,OAAO,kBAAI,OAAO,EAAA,IAAA,CAAA,CACf,MAAM,CAAC,UAAC,MAAM,EAAA;AACb,YAAA,OAAA,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAA7D,QAAA,CAA6D;AAE9D,aAAA,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,EAAA;AACT,YAAA,IAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE;AACrC,YAAA,IAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1D,YAAA,IAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1D,IAAI,WAAW,IAAI,CAAC,WAAW;gBAAE,OAAO,EAAE;YAC1C,IAAI,CAAC,WAAW,IAAI,WAAW;AAAE,gBAAA,OAAO,CAAC;AACzC,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,CAAC;AACN,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAEzB,IAAA,IAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,UAAC,MAAM,EAAA,EAAK,OAAA,MAAM,CAAC,EAAE,KAAK,KAAK,CAAA,CAAnB,CAAmB,CAAC;AAEpE,IAAA,IAAM,kBAAkB,GAAG,YAAA;AACzB,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,SAAS,CAAC,CAAC,MAAM,CAAC;AACnC,IAAA,CAAC;IAED,IAAM,mBAAmB,GAAG,UAAC,CAAsB,EAAA;;AACjD,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YAChD,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAM,MAAM,GACV,CAAC,CAAC,GAAG,KAAK;AACR,kBAAE,eAAe,CAAC,CAAC;kBACjB,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE;AACV,gBAAA,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;AACxB,gBAAA,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;YAC5C;QACF;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YAC5B,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;YACjC,IAAI,MAAM,EAAE;AACV,gBAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AACnB,gBAAA,oBAAoB,EAAE;YACxB;QACF;AACF,IAAA,CAAC;IAED,IAAM,iBAAiB,GAAG,UAAC,QAAgB,EAAA;QACzC,QAAQ,CAAC,QAAQ,CAAC;AAClB,QAAA,oBAAoB,EAAE;AACxB,IAAA,CAAC;AAED,IAAA,IAAM,eAAe,GAAG,UAAC,QAAgB,EAAE,EAA2B,EAAA;AACpE,QAAA,IAAI,EAAE;YAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;;AACvC,YAAA,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1C,IAAA,CAAC;AAED,IAAA,IAAM,mBAAmB,GAAG,UAAC,CAAsB,EAAE,QAAgB,EAAA;;AACnE,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YAChD,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAC5C,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAA,CAAjB,CAAiB,CACzB;AACD,YAAA,IAAM,SAAS,GACb,CAAC,CAAC,GAAG,KAAK;AACR,kBAAE,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC;kBACrD,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;AACnC,YAAA,IAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC;YACvC,IAAI,IAAI,EAAE;AACR,gBAAA,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AACtB,gBAAA,CAAA,EAAA,GAAA,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE;YAC1C;QACF;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;YAC7C,CAAC,CAAC,cAAc,EAAE;YAClB,QAAQ,CAAC,QAAQ,CAAC;AAClB,YAAA,oBAAoB,EAAE;QACxB;AACF,IAAA,CAAC;AAED,IAAA,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAA,QAAA,EAAA,CAC9FD,iBACE,GAAG,EAAE,UAAU,EACf,IAAI,EAAC,QAAQ,EACb,SAAS,EAAEC,UAAU,CACnB,gFAAgF,EAChF,MAAM,CAAC,aAAa,GAAA,EAAA,GAAA,EAAA;AAClB,oBAAA,EAAA,CAAC,MAAM,CAAC,iBAAiB,CAAA,GAAG,MAAM;AAClC,oBAAA,EAAA,CAAC,MAAM,CAAC,SAAS,CAAA,GAAG,SAAS;AAC7B,oBAAA,EAAA,CAAC,MAAM,CAAC,QAAQ,CAAA,GAAG,QAAQ;AAC3B,oBAAA,EAAA,CAAC,MAAM,CAAC,QAAQ,CAAA,GAAG,QAAQ;wBAE9B,EACD,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,QAAQ,EAAA,eAAA,EACH,MAAM,EAAA,eAAA,EACP,SAAS,EAAA,eAAA,EACR,MAAM,GAAG,UAAU,GAAG,SAAS,EAAA,QAAA,EAAA,CAE9CD,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,uBAAuB,aACrC,CAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,IAAI,MACnBE,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,MAAM,CAAC,UAAU,EAAA,QAAA,EAAG,cAAc,CAAC,IAAI,EAAA,CAAQ,CACjE,EACA,CAAC,SAAS,KACTA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,KAAK,EAAA,QAAA,EAClB,CAAA,EAAA,GAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,GACvC,CACR,CAAA,EAAA,CACI,EACN,WAAW,KACVA,GAAA,CAAC,eAAe,EAAA,EACd,SAAS,EAAED,UAAU,CAAC,KAAK,YAAI,EAAA,CAAC,MAAM,CAAC,WAAW,CAAA,GAAG,MAAM,MAAG,EAC9D,IAAI,EAAE,EAAE,EACR,QAAQ,QACR,KAAK,EAAC,aAAa,EAAA,CACnB,CACH,CAAA,EAAA,CACM,EACR,MAAM,KACLD,IAAA,CAAA,KAAA,EAAA,EACE,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,WAAW,EAChB,SAAS,EAAEC,UAAU,CACnB,MAAM,CAAC,QAAQ,EACf,kCAAkC,YAChC,EAAA,CAAC,MAAM,CAAC,UAAU,CAAA,GAAG,MAAM,IAAI,OAAO,EAAE,EAAA,CAAC,MAAM,CAAC,aAAa,CAAA,GAAG,UAAU,EAAA,EAAA,EAC7E,EAAA,QAAA,EAAA,CAEA,UAAU,KACTC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,UAAU,CAAC,cAAc,EAAE,MAAM,CAAC,eAAe,CAAC,EAAA,QAAA,EAChEC,GAAA,CAAC,KAAK,EAAA,EACJ,GAAG,EAAE,cAAc,EACnB,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,UAAC,CAAC,EAAA,EAAK,OAAA,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAA7B,CAA6B,EAC9C,KAAK,EAAE,WAAW,EAClB,SAAS,EAAA,IAAA,EACT,SAAS,EAAE,mBAAmB,EAAA,CAC9B,EAAA,CACE,CACP,EACDF,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAC,YAAY,EAAA,YAAA,EAAa,SAAS,EAAA,QAAA,EAAA,CACvE,eAAe,CAAC,GAAG,CAAC,UAAC,MAAM,EAAA;;AAAK,gCAAA,QAC/BA,IAAA,CAAA,KAAA,EAAA,EAAqB,SAAS,EAAE,MAAM,CAAC,aAAa,EAAA,QAAA,EAAA,CAClDE,GAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,OAAO,EACZ,EAAE,EAAE,EAAA,CAAA,MAAA,CAAG,SAAS,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,MAAM,CAAC,EAAE,CAAE,EAC/B,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,CAAC,EAAE,EAChB,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,UAAU,EACjC,QAAQ,EAAE,YAAA,EAAM,OAAA,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAxB,CAAwB,EACxC,OAAO,EAAE,YAAA,EAAM,OAAA,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,EAA5B,CAA4B,EAC3C,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,EAC3C,SAAS,EAAE,MAAM,CAAC,WAAW,EAC7B,GAAG,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAA9B,CAA8B,EAC3C,SAAS,EAAE,UAAC,CAAC,EAAA,EAAK,OAAA,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA,CAAjC,CAAiC,EAAA,CACnD,EACFF,IAAA,CAAA,OAAA,EAAA,EACE,OAAO,EAAE,EAAA,CAAA,MAAA,CAAG,SAAS,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,MAAM,CAAC,EAAE,CAAE,EACpC,SAAS,EAAEC,UAAU,CACnB,iEAAiE,EACjE,MAAM,CAAC,MAAM,GAAA,EAAA,GAAA,EAAA;gDACb,EAAA,CAAC,MAAM,CAAC,cAAc,CAAA,GAAG,MAAM,CAAC,EAAE,KAAK,UAAU;AACjD,gDAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAED,MAAM,CAAC,IAAI,KACVC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,MAAM,CAAC,UAAU,EAAA,QAAA,EAAG,MAAM,CAAC,IAAI,EAAA,CAAQ,CACzD,EACDA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,KAAK,YAAE,MAAM,CAAC,KAAK,EAAA,CAAQ,IACrC,CAAA,EAAA,EA1BA,MAAM,CAAC,EAAE,CA2Bb;4BA5ByB,CA6BhC,CAAC,EACD,eAAe,CAAC,MAAM,KAAK,CAAC,KAC3BA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,qBAAA,CAAA,MAAA,CAAsB,MAAM,CAAC,SAAS,CAAE,EAAA,QAAA,EACnD,aAAa,EAAA,CACZ,CACL,CAAA,EAAA,CACG,CAAA,EAAA,CACF,CACP,CAAA,EAAA,CACG;AAEV;;;;"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { Accordion, DateSelector, SignaturePad, AutocompleteAddress, Input, MultiDropzone, IbanInput, CurrencyInput, BottomModal, RegularModal, BottomOrRegularModal, FullScreenModal, InfoCard, CardButton, Card, Button, AutoSuggestMultiSelect, Chip, AutoSuggestInput, ComparisonTable, TableRating, TableTrueFalse, TableRowHeader, TableButton, TableInfoButton, SegmentedControl, DownloadButton, Checkbox, Radio, Link, InformationBox, Badge, images, illustrations, Spinner, Table, Toggle, Toaster, toast, useEscapeKey, useFocusWithin, useMediaQuery, useOnClickOutside, LogoColor, LogoWhite, LogoBlack, LogoOrangeBox, LogoInvertedColor, LogoInverted, LogoPositiveColor, LogoPositiveBlack, } from './lib';
|
|
1
|
+
export { Accordion, DateSelector, SignaturePad, AutocompleteAddress, Input, MultiDropzone, IbanInput, CurrencyInput, BottomModal, RegularModal, BottomOrRegularModal, FullScreenModal, InfoCard, CardButton, Card, Button, AutoSuggestMultiSelect, Chip, AutoSuggestInput, ComparisonTable, TableRating, TableTrueFalse, TableRowHeader, TableButton, TableInfoButton, SegmentedControl, DownloadButton, Checkbox, Radio, Link, InformationBox, Badge, images, illustrations, Spinner, Table, Toggle, Toaster, toast, useEscapeKey, useFocusWithin, useMediaQuery, useOnClickOutside, LogoColor, LogoWhite, LogoBlack, LogoOrangeBox, LogoInvertedColor, LogoInverted, LogoPositiveColor, LogoPositiveBlack, SearchableDropdown, } from './lib';
|
|
2
2
|
export * from './lib/components/icon';
|
|
3
|
-
export type { AccordionProps, BadgeProps, DownloadStatus, InformationBoxProps, InputProps, IllustrationKeys, FileType, MultiDropzoneProps, TableHeader, UploadedFile, UploadStatus, CardProps, IconWrapperProps, TableData, TableProps, } from './lib';
|
|
3
|
+
export type { AccordionProps, BadgeProps, DownloadStatus, InformationBoxProps, InputProps, IllustrationKeys, FileType, MultiDropzoneProps, TableHeader, UploadedFile, UploadStatus, CardProps, IconWrapperProps, TableData, TableProps, SearchableDropdownProps, SearchableDropdownOption, } from './lib';
|
package/dist/esm/index.js
CHANGED
|
@@ -23,16 +23,17 @@ export { default as Chip } from './components/chip/index.js';
|
|
|
23
23
|
export { AutoSuggestInput } from './components/input/autoSuggestInput/index.js';
|
|
24
24
|
export { ComparisonTable } from './components/comparisonTable/index.js';
|
|
25
25
|
export { SegmentedControl } from './components/segmentedControl/index.js';
|
|
26
|
+
export { S as SearchableDropdown, u as useEscapeKey } from './index-QeP_xz9v.js';
|
|
26
27
|
export { Link } from './components/link/index.js';
|
|
27
28
|
export { a as illustrations, i as images } from './index-C4hs4X-e.js';
|
|
28
29
|
export { Spinner } from './components/spinner/index.js';
|
|
29
30
|
export { Toggle } from './components/input/toggle/index.js';
|
|
30
|
-
export {
|
|
31
|
+
export { T as Toaster, t as toast } from './index-CT0_LjIR.js';
|
|
31
32
|
export { Accordion } from './components/accordion/index.js';
|
|
32
33
|
export { Table } from './components/table/Table.js';
|
|
33
|
-
import {
|
|
34
|
+
import { useEffect } from 'react';
|
|
34
35
|
export { u as useMediaQuery } from './useMediaQuery-BlEUymPA.js';
|
|
35
|
-
export { u as useOnClickOutside } from './
|
|
36
|
+
export { u as useOnClickOutside } from './useOnClickOutside-B5hujnpp.js';
|
|
36
37
|
export { LogoColor } from './components/logo/LogoColor.js';
|
|
37
38
|
export { LogoWhite } from './components/logo/LogoWhite.js';
|
|
38
39
|
export { LogoBlack } from './components/logo/LogoBlack.js';
|
|
@@ -439,6 +440,7 @@ export { default as TableButton } from './components/comparisonTable/components/
|
|
|
439
440
|
export { default as TableInfoButton } from './components/comparisonTable/components/TableInfoButton/index.js';
|
|
440
441
|
import './tslib.es6-CVlKGIvp.js';
|
|
441
442
|
import 'react/jsx-runtime';
|
|
443
|
+
import './Calendar-8rhyapMz.js';
|
|
442
444
|
import './_commonjsHelpers-BFTU3MAI.js';
|
|
443
445
|
import './style-inject.es-tgCJW-Cu.js';
|
|
444
446
|
import './index-DLQEsiym.js';
|
|
@@ -465,7 +467,6 @@ import './components/table/components/TableCell/BaseCell/MiniProgressBar/MiniPro
|
|
|
465
467
|
import './components/table/components/TableCell/CTACell/CTACell.js';
|
|
466
468
|
import './components/table/components/IconRenderer/IconRenderer.js';
|
|
467
469
|
import './components/table/components/TableCell/CardCell/CardCell.js';
|
|
468
|
-
import './components/icon/IconWrapper/IconWrapper.js';
|
|
469
470
|
import './components/table/components/TableCell/ButtonCell/ButtonCell.js';
|
|
470
471
|
import './components/table/components/TableContents/TableContents.js';
|
|
471
472
|
import './TableSection-CEhD4eoy.js';
|
|
@@ -474,21 +475,10 @@ import './useTableNavigation-CrxoXTVd.js';
|
|
|
474
475
|
import './components/table/components/TableControls/TableControls.js';
|
|
475
476
|
import './useScrollSync-C5UXYPIB.js';
|
|
476
477
|
import './components/logo/LogoWrapper/LogoWrapper.js';
|
|
478
|
+
import './components/icon/IconWrapper/IconWrapper.js';
|
|
477
479
|
import './components/comparisonTable/components/TableRating/StarIcon.js';
|
|
478
480
|
import './components/comparisonTable/components/TableRating/ZapIcon.js';
|
|
479
481
|
|
|
480
|
-
var useEscapeKey = function (callback) {
|
|
481
|
-
var handleOnEscape = useCallback(function (e) {
|
|
482
|
-
if (e.key === 'Escape') {
|
|
483
|
-
callback();
|
|
484
|
-
}
|
|
485
|
-
}, [callback]);
|
|
486
|
-
useEffect(function () {
|
|
487
|
-
window.addEventListener('keydown', handleOnEscape);
|
|
488
|
-
return function () { return window.removeEventListener('keydown', handleOnEscape); };
|
|
489
|
-
}, [handleOnEscape]);
|
|
490
|
-
};
|
|
491
|
-
|
|
492
482
|
var useFocusWithin = function (ref, callback) {
|
|
493
483
|
useEffect(function () {
|
|
494
484
|
var handleOnFocusIn = function () {
|
|
@@ -503,5 +493,5 @@ var useFocusWithin = function (ref, callback) {
|
|
|
503
493
|
}, [callback, ref]);
|
|
504
494
|
};
|
|
505
495
|
|
|
506
|
-
export {
|
|
496
|
+
export { useFocusWithin };
|
|
507
497
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/lib/hooks/
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/lib/hooks/useFocusWithin.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nexport const useFocusWithin = (\n ref: HTMLElement | null,\n callback: (isFocusWithin: boolean) => void\n) => {\n useEffect(() => {\n const handleOnFocusIn = () => {\n if (!ref) {\n return;\n }\n\n const hasFocus = ref?.contains(document.activeElement);\n\n callback(Boolean(hasFocus));\n };\n\n document.addEventListener('focusin', handleOnFocusIn);\n\n return () => document?.removeEventListener('focusin', handleOnFocusIn);\n }, [callback, ref]);\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,IAAM,cAAc,GAAG,UAC5B,GAAuB,EACvB,QAA0C,EAAA;AAE1C,IAAA,SAAS,CAAC,YAAA;AACR,QAAA,IAAM,eAAe,GAAG,YAAA;YACtB,IAAI,CAAC,GAAG,EAAE;gBACR;YACF;AAEA,YAAA,IAAM,QAAQ,GAAG,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAEtD,YAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAA,CAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC;AAErD,QAAA,OAAO,cAAM,OAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA,CAAzD,CAAyD;AACxE,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACrB;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface SearchableDropdownOption {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
icon?: ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export interface SearchableDropdownProps {
|
|
8
|
+
options: SearchableDropdownOption[];
|
|
9
|
+
value: string | null;
|
|
10
|
+
onChange: (value: string) => void;
|
|
11
|
+
searchable?: boolean;
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
triggerPlaceholder?: string;
|
|
14
|
+
noResultsText?: string;
|
|
15
|
+
groupName?: string;
|
|
16
|
+
dropUp?: boolean;
|
|
17
|
+
condensed?: boolean;
|
|
18
|
+
bordered?: boolean;
|
|
19
|
+
showChevron?: boolean;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare const SearchableDropdown: ({ options, value, onChange, searchable, placeholder, triggerPlaceholder, noResultsText, groupName: groupNameProp, dropUp, condensed, bordered, showChevron, disabled, }: SearchableDropdownProps) => JSX.Element;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { SearchableDropdownProps } from '.';
|
|
2
|
+
declare const story: {
|
|
3
|
+
title: string;
|
|
4
|
+
component: ({ options, value, onChange, searchable, placeholder, triggerPlaceholder, noResultsText, groupName: groupNameProp, dropUp, condensed, bordered, showChevron, disabled, }: SearchableDropdownProps) => JSX.Element;
|
|
5
|
+
argTypes: {
|
|
6
|
+
options: {
|
|
7
|
+
description: string;
|
|
8
|
+
table: {
|
|
9
|
+
type: {
|
|
10
|
+
summary: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
value: {
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
onChange: {
|
|
18
|
+
action: boolean;
|
|
19
|
+
table: {
|
|
20
|
+
category: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
searchable: {
|
|
24
|
+
description: string;
|
|
25
|
+
control: string;
|
|
26
|
+
};
|
|
27
|
+
placeholder: {
|
|
28
|
+
description: string;
|
|
29
|
+
control: string;
|
|
30
|
+
};
|
|
31
|
+
triggerPlaceholder: {
|
|
32
|
+
description: string;
|
|
33
|
+
control: string;
|
|
34
|
+
};
|
|
35
|
+
noResultsText: {
|
|
36
|
+
description: string;
|
|
37
|
+
control: string;
|
|
38
|
+
};
|
|
39
|
+
groupName: {
|
|
40
|
+
description: string;
|
|
41
|
+
control: string;
|
|
42
|
+
};
|
|
43
|
+
dropUp: {
|
|
44
|
+
description: string;
|
|
45
|
+
control: string;
|
|
46
|
+
};
|
|
47
|
+
condensed: {
|
|
48
|
+
description: string;
|
|
49
|
+
control: string;
|
|
50
|
+
};
|
|
51
|
+
bordered: {
|
|
52
|
+
description: string;
|
|
53
|
+
control: string;
|
|
54
|
+
};
|
|
55
|
+
showChevron: {
|
|
56
|
+
description: string;
|
|
57
|
+
control: string;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
args: {
|
|
61
|
+
options: {
|
|
62
|
+
id: string;
|
|
63
|
+
label: string;
|
|
64
|
+
}[];
|
|
65
|
+
value: string;
|
|
66
|
+
searchable: boolean;
|
|
67
|
+
placeholder: string;
|
|
68
|
+
triggerPlaceholder: string;
|
|
69
|
+
noResultsText: string;
|
|
70
|
+
groupName: string;
|
|
71
|
+
dropUp: boolean;
|
|
72
|
+
condensed: boolean;
|
|
73
|
+
bordered: boolean;
|
|
74
|
+
showChevron: boolean;
|
|
75
|
+
};
|
|
76
|
+
parameters: {
|
|
77
|
+
componentSubtitle: string;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
export declare const Default: {
|
|
81
|
+
render: (args: SearchableDropdownProps) => JSX.Element;
|
|
82
|
+
name: string;
|
|
83
|
+
};
|
|
84
|
+
export declare const Searchable: {
|
|
85
|
+
render: (args: SearchableDropdownProps) => JSX.Element;
|
|
86
|
+
name: string;
|
|
87
|
+
};
|
|
88
|
+
export declare const WithIcons: {
|
|
89
|
+
render: (args: SearchableDropdownProps) => JSX.Element;
|
|
90
|
+
name: string;
|
|
91
|
+
};
|
|
92
|
+
export declare const Condensed: {
|
|
93
|
+
render: (args: SearchableDropdownProps) => JSX.Element;
|
|
94
|
+
name: string;
|
|
95
|
+
};
|
|
96
|
+
export declare const WithChevron: {
|
|
97
|
+
render: (args: SearchableDropdownProps) => JSX.Element;
|
|
98
|
+
name: string;
|
|
99
|
+
};
|
|
100
|
+
export declare const Disabled: {
|
|
101
|
+
render: (args: SearchableDropdownProps) => JSX.Element;
|
|
102
|
+
name: string;
|
|
103
|
+
};
|
|
104
|
+
export declare const DropUp: {
|
|
105
|
+
render: (args: SearchableDropdownProps) => JSX.Element;
|
|
106
|
+
name: string;
|
|
107
|
+
};
|
|
108
|
+
export default story;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|