@lumx/react 3.20.1-alpha.29 → 3.20.1-alpha.30
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/_internal/Button-4b67daa8.js +98 -0
- package/_internal/Button-4b67daa8.js.map +1 -0
- package/_internal/ButtonRoot-a70baf82.js +118 -0
- package/_internal/ButtonRoot-a70baf82.js.map +1 -0
- package/_internal/Chip-70af04b4.js +144 -0
- package/_internal/Chip-70af04b4.js.map +1 -0
- package/_internal/ClickAwayProvider-1204f237.js +95 -0
- package/_internal/ClickAwayProvider-1204f237.js.map +1 -0
- package/_internal/DisabledStateContext-ea04260d.js +29 -0
- package/_internal/DisabledStateContext-ea04260d.js.map +1 -0
- package/_internal/HeadingLevelProvider-ebdcb0c7.js +61 -0
- package/_internal/HeadingLevelProvider-ebdcb0c7.js.map +1 -0
- package/_internal/IconButton-8d61f5be.js +77 -0
- package/_internal/IconButton-8d61f5be.js.map +1 -0
- package/_internal/ImageCaption-db44ec9e.js +75 -0
- package/_internal/ImageCaption-db44ec9e.js.map +1 -0
- package/_internal/List-c75646f2.js +818 -0
- package/_internal/List-c75646f2.js.map +1 -0
- package/_internal/PopoverDialog-35b2d87d.js +657 -0
- package/_internal/PopoverDialog-35b2d87d.js.map +1 -0
- package/_internal/Portal-3f86608e.js +45 -0
- package/_internal/Portal-3f86608e.js.map +1 -0
- package/_internal/RawClickable-2c2b6a89.js +52 -0
- package/_internal/RawClickable-2c2b6a89.js.map +1 -0
- package/_internal/Slides-ce641b5f.js +679 -0
- package/_internal/Slides-ce641b5f.js.map +1 -0
- package/_internal/ThemeContext-3181f000.js +14 -0
- package/_internal/ThemeContext-3181f000.js.map +1 -0
- package/_internal/Thumbnail-02bd6869.js +314 -0
- package/_internal/Thumbnail-02bd6869.js.map +1 -0
- package/_internal/components/alert-dialog-a24330ed.js +166 -0
- package/_internal/components/alert-dialog-a24330ed.js.map +1 -0
- package/_internal/components/autocomplete-70749e51.js +262 -0
- package/_internal/components/autocomplete-70749e51.js.map +1 -0
- package/_internal/components/avatar-ed9f4869.js +84 -0
- package/_internal/components/avatar-ed9f4869.js.map +1 -0
- package/_internal/components/badge-ccf47147.js +82 -0
- package/_internal/components/badge-ccf47147.js.map +1 -0
- package/_internal/components/button-9f710830.js +48 -0
- package/_internal/components/button-9f710830.js.map +1 -0
- package/_internal/components/checkbox-8ab51ef9.js +142 -0
- package/_internal/components/checkbox-8ab51ef9.js.map +1 -0
- package/_internal/components/chip-19e40755.js +103 -0
- package/_internal/components/chip-19e40755.js.map +1 -0
- package/_internal/components/comment-block-bb6a0603.js +139 -0
- package/_internal/components/comment-block-bb6a0603.js.map +1 -0
- package/_internal/components/date-picker-e4209b01.js +2 -0
- package/_internal/components/date-picker-e4209b01.js.map +1 -0
- package/_internal/components/dialog-30336ccb.js +239 -0
- package/_internal/components/dialog-30336ccb.js.map +1 -0
- package/_internal/components/divider-0e93aa3d.js +51 -0
- package/_internal/components/divider-0e93aa3d.js.map +1 -0
- package/_internal/components/drag-handle-ba2e7e67.js +52 -0
- package/_internal/components/drag-handle-ba2e7e67.js.map +1 -0
- package/_internal/components/dropdown-d18122d7.js +148 -0
- package/_internal/components/dropdown-d18122d7.js.map +1 -0
- package/_internal/components/expansion-panel-0b263437.js +169 -0
- package/_internal/components/expansion-panel-0b263437.js.map +1 -0
- package/_internal/components/flag-8f9a498a.js +60 -0
- package/_internal/components/flag-8f9a498a.js.map +1 -0
- package/_internal/components/flex-box-15be92f6.js +57 -0
- package/_internal/components/flex-box-15be92f6.js.map +1 -0
- package/_internal/components/generic-block-5d843f1e.js +128 -0
- package/_internal/components/generic-block-5d843f1e.js.map +1 -0
- package/_internal/components/grid-8c08dc4b.js +105 -0
- package/_internal/components/grid-8c08dc4b.js.map +1 -0
- package/_internal/components/grid-column-85e305e7.js +59 -0
- package/_internal/components/grid-column-85e305e7.js.map +1 -0
- package/_internal/components/heading-7bfafd7d.js +54 -0
- package/_internal/components/heading-7bfafd7d.js.map +1 -0
- package/_internal/components/icon-ee15673b.js +103 -0
- package/_internal/components/icon-ee15673b.js.map +1 -0
- package/_internal/components/image-block-3479abda.js +111 -0
- package/_internal/components/image-block-3479abda.js.map +1 -0
- package/_internal/components/image-lightbox-1d7ca133.js +758 -0
- package/_internal/components/image-lightbox-1d7ca133.js.map +1 -0
- package/_internal/components/inline-list-5ba8bb0f.js +75 -0
- package/_internal/components/inline-list-5ba8bb0f.js.map +1 -0
- package/_internal/components/input-helper-2e4e49fd.js +72 -0
- package/_internal/components/input-helper-2e4e49fd.js.map +1 -0
- package/_internal/components/input-label-30d199c3.js +60 -0
- package/_internal/components/input-label-30d199c3.js.map +1 -0
- package/_internal/components/lightbox-c5f9afd0.js +156 -0
- package/_internal/components/lightbox-c5f9afd0.js.map +1 -0
- package/_internal/components/link-43ee103e.js +73 -0
- package/_internal/components/link-43ee103e.js.map +1 -0
- package/_internal/components/link-preview-db0ee2d6.js +118 -0
- package/_internal/components/link-preview-db0ee2d6.js.map +1 -0
- package/_internal/components/list-2f256244.js +72 -0
- package/_internal/components/list-2f256244.js.map +1 -0
- package/_internal/components/message-f7674e0e.js +101 -0
- package/_internal/components/message-f7674e0e.js.map +1 -0
- package/_internal/components/mosaic-3effd0cf.js +95 -0
- package/_internal/components/mosaic-3effd0cf.js.map +1 -0
- package/_internal/components/navigation-3a5dc270.js +227 -0
- package/_internal/components/navigation-3a5dc270.js.map +1 -0
- package/_internal/components/notification-098c5600.js +146 -0
- package/_internal/components/notification-098c5600.js.map +1 -0
- package/_internal/components/popover-dfcddda4.js +3 -0
- package/_internal/components/popover-dfcddda4.js.map +1 -0
- package/_internal/components/post-block-69797e4d.js +110 -0
- package/_internal/components/post-block-69797e4d.js.map +1 -0
- package/_internal/components/progress-44bb0301.js +183 -0
- package/_internal/components/progress-44bb0301.js.map +1 -0
- package/_internal/components/progress-tracker-e0981fcc.js +309 -0
- package/_internal/components/progress-tracker-e0981fcc.js.map +1 -0
- package/_internal/components/radio-button-929c7bee.js +150 -0
- package/_internal/components/radio-button-929c7bee.js.map +1 -0
- package/_internal/components/select-64bc72a0.js +458 -0
- package/_internal/components/select-64bc72a0.js.map +1 -0
- package/_internal/components/side-navigation-c610c689.js +166 -0
- package/_internal/components/side-navigation-c610c689.js.map +1 -0
- package/_internal/components/skeleton-1ea8c82a.js +167 -0
- package/_internal/components/skeleton-1ea8c82a.js.map +1 -0
- package/_internal/components/slider-78cfaa67.js +312 -0
- package/_internal/components/slider-78cfaa67.js.map +1 -0
- package/_internal/components/slideshow-d8a943a7.js +151 -0
- package/_internal/components/slideshow-d8a943a7.js.map +1 -0
- package/_internal/components/switch-25b65051.js +122 -0
- package/_internal/components/switch-25b65051.js.map +1 -0
- package/_internal/components/table-ec20c66c.js +296 -0
- package/_internal/components/table-ec20c66c.js.map +1 -0
- package/_internal/components/tabs-89c055bd.js +299 -0
- package/_internal/components/tabs-89c055bd.js.map +1 -0
- package/_internal/components/text-d04d0f1b.js +2 -0
- package/_internal/components/text-d04d0f1b.js.map +1 -0
- package/_internal/components/text-field-8f13957e.js +361 -0
- package/_internal/components/text-field-8f13957e.js.map +1 -0
- package/_internal/components/thumbnail-1255957f.js +42 -0
- package/_internal/components/thumbnail-1255957f.js.map +1 -0
- package/_internal/components/toolbar-e7c984e6.js +62 -0
- package/_internal/components/toolbar-e7c984e6.js.map +1 -0
- package/_internal/components/tooltip-dcb43bbe.js +328 -0
- package/_internal/components/tooltip-dcb43bbe.js.map +1 -0
- package/_internal/components/uploader-7ef4db39.js +154 -0
- package/_internal/components/uploader-7ef4db39.js.map +1 -0
- package/_internal/components/user-block-24d97650.js +145 -0
- package/_internal/components/user-block-24d97650.js.map +1 -0
- package/_internal/constants-43721918.js +2170 -0
- package/_internal/constants-43721918.js.map +1 -0
- package/_internal/constants-d0e3f49e.js +24 -0
- package/_internal/constants-d0e3f49e.js.map +1 -0
- package/_internal/context-9d1336a1.js +19 -0
- package/_internal/context-9d1336a1.js.map +1 -0
- package/_internal/forwardRef-8bce732e.js +9 -0
- package/_internal/forwardRef-8bce732e.js.map +1 -0
- package/_internal/getFocusableElements-230173a8.js +13 -0
- package/_internal/getFocusableElements-230173a8.js.map +1 -0
- package/_internal/index-25c9e8c2.js +118 -0
- package/_internal/index-25c9e8c2.js.map +1 -0
- package/_internal/index-25d2a45e.js +437 -0
- package/_internal/index-25d2a45e.js.map +1 -0
- package/_internal/isComponent-b9762ff1.js +18 -0
- package/_internal/isComponent-b9762ff1.js.map +1 -0
- package/_internal/isComponentType-e806b848.js +9 -0
- package/_internal/isComponentType-e806b848.js.map +1 -0
- package/_internal/mergeRefs-f0d7d6ea.js +30 -0
- package/_internal/mergeRefs-f0d7d6ea.js.map +1 -0
- package/_internal/state-db358714.js +130 -0
- package/_internal/state-db358714.js.map +1 -0
- package/_internal/useBooleanState-2a3d237c.js +12 -0
- package/_internal/useBooleanState-2a3d237c.js.map +1 -0
- package/_internal/useCallbackOnEscape-b956a85d.js +64 -0
- package/_internal/useCallbackOnEscape-b956a85d.js.map +1 -0
- package/_internal/useDisableBodyScroll-36bd7352.js +219 -0
- package/_internal/useDisableBodyScroll-36bd7352.js.map +1 -0
- package/_internal/useDisableStateProps-69e16b7c.js +36 -0
- package/_internal/useDisableStateProps-69e16b7c.js.map +1 -0
- package/_internal/useFocusTrap-2dbae79e.js +112 -0
- package/_internal/useFocusTrap-2dbae79e.js.map +1 -0
- package/_internal/useId-3a1facc0.js +18 -0
- package/_internal/useId-3a1facc0.js.map +1 -0
- package/_internal/useRovingTabIndex-7daf0f24.js +77 -0
- package/_internal/useRovingTabIndex-7daf0f24.js.map +1 -0
- package/_internal/useTransitionVisibility-321fdbfa.js +50 -0
- package/_internal/useTransitionVisibility-321fdbfa.js.map +1 -0
- package/_internal/wrapChildrenIconWithSpaces-50d705e6.js +20 -0
- package/_internal/wrapChildrenIconWithSpaces-50d705e6.js.map +1 -0
- package/index.js +63 -14033
- package/index.js.map +1 -1
- package/package.json +3 -3
- package/utils/index.js +3 -158
- package/utils/index.js.map +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { mdiAlert } from '@lumx/icons/esm/alert';
|
|
4
|
+
import { mdiAlertCircle } from '@lumx/icons/esm/alert-circle';
|
|
5
|
+
import { mdiCheckCircle } from '@lumx/icons/esm/check-circle';
|
|
6
|
+
import { mdiInformation } from '@lumx/icons/esm/information';
|
|
7
|
+
import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
|
|
8
|
+
import { u as useId } from '../useId-3a1facc0.js';
|
|
9
|
+
import { f as forwardRef } from '../forwardRef-8bce732e.js';
|
|
10
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
11
|
+
import { Dialog } from './dialog-30336ccb.js';
|
|
12
|
+
import { Toolbar } from './toolbar-e7c984e6.js';
|
|
13
|
+
import { Icon } from './icon-ee15673b.js';
|
|
14
|
+
import { a as Button } from '../Button-4b67daa8.js';
|
|
15
|
+
import { Kind, ColorPalette, Size, Emphasis } from '@lumx/core/js/constants';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Associative map from message kind to color and icon.
|
|
19
|
+
*/
|
|
20
|
+
const CONFIG = {
|
|
21
|
+
[Kind.error]: {
|
|
22
|
+
color: ColorPalette.red,
|
|
23
|
+
icon: mdiAlert
|
|
24
|
+
},
|
|
25
|
+
[Kind.info]: {
|
|
26
|
+
color: ColorPalette.blue,
|
|
27
|
+
icon: mdiInformation
|
|
28
|
+
},
|
|
29
|
+
[Kind.success]: {
|
|
30
|
+
color: ColorPalette.green,
|
|
31
|
+
icon: mdiCheckCircle
|
|
32
|
+
},
|
|
33
|
+
[Kind.warning]: {
|
|
34
|
+
color: ColorPalette.yellow,
|
|
35
|
+
icon: mdiAlertCircle
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Component display name.
|
|
41
|
+
*/
|
|
42
|
+
const COMPONENT_NAME = 'AlertDialog';
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Component default class name and class prefix.
|
|
46
|
+
*/
|
|
47
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Component default props.
|
|
51
|
+
*/
|
|
52
|
+
const DEFAULT_PROPS = {
|
|
53
|
+
size: Size.tiny,
|
|
54
|
+
kind: Kind.info
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* AlertDialog component.
|
|
59
|
+
*
|
|
60
|
+
* An alert dialog is a modal dialog that interrupts the user's workflow to
|
|
61
|
+
* communicate an important message and acquire a response.
|
|
62
|
+
*
|
|
63
|
+
* It should not have a complex content.
|
|
64
|
+
* Children of this component should only be strings, paragraphs or links.
|
|
65
|
+
*/
|
|
66
|
+
const AlertDialog = forwardRef((props, ref) => {
|
|
67
|
+
const {
|
|
68
|
+
id,
|
|
69
|
+
title,
|
|
70
|
+
className,
|
|
71
|
+
cancelProps,
|
|
72
|
+
confirmProps,
|
|
73
|
+
kind = DEFAULT_PROPS.kind,
|
|
74
|
+
size = DEFAULT_PROPS.size,
|
|
75
|
+
dialogProps,
|
|
76
|
+
children,
|
|
77
|
+
...forwardedProps
|
|
78
|
+
} = props;
|
|
79
|
+
const cancelButtonRef = React__default.useRef(null);
|
|
80
|
+
const confirmationButtonRef = React__default.useRef(null);
|
|
81
|
+
const {
|
|
82
|
+
color,
|
|
83
|
+
icon
|
|
84
|
+
} = CONFIG[kind] || {};
|
|
85
|
+
|
|
86
|
+
// Define a unique ID to target title and description for aria attributes.
|
|
87
|
+
const generatedId = useId();
|
|
88
|
+
const uniqueId = id || generatedId;
|
|
89
|
+
const titleId = `${uniqueId}-title`;
|
|
90
|
+
const descriptionId = `${uniqueId}-description`;
|
|
91
|
+
|
|
92
|
+
// If content is a string, set in a paragraph.
|
|
93
|
+
const DescriptionElement = typeof children === 'string' ? 'p' : 'div';
|
|
94
|
+
const {
|
|
95
|
+
label: confirmLabel,
|
|
96
|
+
onClick: confirmOnClick,
|
|
97
|
+
...forwardedConfirmProps
|
|
98
|
+
} = confirmProps;
|
|
99
|
+
const {
|
|
100
|
+
label: cancelLabel,
|
|
101
|
+
onClick: cancelOnClick,
|
|
102
|
+
...forwardedCancelProps
|
|
103
|
+
} = cancelProps || {};
|
|
104
|
+
return /*#__PURE__*/jsxs(Dialog, {
|
|
105
|
+
ref: ref,
|
|
106
|
+
focusElement: cancelProps ? cancelButtonRef : confirmationButtonRef,
|
|
107
|
+
size: size,
|
|
108
|
+
dialogProps: {
|
|
109
|
+
id: uniqueId,
|
|
110
|
+
role: 'alertdialog',
|
|
111
|
+
'aria-labelledby': titleId,
|
|
112
|
+
'aria-describedby': descriptionId,
|
|
113
|
+
...dialogProps
|
|
114
|
+
},
|
|
115
|
+
className: classNames(className, handleBasicClasses({
|
|
116
|
+
kind,
|
|
117
|
+
prefix: CLASSNAME
|
|
118
|
+
})),
|
|
119
|
+
...forwardedProps,
|
|
120
|
+
children: [/*#__PURE__*/jsx("header", {
|
|
121
|
+
children: /*#__PURE__*/jsx(Toolbar, {
|
|
122
|
+
className: "lumx-spacing-margin-horizontal",
|
|
123
|
+
before: /*#__PURE__*/jsx(Icon, {
|
|
124
|
+
icon: icon,
|
|
125
|
+
size: Size.s,
|
|
126
|
+
color: color
|
|
127
|
+
}),
|
|
128
|
+
label: /*#__PURE__*/jsx("h2", {
|
|
129
|
+
id: titleId,
|
|
130
|
+
className: "lumx-typography-title",
|
|
131
|
+
children: title
|
|
132
|
+
})
|
|
133
|
+
})
|
|
134
|
+
}), children && /*#__PURE__*/jsx(DescriptionElement, {
|
|
135
|
+
id: descriptionId,
|
|
136
|
+
className: "lumx-typography-body2 lumx-spacing-padding-vertical-big lumx-spacing-padding-horizontal-huge",
|
|
137
|
+
children: children
|
|
138
|
+
}), /*#__PURE__*/jsx("footer", {
|
|
139
|
+
children: /*#__PURE__*/jsx(Toolbar, {
|
|
140
|
+
className: "lumx-spacing-margin-horizontal",
|
|
141
|
+
after: /*#__PURE__*/jsxs(Fragment, {
|
|
142
|
+
children: [cancelProps && /*#__PURE__*/jsx(Button, {
|
|
143
|
+
...forwardedCancelProps,
|
|
144
|
+
ref: cancelButtonRef,
|
|
145
|
+
emphasis: Emphasis.medium,
|
|
146
|
+
onClick: cancelOnClick,
|
|
147
|
+
children: cancelLabel
|
|
148
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
149
|
+
...forwardedConfirmProps,
|
|
150
|
+
ref: confirmationButtonRef,
|
|
151
|
+
color: color,
|
|
152
|
+
className: "lumx-spacing-margin-left-regular",
|
|
153
|
+
onClick: confirmOnClick,
|
|
154
|
+
children: confirmLabel
|
|
155
|
+
})]
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
})]
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
AlertDialog.displayName = COMPONENT_NAME;
|
|
162
|
+
AlertDialog.className = CLASSNAME;
|
|
163
|
+
AlertDialog.defaultProps = DEFAULT_PROPS;
|
|
164
|
+
|
|
165
|
+
export { AlertDialog };
|
|
166
|
+
//# sourceMappingURL=alert-dialog-a24330ed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-dialog-a24330ed.js","sources":["../../../src/components/alert-dialog/AlertDialog.tsx"],"sourcesContent":["import React from 'react';\n\nimport classNames from 'classnames';\n\nimport {\n DialogProps,\n Dialog,\n Button,\n Emphasis,\n ColorPalette,\n Icon,\n Size,\n Kind,\n Toolbar,\n ButtonProps,\n} from '@lumx/react';\nimport { mdiAlert } from '@lumx/icons/esm/alert';\nimport { mdiAlertCircle } from '@lumx/icons/esm/alert-circle';\nimport { mdiCheckCircle } from '@lumx/icons/esm/check-circle';\nimport { mdiInformation } from '@lumx/icons/esm/information';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useId } from '@lumx/react/hooks/useId';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nexport interface AlertDialogProps extends Omit<DialogProps, 'header' | 'footer'> {\n /** Message variant. */\n kind?: Kind;\n /** Dialog title. */\n title?: string;\n /** Props forwarded to the confirm button */\n confirmProps: ButtonProps & {\n onClick(): void;\n label: string;\n };\n /**\n * Props forwarded to the cancel button.\n * Will not render a cancel button if undefined.\n */\n cancelProps?: ButtonProps & {\n onClick(): void;\n label: string;\n };\n /**\n * Children\n */\n children?: React.ReactNode;\n}\n\n/**\n * Associative map from message kind to color and icon.\n */\nconst CONFIG = {\n [Kind.error]: { color: ColorPalette.red, icon: mdiAlert },\n [Kind.info]: { color: ColorPalette.blue, icon: mdiInformation },\n [Kind.success]: { color: ColorPalette.green, icon: mdiCheckCircle },\n [Kind.warning]: { color: ColorPalette.yellow, icon: mdiAlertCircle },\n};\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'AlertDialog';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<DialogProps> = {\n size: Size.tiny,\n kind: Kind.info,\n};\n\n/**\n * AlertDialog component.\n *\n * An alert dialog is a modal dialog that interrupts the user's workflow to\n * communicate an important message and acquire a response.\n *\n * It should not have a complex content.\n * Children of this component should only be strings, paragraphs or links.\n */\nexport const AlertDialog = forwardRef<AlertDialogProps, HTMLDivElement>((props, ref) => {\n const {\n id,\n title,\n className,\n cancelProps,\n confirmProps,\n kind = DEFAULT_PROPS.kind,\n size = DEFAULT_PROPS.size,\n dialogProps,\n children,\n ...forwardedProps\n } = props;\n\n const cancelButtonRef = React.useRef(null);\n const confirmationButtonRef = React.useRef(null);\n const { color, icon } = CONFIG[kind as Kind] || {};\n\n // Define a unique ID to target title and description for aria attributes.\n const generatedId = useId();\n const uniqueId = id || generatedId;\n const titleId = `${uniqueId}-title`;\n const descriptionId = `${uniqueId}-description`;\n\n // If content is a string, set in a paragraph.\n const DescriptionElement = typeof children === 'string' ? 'p' : 'div';\n\n const { label: confirmLabel, onClick: confirmOnClick, ...forwardedConfirmProps } = confirmProps;\n const { label: cancelLabel, onClick: cancelOnClick, ...forwardedCancelProps } = cancelProps || {};\n\n return (\n <Dialog\n ref={ref}\n focusElement={cancelProps ? cancelButtonRef : confirmationButtonRef}\n size={size}\n dialogProps={{\n id: uniqueId,\n role: 'alertdialog',\n 'aria-labelledby': titleId,\n 'aria-describedby': descriptionId,\n ...dialogProps,\n }}\n className={classNames(\n className,\n handleBasicClasses({\n kind,\n prefix: CLASSNAME,\n }),\n )}\n {...forwardedProps}\n >\n <header>\n <Toolbar\n className=\"lumx-spacing-margin-horizontal\"\n before={<Icon icon={icon} size={Size.s} color={color} />}\n label={\n <h2 id={titleId} className=\"lumx-typography-title\">\n {title}\n </h2>\n }\n />\n </header>\n\n {children && (\n <DescriptionElement\n id={descriptionId}\n className=\"lumx-typography-body2 lumx-spacing-padding-vertical-big lumx-spacing-padding-horizontal-huge\"\n >\n {children}\n </DescriptionElement>\n )}\n\n <footer>\n <Toolbar\n className=\"lumx-spacing-margin-horizontal\"\n after={\n <>\n {cancelProps && (\n <Button\n {...forwardedCancelProps}\n ref={cancelButtonRef}\n emphasis={Emphasis.medium}\n onClick={cancelOnClick}\n >\n {cancelLabel}\n </Button>\n )}\n <Button\n {...forwardedConfirmProps}\n ref={confirmationButtonRef}\n color={color}\n className=\"lumx-spacing-margin-left-regular\"\n onClick={confirmOnClick}\n >\n {confirmLabel}\n </Button>\n </>\n }\n />\n </footer>\n </Dialog>\n );\n});\n\nAlertDialog.displayName = COMPONENT_NAME;\nAlertDialog.className = CLASSNAME;\nAlertDialog.defaultProps = DEFAULT_PROPS;\n"],"names":["CONFIG","Kind","error","color","ColorPalette","red","icon","mdiAlert","info","blue","mdiInformation","success","green","mdiCheckCircle","warning","yellow","mdiAlertCircle","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","tiny","kind","AlertDialog","forwardRef","props","ref","id","title","className","cancelProps","confirmProps","dialogProps","children","forwardedProps","cancelButtonRef","React","useRef","confirmationButtonRef","generatedId","useId","uniqueId","titleId","descriptionId","DescriptionElement","label","confirmLabel","onClick","confirmOnClick","forwardedConfirmProps","cancelLabel","cancelOnClick","forwardedCancelProps","_jsxs","Dialog","focusElement","role","classNames","handleBasicClasses","prefix","_jsx","Toolbar","before","Icon","s","after","_Fragment","Button","emphasis","Emphasis","medium","displayName","defaultProps"],"mappings":"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"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { getRootClassName } from '@lumx/core/js/utils/className';
|
|
4
|
+
import { u as useFocus } from '../index-25d2a45e.js';
|
|
5
|
+
import { m as mergeRefs } from '../mergeRefs-f0d7d6ea.js';
|
|
6
|
+
import { u as useTheme } from '../ThemeContext-3181f000.js';
|
|
7
|
+
import { f as forwardRef } from '../forwardRef-8bce732e.js';
|
|
8
|
+
import { u as useDisableStateProps } from '../useDisableStateProps-69e16b7c.js';
|
|
9
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
10
|
+
import { TextField } from './text-field-8f13957e.js';
|
|
11
|
+
import { Dropdown } from './dropdown-d18122d7.js';
|
|
12
|
+
import { mdiClose } from '@lumx/icons/esm/close';
|
|
13
|
+
import { C as Chip } from '../Chip-70af04b4.js';
|
|
14
|
+
import { Icon } from './icon-ee15673b.js';
|
|
15
|
+
import { Size } from '@lumx/core/js/constants';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Component display name.
|
|
19
|
+
*/
|
|
20
|
+
const COMPONENT_NAME$1 = 'Autocomplete';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Component default class name and class prefix.
|
|
24
|
+
*/
|
|
25
|
+
const CLASSNAME$1 = getRootClassName(COMPONENT_NAME$1);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Component default props.
|
|
29
|
+
*/
|
|
30
|
+
const DEFAULT_PROPS$1 = {
|
|
31
|
+
anchorToInput: false,
|
|
32
|
+
closeOnClick: false,
|
|
33
|
+
closeOnClickAway: true,
|
|
34
|
+
closeOnEscape: true,
|
|
35
|
+
shouldFocusOnClose: false
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Autocomplete component.
|
|
40
|
+
*
|
|
41
|
+
* @param props Component props.
|
|
42
|
+
* @param ref Component ref.
|
|
43
|
+
* @return React element.
|
|
44
|
+
*/
|
|
45
|
+
const Autocomplete = forwardRef((props, ref) => {
|
|
46
|
+
const defaultTheme = useTheme();
|
|
47
|
+
const {
|
|
48
|
+
disabledStateProps,
|
|
49
|
+
otherProps
|
|
50
|
+
} = useDisableStateProps(props);
|
|
51
|
+
const {
|
|
52
|
+
anchorToInput = DEFAULT_PROPS$1.anchorToInput,
|
|
53
|
+
children,
|
|
54
|
+
chips,
|
|
55
|
+
className,
|
|
56
|
+
closeOnClick = DEFAULT_PROPS$1.closeOnClick,
|
|
57
|
+
closeOnClickAway = DEFAULT_PROPS$1.closeOnClickAway,
|
|
58
|
+
closeOnEscape = DEFAULT_PROPS$1.closeOnEscape,
|
|
59
|
+
error,
|
|
60
|
+
fitToAnchorWidth,
|
|
61
|
+
hasError,
|
|
62
|
+
helper,
|
|
63
|
+
icon,
|
|
64
|
+
inputRef,
|
|
65
|
+
clearButtonProps,
|
|
66
|
+
isRequired,
|
|
67
|
+
isOpen,
|
|
68
|
+
isValid,
|
|
69
|
+
label,
|
|
70
|
+
name,
|
|
71
|
+
offset,
|
|
72
|
+
onBlur,
|
|
73
|
+
onChange,
|
|
74
|
+
onClose,
|
|
75
|
+
onFocus,
|
|
76
|
+
onInfiniteScroll,
|
|
77
|
+
placeholder,
|
|
78
|
+
placement,
|
|
79
|
+
shouldFocusOnClose = DEFAULT_PROPS$1.shouldFocusOnClose,
|
|
80
|
+
theme = defaultTheme,
|
|
81
|
+
value,
|
|
82
|
+
textFieldProps = {},
|
|
83
|
+
focusAnchorOnClose,
|
|
84
|
+
...forwardedProps
|
|
85
|
+
} = otherProps;
|
|
86
|
+
const inputAnchorRef = useRef(null);
|
|
87
|
+
const textFieldRef = useRef(null);
|
|
88
|
+
useFocus(inputAnchorRef.current, !isOpen && shouldFocusOnClose);
|
|
89
|
+
return /*#__PURE__*/jsxs("div", {
|
|
90
|
+
ref: ref,
|
|
91
|
+
...forwardedProps,
|
|
92
|
+
className: classNames(className, CLASSNAME$1),
|
|
93
|
+
children: [/*#__PURE__*/jsx(TextField, {
|
|
94
|
+
...textFieldProps,
|
|
95
|
+
chips: chips,
|
|
96
|
+
error: error,
|
|
97
|
+
hasError: hasError,
|
|
98
|
+
helper: helper,
|
|
99
|
+
icon: icon,
|
|
100
|
+
inputRef: mergeRefs(inputAnchorRef, inputRef),
|
|
101
|
+
clearButtonProps: clearButtonProps,
|
|
102
|
+
...disabledStateProps,
|
|
103
|
+
isRequired: isRequired,
|
|
104
|
+
isValid: isValid,
|
|
105
|
+
label: label,
|
|
106
|
+
name: name,
|
|
107
|
+
onBlur: onBlur,
|
|
108
|
+
onChange: onChange,
|
|
109
|
+
onFocus: onFocus,
|
|
110
|
+
placeholder: placeholder,
|
|
111
|
+
textFieldRef: textFieldRef,
|
|
112
|
+
theme: theme,
|
|
113
|
+
value: value
|
|
114
|
+
}), /*#__PURE__*/jsx(Dropdown, {
|
|
115
|
+
anchorRef: anchorToInput ? inputAnchorRef : textFieldRef,
|
|
116
|
+
closeOnClick: closeOnClick,
|
|
117
|
+
closeOnClickAway: closeOnClickAway,
|
|
118
|
+
closeOnEscape: closeOnEscape,
|
|
119
|
+
focusAnchorOnClose: focusAnchorOnClose,
|
|
120
|
+
fitToAnchorWidth: fitToAnchorWidth,
|
|
121
|
+
isOpen: isOpen,
|
|
122
|
+
offset: offset,
|
|
123
|
+
onClose: onClose,
|
|
124
|
+
onInfiniteScroll: onInfiniteScroll,
|
|
125
|
+
placement: placement,
|
|
126
|
+
shouldFocusOnOpen: false,
|
|
127
|
+
theme: theme,
|
|
128
|
+
children: children
|
|
129
|
+
})]
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
Autocomplete.displayName = COMPONENT_NAME$1;
|
|
133
|
+
Autocomplete.className = CLASSNAME$1;
|
|
134
|
+
Autocomplete.defaultProps = DEFAULT_PROPS$1;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Component display name.
|
|
138
|
+
*/
|
|
139
|
+
const COMPONENT_NAME = 'AutocompleteMultiple';
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Component default class name and class prefix.
|
|
143
|
+
*/
|
|
144
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Component default props.
|
|
148
|
+
*/
|
|
149
|
+
const DEFAULT_PROPS = {
|
|
150
|
+
closeOnClickAway: true,
|
|
151
|
+
closeOnEscape: true,
|
|
152
|
+
selectedChipRender(choice, index, onClear, isDisabled) {
|
|
153
|
+
const onClick = event => onClear && onClear(event, choice);
|
|
154
|
+
return /*#__PURE__*/jsx(Chip, {
|
|
155
|
+
after: onClear && /*#__PURE__*/jsx(Icon, {
|
|
156
|
+
icon: mdiClose,
|
|
157
|
+
size: Size.xxs
|
|
158
|
+
}),
|
|
159
|
+
isDisabled: isDisabled,
|
|
160
|
+
size: Size.s,
|
|
161
|
+
onAfterClick: onClick,
|
|
162
|
+
onClick: onClick,
|
|
163
|
+
children: choice
|
|
164
|
+
}, index);
|
|
165
|
+
},
|
|
166
|
+
values: []
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* AutocompleteMultiple component.
|
|
171
|
+
*
|
|
172
|
+
* @param props Component props.
|
|
173
|
+
* @param ref Component ref.
|
|
174
|
+
* @return React element.
|
|
175
|
+
*/
|
|
176
|
+
const AutocompleteMultiple = forwardRef((props, ref) => {
|
|
177
|
+
const defaultTheme = useTheme();
|
|
178
|
+
const {
|
|
179
|
+
disabledStateProps,
|
|
180
|
+
otherProps
|
|
181
|
+
} = useDisableStateProps(props);
|
|
182
|
+
const {
|
|
183
|
+
anchorToInput,
|
|
184
|
+
children,
|
|
185
|
+
// `chipsAlignment` needs to be here to remove it from `forwardedProps`.
|
|
186
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
187
|
+
chipsAlignment,
|
|
188
|
+
className,
|
|
189
|
+
closeOnClickAway = DEFAULT_PROPS.closeOnClickAway,
|
|
190
|
+
closeOnEscape = DEFAULT_PROPS.closeOnEscape,
|
|
191
|
+
fitToAnchorWidth,
|
|
192
|
+
hasError,
|
|
193
|
+
helper,
|
|
194
|
+
icon,
|
|
195
|
+
inputRef,
|
|
196
|
+
clearButtonProps,
|
|
197
|
+
isRequired,
|
|
198
|
+
isOpen,
|
|
199
|
+
isValid,
|
|
200
|
+
label,
|
|
201
|
+
name,
|
|
202
|
+
offset,
|
|
203
|
+
onBlur,
|
|
204
|
+
onChange,
|
|
205
|
+
onClear,
|
|
206
|
+
onClose,
|
|
207
|
+
onFocus,
|
|
208
|
+
onInfiniteScroll,
|
|
209
|
+
onKeyDown,
|
|
210
|
+
placeholder,
|
|
211
|
+
placement,
|
|
212
|
+
selectedChipRender = DEFAULT_PROPS.selectedChipRender,
|
|
213
|
+
shouldFocusOnClose,
|
|
214
|
+
theme = defaultTheme,
|
|
215
|
+
type,
|
|
216
|
+
value,
|
|
217
|
+
values = DEFAULT_PROPS.values,
|
|
218
|
+
...forwardedProps
|
|
219
|
+
} = otherProps;
|
|
220
|
+
return /*#__PURE__*/jsx(Autocomplete, {
|
|
221
|
+
ref: ref,
|
|
222
|
+
...forwardedProps,
|
|
223
|
+
anchorToInput: anchorToInput,
|
|
224
|
+
className: classNames(className, CLASSNAME),
|
|
225
|
+
name: name,
|
|
226
|
+
value: value,
|
|
227
|
+
onChange: onChange,
|
|
228
|
+
onKeyDown: onKeyDown,
|
|
229
|
+
onBlur: onBlur,
|
|
230
|
+
shouldFocusOnClose: shouldFocusOnClose,
|
|
231
|
+
onFocus: onFocus,
|
|
232
|
+
hasError: hasError,
|
|
233
|
+
helper: helper,
|
|
234
|
+
icon: icon,
|
|
235
|
+
inputRef: inputRef,
|
|
236
|
+
chips: values && values.map((chip, index) => selectedChipRender?.(chip, index, onClear)),
|
|
237
|
+
...disabledStateProps,
|
|
238
|
+
isRequired: isRequired,
|
|
239
|
+
clearButtonProps: clearButtonProps,
|
|
240
|
+
isValid: isValid,
|
|
241
|
+
label: label,
|
|
242
|
+
placeholder: placeholder,
|
|
243
|
+
theme: theme,
|
|
244
|
+
type: type,
|
|
245
|
+
isOpen: isOpen,
|
|
246
|
+
closeOnClick: false,
|
|
247
|
+
closeOnClickAway: closeOnClickAway,
|
|
248
|
+
closeOnEscape: closeOnEscape,
|
|
249
|
+
onClose: onClose,
|
|
250
|
+
offset: offset,
|
|
251
|
+
placement: placement,
|
|
252
|
+
fitToAnchorWidth: fitToAnchorWidth,
|
|
253
|
+
onInfiniteScroll: onInfiniteScroll,
|
|
254
|
+
children: children
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
AutocompleteMultiple.displayName = COMPONENT_NAME;
|
|
258
|
+
AutocompleteMultiple.className = CLASSNAME;
|
|
259
|
+
AutocompleteMultiple.defaultProps = DEFAULT_PROPS;
|
|
260
|
+
|
|
261
|
+
export { Autocomplete, AutocompleteMultiple };
|
|
262
|
+
//# sourceMappingURL=autocomplete-70749e51.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete-70749e51.js","sources":["../../../src/components/autocomplete/Autocomplete.tsx","../../../src/components/autocomplete/AutocompleteMultiple.tsx"],"sourcesContent":["import { ReactNode, SyntheticEvent, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Dropdown, DropdownProps, IconButtonProps, Offset, Placement, TextField, TextFieldProps } from '@lumx/react';\n\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { useFocus } from '@lumx/react/hooks/useFocus';\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { useDisableStateProps } from '@lumx/react/utils/disabled/useDisableStateProps';\n\n/**\n * Defines the props of the component.\n */\nexport interface AutocompleteProps extends GenericProps, HasTheme {\n /**\n * Whether the suggestions list should display anchored to the input or to the wrapper.\n * @see {@link DropdownProps#anchorToInput}\n */\n anchorToInput?: boolean;\n /**\n * Props to pass to the clear button (minus those already set by the TextField props).\n * If not specified, the button won't be displayed.\n * @see {@link TextFieldProps#clearButtonProps}\n */\n clearButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis'>;\n /**\n * Reference to the <input> or <textarea> element.\n * @see {@link TextFieldProps#inputRef}\n */\n inputRef?: TextFieldProps['inputRef'];\n /**\n * The offset that will be applied to the Dropdown position.\n * @see {@link DropdownProps#offset}\n */\n offset?: Offset;\n /**\n * The preferred Dropdown location against the anchor element.\n * @see {@link DropdownProps#placement}\n */\n placement?: Placement;\n /**\n * Manage dropdown width:\n * - `maxWidth`: dropdown not bigger than anchor\n * - `minWidth` or `true`: dropdown not smaller than anchor\n * - `width`: dropdown equal to the anchor.\n * @see {@link DropdownProps#fitToAnchorWidth}\n */\n fitToAnchorWidth?: DropdownProps['fitToAnchorWidth'];\n /**\n * The error related to the component.\n * @see {@link TextFieldProps#error}\n */\n error?: string | ReactNode;\n /**\n * Whether the text field is displayed with error style or not.\n * @see {@link TextFieldProps#hasError}\n */\n hasError?: boolean;\n /**\n * Whether the text box should be focused upon closing the suggestions or not.\n */\n shouldFocusOnClose?: boolean;\n /**\n * The helper message of the text field.\n * @see {@link TextFieldProps#helper}\n */\n helper?: string;\n /**\n * The icon of the text field (SVG path).\n * @see {@link TextFieldProps#icon}\n */\n icon?: string;\n /**\n * Whether the component is disabled or not.\n * @see {@link TextFieldProps#isDisabled}\n */\n isDisabled?: boolean;\n /**\n * Whether the component is required or not.\n * @see {@link TextFieldProps#isRequired}\n */\n isRequired?: boolean;\n /**\n * Whether the text field is displayed with valid style or not.\n * @see {@link TextFieldProps#isValid}\n */\n isValid?: boolean;\n /**\n * The label of the text field displayed in a label tag.\n * @see {@link TextFieldProps#label}\n */\n label?: string;\n /**\n * The placeholder message of the text field.\n * @see {@link TextFieldProps#placeholder}\n */\n placeholder?: string;\n /** List of suggestions to display during autocomplete. */\n children: React.ReactNode;\n /**\n * The list of chips to be displayed before the text field input.\n */\n chips?: React.ReactNode;\n /**\n * The value of the text field.\n * @see {@link TextFieldProps#value}\n */\n value: string;\n /**\n * Whether the suggestions from the autocomplete should be displayed or not.\n * @see {@link DropdownProps#isOpen}\n */\n isOpen: boolean;\n /**\n * The native input name property.\n * @see {@link TextFieldProps#name}\n */\n name?: string;\n /**\n * Whether a click in the Autocomplete dropdown would close it or not.\n * @see {@link DropdownProps#closeOnClick}\n */\n closeOnClick?: boolean;\n /**\n * Whether a click anywhere out of the Autocomplete would close it or not.\n * @see {@link DropdownProps#closeOnClickAway}\n */\n closeOnClickAway?: boolean;\n /**\n * Whether an escape key press would close the Autocomplete or not.\n * @see {@link DropdownProps#closeOnEscape}\n */\n closeOnEscape?: boolean;\n /**\n * Whether the focus should go back on the anchor when dropdown closes and focus is within.\n * @see {@link DropdownProps#focusAnchorOnClose}\n */\n focusAnchorOnClose?: DropdownProps['focusAnchorOnClose'];\n /**\n * The function called on blur.\n * @see {@link TextFieldProps#onBlur}\n */\n onBlur?(event: React.FocusEvent): void;\n /**\n * On change callback.\n * @see {@link TextFieldProps#onChange}\n */\n onChange(value: string, name?: string, event?: SyntheticEvent): void;\n /**\n * The function called on close.\n * @see {@link DropdownProps#onClose}\n */\n onClose?(): void;\n /**\n * The function called on focus.\n * @see {@link TextFieldProps#onFocus}\n */\n onFocus?(event: React.FocusEvent): void;\n /**\n * The function called when the bottom of the dropdown is reached.\n * @see {@link DropdownProps#onInfiniteScroll}\n */\n onInfiniteScroll?(): void;\n /**\n * Props forwarded to the underlying TextField component.\n * Only the props not managed by the Autocomplete can be set.\n * @see {@link TextFieldProps}\n */\n textFieldProps?: Partial<TextFieldProps>;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Autocomplete';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<AutocompleteProps> = {\n anchorToInput: false,\n closeOnClick: false,\n closeOnClickAway: true,\n closeOnEscape: true,\n shouldFocusOnClose: false,\n};\n\n/**\n * Autocomplete component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Autocomplete = forwardRef<AutocompleteProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme();\n const { disabledStateProps, otherProps } = useDisableStateProps(props);\n const {\n anchorToInput = DEFAULT_PROPS.anchorToInput,\n children,\n chips,\n className,\n closeOnClick = DEFAULT_PROPS.closeOnClick,\n closeOnClickAway = DEFAULT_PROPS.closeOnClickAway,\n closeOnEscape = DEFAULT_PROPS.closeOnEscape,\n error,\n fitToAnchorWidth,\n hasError,\n helper,\n icon,\n inputRef,\n clearButtonProps,\n isRequired,\n isOpen,\n isValid,\n label,\n name,\n offset,\n onBlur,\n onChange,\n onClose,\n onFocus,\n onInfiniteScroll,\n placeholder,\n placement,\n shouldFocusOnClose = DEFAULT_PROPS.shouldFocusOnClose,\n theme = defaultTheme,\n value,\n textFieldProps = {},\n focusAnchorOnClose,\n ...forwardedProps\n } = otherProps;\n const inputAnchorRef = useRef<HTMLElement>(null);\n const textFieldRef = useRef(null);\n useFocus(inputAnchorRef.current, !isOpen && shouldFocusOnClose);\n\n return (\n <div ref={ref} {...forwardedProps} className={classNames(className, CLASSNAME)}>\n <TextField\n {...textFieldProps}\n chips={chips}\n error={error}\n hasError={hasError}\n helper={helper}\n icon={icon}\n inputRef={mergeRefs(inputAnchorRef as React.RefObject<HTMLInputElement>, inputRef)}\n clearButtonProps={clearButtonProps}\n {...disabledStateProps}\n isRequired={isRequired}\n isValid={isValid}\n label={label}\n name={name}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n placeholder={placeholder}\n textFieldRef={textFieldRef}\n theme={theme}\n value={value}\n />\n <Dropdown\n anchorRef={anchorToInput ? inputAnchorRef : textFieldRef}\n closeOnClick={closeOnClick}\n closeOnClickAway={closeOnClickAway}\n closeOnEscape={closeOnEscape}\n focusAnchorOnClose={focusAnchorOnClose}\n fitToAnchorWidth={fitToAnchorWidth}\n isOpen={isOpen}\n offset={offset}\n onClose={onClose}\n onInfiniteScroll={onInfiniteScroll}\n placement={placement}\n shouldFocusOnOpen={false}\n theme={theme}\n >\n {children}\n </Dropdown>\n </div>\n );\n});\nAutocomplete.displayName = COMPONENT_NAME;\nAutocomplete.className = CLASSNAME;\nAutocomplete.defaultProps = DEFAULT_PROPS;\n","import { ReactNode } from 'react';\n\nimport classNames from 'classnames';\n\nimport { mdiClose } from '@lumx/icons/esm/close';\n\nimport { Autocomplete, AutocompleteProps, Chip, HorizontalAlignment, Icon, Size } from '@lumx/react';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\n\nimport { useDisableStateProps } from '@lumx/react/utils/disabled/useDisableStateProps';\n\n/**\n * Defines the props of the component.\n */\nexport interface AutocompleteMultipleProps extends AutocompleteProps {\n /** Selected values. */\n values: any[];\n /** Alignment of the chips in the autocomplete. */\n chipsAlignment?: HorizontalAlignment;\n /** Selected value render function. Default: Renders the value inside of a Chip. */\n selectedChipRender(\n choice: any,\n index: number,\n onClear?: (event: React.MouseEvent, choice: any) => void,\n isDisabled?: boolean,\n ): ReactNode | string;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'AutocompleteMultiple';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<AutocompleteMultipleProps> = {\n closeOnClickAway: true,\n closeOnEscape: true,\n selectedChipRender(choice, index, onClear, isDisabled) {\n const onClick = (event: React.MouseEvent) => onClear && onClear(event, choice);\n return (\n <Chip\n key={index}\n after={onClear && <Icon icon={mdiClose} size={Size.xxs} />}\n isDisabled={isDisabled}\n size={Size.s}\n onAfterClick={onClick}\n onClick={onClick}\n >\n {choice}\n </Chip>\n );\n },\n values: [],\n};\n\n/**\n * AutocompleteMultiple component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const AutocompleteMultiple = forwardRef<AutocompleteMultipleProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme();\n const { disabledStateProps, otherProps } = useDisableStateProps(props);\n const {\n anchorToInput,\n children,\n // `chipsAlignment` needs to be here to remove it from `forwardedProps`.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n chipsAlignment,\n className,\n closeOnClickAway = DEFAULT_PROPS.closeOnClickAway,\n closeOnEscape = DEFAULT_PROPS.closeOnEscape,\n fitToAnchorWidth,\n hasError,\n helper,\n icon,\n inputRef,\n clearButtonProps,\n isRequired,\n isOpen,\n isValid,\n label,\n name,\n offset,\n onBlur,\n onChange,\n onClear,\n onClose,\n onFocus,\n onInfiniteScroll,\n onKeyDown,\n placeholder,\n placement,\n selectedChipRender = DEFAULT_PROPS.selectedChipRender,\n shouldFocusOnClose,\n theme = defaultTheme,\n type,\n value,\n values = DEFAULT_PROPS.values,\n ...forwardedProps\n } = otherProps;\n\n return (\n <Autocomplete\n ref={ref}\n {...forwardedProps}\n anchorToInput={anchorToInput}\n className={classNames(className, CLASSNAME)}\n name={name}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onBlur={onBlur}\n shouldFocusOnClose={shouldFocusOnClose}\n onFocus={onFocus}\n hasError={hasError}\n helper={helper}\n icon={icon}\n inputRef={inputRef}\n chips={values && values.map((chip: any, index: number) => selectedChipRender?.(chip, index, onClear))}\n {...disabledStateProps}\n isRequired={isRequired}\n clearButtonProps={clearButtonProps}\n isValid={isValid}\n label={label}\n placeholder={placeholder}\n theme={theme}\n type={type}\n isOpen={isOpen}\n closeOnClick={false}\n closeOnClickAway={closeOnClickAway}\n closeOnEscape={closeOnEscape}\n onClose={onClose}\n offset={offset}\n placement={placement}\n fitToAnchorWidth={fitToAnchorWidth}\n onInfiniteScroll={onInfiniteScroll}\n >\n {children}\n </Autocomplete>\n );\n});\nAutocompleteMultiple.displayName = COMPONENT_NAME;\nAutocompleteMultiple.className = CLASSNAME;\nAutocompleteMultiple.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","anchorToInput","closeOnClick","closeOnClickAway","closeOnEscape","shouldFocusOnClose","Autocomplete","forwardRef","props","ref","defaultTheme","useTheme","disabledStateProps","otherProps","useDisableStateProps","children","chips","className","error","fitToAnchorWidth","hasError","helper","icon","inputRef","clearButtonProps","isRequired","isOpen","isValid","label","name","offset","onBlur","onChange","onClose","onFocus","onInfiniteScroll","placeholder","placement","theme","value","textFieldProps","focusAnchorOnClose","forwardedProps","inputAnchorRef","useRef","textFieldRef","useFocus","current","_jsxs","classNames","_jsx","TextField","mergeRefs","Dropdown","anchorRef","shouldFocusOnOpen","displayName","defaultProps","selectedChipRender","choice","index","onClear","isDisabled","onClick","event","Chip","after","Icon","mdiClose","size","Size","xxs","s","onAfterClick","values","AutocompleteMultiple","chipsAlignment","onKeyDown","type","map","chip"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import classNames from 'classnames';
|
|
2
|
+
import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
|
|
3
|
+
import { u as useTheme } from '../ThemeContext-3181f000.js';
|
|
4
|
+
import { f as forwardRef } from '../forwardRef-8bce732e.js';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
import { T as Thumbnail } from '../Thumbnail-02bd6869.js';
|
|
7
|
+
import { Size, Theme, AspectRatio } from '@lumx/core/js/constants';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Component display name.
|
|
11
|
+
*/
|
|
12
|
+
const COMPONENT_NAME = 'Avatar';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Component default class name and class prefix.
|
|
16
|
+
*/
|
|
17
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Component default props.
|
|
21
|
+
*/
|
|
22
|
+
const DEFAULT_PROPS = {
|
|
23
|
+
size: Size.m
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Avatar component.
|
|
28
|
+
*
|
|
29
|
+
* @param props Component props.
|
|
30
|
+
* @param ref Component ref.
|
|
31
|
+
* @return React element.
|
|
32
|
+
*/
|
|
33
|
+
const Avatar = forwardRef((props, ref) => {
|
|
34
|
+
const defaultTheme = useTheme() || Theme.light;
|
|
35
|
+
const {
|
|
36
|
+
actions,
|
|
37
|
+
alt,
|
|
38
|
+
badge,
|
|
39
|
+
className,
|
|
40
|
+
image,
|
|
41
|
+
linkProps,
|
|
42
|
+
linkAs,
|
|
43
|
+
onClick,
|
|
44
|
+
onKeyPress,
|
|
45
|
+
size = DEFAULT_PROPS.size,
|
|
46
|
+
theme = defaultTheme,
|
|
47
|
+
thumbnailProps,
|
|
48
|
+
...forwardedProps
|
|
49
|
+
} = props;
|
|
50
|
+
return /*#__PURE__*/jsxs("div", {
|
|
51
|
+
ref: ref,
|
|
52
|
+
...forwardedProps,
|
|
53
|
+
className: classNames(className, handleBasicClasses({
|
|
54
|
+
prefix: CLASSNAME,
|
|
55
|
+
size,
|
|
56
|
+
theme
|
|
57
|
+
})),
|
|
58
|
+
children: [/*#__PURE__*/jsx(Thumbnail, {
|
|
59
|
+
linkProps: linkProps,
|
|
60
|
+
linkAs: linkAs,
|
|
61
|
+
className: `${CLASSNAME}__thumbnail`,
|
|
62
|
+
onClick: onClick,
|
|
63
|
+
onKeyPress: onKeyPress,
|
|
64
|
+
...thumbnailProps,
|
|
65
|
+
aspectRatio: AspectRatio.square,
|
|
66
|
+
size: size,
|
|
67
|
+
image: image,
|
|
68
|
+
alt: alt,
|
|
69
|
+
theme: theme
|
|
70
|
+
}), actions && /*#__PURE__*/jsx("div", {
|
|
71
|
+
className: `${CLASSNAME}__actions`,
|
|
72
|
+
children: actions
|
|
73
|
+
}), badge && /*#__PURE__*/jsx("div", {
|
|
74
|
+
className: `${CLASSNAME}__badge`,
|
|
75
|
+
children: badge
|
|
76
|
+
})]
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
Avatar.displayName = COMPONENT_NAME;
|
|
80
|
+
Avatar.className = CLASSNAME;
|
|
81
|
+
Avatar.defaultProps = DEFAULT_PROPS;
|
|
82
|
+
|
|
83
|
+
export { Avatar };
|
|
84
|
+
//# sourceMappingURL=avatar-ed9f4869.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-ed9f4869.js","sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["import { KeyboardEventHandler, MouseEventHandler, ReactElement, ReactNode } from 'react';\n\nimport classNames from 'classnames';\n\nimport { AspectRatio, Size, Theme, Thumbnail, ThumbnailProps } from '@lumx/react';\n\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\n/**\n * Avatar sizes.\n */\nexport type AvatarSize = Extract<Size, 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface AvatarProps extends GenericProps, HasTheme {\n /** Action toolbar content. */\n actions?: ReactNode;\n /** Image alternative text. */\n alt: string;\n /** Badge. */\n badge?: ReactElement;\n /** Image URL. */\n image: string;\n /** Props to pass to the link wrapping the thumbnail. */\n linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n /** On click callback. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** On key press callback. */\n onKeyPress?: KeyboardEventHandler<HTMLDivElement>;\n /** Size variant. */\n size?: AvatarSize;\n /** Props to pass to the thumbnail (minus those already set by the Avatar props). */\n thumbnailProps?: Omit<\n ThumbnailProps,\n 'image' | 'alt' | 'size' | 'theme' | 'align' | 'fillHeight' | 'variant' | 'aspectRatio'\n >;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Avatar';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<AvatarProps> = {\n size: Size.m,\n};\n\n/**\n * Avatar component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Avatar = forwardRef<AvatarProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n actions,\n alt,\n badge,\n className,\n image,\n linkProps,\n linkAs,\n onClick,\n onKeyPress,\n size = DEFAULT_PROPS.size,\n theme = defaultTheme,\n thumbnailProps,\n ...forwardedProps\n } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, size, theme }))}\n >\n <Thumbnail\n linkProps={linkProps}\n linkAs={linkAs}\n className={`${CLASSNAME}__thumbnail`}\n onClick={onClick}\n onKeyPress={onKeyPress}\n {...thumbnailProps}\n aspectRatio={AspectRatio.square}\n size={size}\n image={image}\n alt={alt}\n theme={theme}\n />\n {actions && <div className={`${CLASSNAME}__actions`}>{actions}</div>}\n {badge && <div className={`${CLASSNAME}__badge`}>{badge}</div>}\n </div>\n );\n});\nAvatar.displayName = COMPONENT_NAME;\nAvatar.className = CLASSNAME;\nAvatar.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","m","Avatar","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","actions","alt","badge","className","image","linkProps","linkAs","onClick","onKeyPress","theme","thumbnailProps","forwardedProps","_jsxs","classNames","handleBasicClasses","prefix","children","_jsx","Thumbnail","aspectRatio","AspectRatio","square","displayName","defaultProps"],"mappings":";;;;;;;;AA6CA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,QAAQ,CAAA;;AAE/B;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMG,aAAmC,GAAG;EACxCC,IAAI,EAAEC,IAAI,CAACC,CAAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGC,UAAU,CAA8B,CAACC,KAAK,EAAEC,GAAG,KAAK;EAC1E,MAAMC,YAAY,GAAGC,QAAQ,EAAE,IAAIC,KAAK,CAACC,KAAK,CAAA;EAC9C,MAAM;IACFC,OAAO;IACPC,GAAG;IACHC,KAAK;IACLC,SAAS;IACTC,KAAK;IACLC,SAAS;IACTC,MAAM;IACNC,OAAO;IACPC,UAAU;IACVnB,IAAI,GAAGD,aAAa,CAACC,IAAI;AACzBoB,IAAAA,KAAK,GAAGb,YAAY;IACpBc,cAAc;IACd,GAAGC,cAAAA;AACP,GAAC,GAAGjB,KAAK,CAAA;AAET,EAAA,oBACIkB,IAAA,CAAA,KAAA,EAAA;AACIjB,IAAAA,GAAG,EAAEA,GAAI;AAAA,IAAA,GACLgB,cAAc;AAClBR,IAAAA,SAAS,EAAEU,UAAU,CAACV,SAAS,EAAEW,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAE7B,SAAS;MAAEG,IAAI;AAAEoB,MAAAA,KAAAA;AAAM,KAAC,CAAC,CAAE;IAAAO,QAAA,EAAA,cAEzFC,GAAA,CAACC,SAAS,EAAA;AACNb,MAAAA,SAAS,EAAEA,SAAU;AACrBC,MAAAA,MAAM,EAAEA,MAAO;MACfH,SAAS,EAAE,CAAGjB,EAAAA,SAAS,CAAc,WAAA,CAAA;AACrCqB,MAAAA,OAAO,EAAEA,OAAQ;AACjBC,MAAAA,UAAU,EAAEA,UAAW;AAAA,MAAA,GACnBE,cAAc;MAClBS,WAAW,EAAEC,WAAW,CAACC,MAAO;AAChChC,MAAAA,IAAI,EAAEA,IAAK;AACXe,MAAAA,KAAK,EAAEA,KAAM;AACbH,MAAAA,GAAG,EAAEA,GAAI;AACTQ,MAAAA,KAAK,EAAEA,KAAAA;AAAM,KAChB,CAAC,EACDT,OAAO,iBAAIiB,GAAA,CAAA,KAAA,EAAA;MAAKd,SAAS,EAAE,CAAGjB,EAAAA,SAAS,CAAY,SAAA,CAAA;AAAA8B,MAAAA,QAAA,EAAEhB,OAAAA;AAAO,KAAM,CAAC,EACnEE,KAAK,iBAAIe,GAAA,CAAA,KAAA,EAAA;MAAKd,SAAS,EAAE,CAAGjB,EAAAA,SAAS,CAAU,OAAA,CAAA;AAAA8B,MAAAA,QAAA,EAAEd,KAAAA;AAAK,KAAM,CAAC,CAAA;AAAA,GAC7D,CAAC,CAAA;AAEd,CAAC,EAAC;AACFV,MAAM,CAAC8B,WAAW,GAAGrC,cAAc,CAAA;AACnCO,MAAM,CAACW,SAAS,GAAGjB,SAAS,CAAA;AAC5BM,MAAM,CAAC+B,YAAY,GAAGnC,aAAa;;;;"}
|