@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,169 @@
|
|
|
1
|
+
import React__default, { Children, useRef } from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { mdiChevronDown } from '@lumx/icons/esm/chevron-down';
|
|
4
|
+
import { mdiChevronUp } from '@lumx/icons/esm/chevron-up';
|
|
5
|
+
import { i as isComponent } from '../isComponent-b9762ff1.js';
|
|
6
|
+
import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
|
|
7
|
+
import { partitionMulti } from '@lumx/core/js/utils/collection/partitionMulti';
|
|
8
|
+
import { u as useTheme } from '../ThemeContext-3181f000.js';
|
|
9
|
+
import { f as forwardRef } from '../forwardRef-8bce732e.js';
|
|
10
|
+
import { isEmpty } from '@lumx/core/js/utils/collection/isEmpty';
|
|
11
|
+
import { I as IS_BROWSER } from '../constants-d0e3f49e.js';
|
|
12
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
13
|
+
import { DragHandle } from './drag-handle-ba2e7e67.js';
|
|
14
|
+
import { Theme, ColorPalette, Emphasis } from '@lumx/core/js/constants';
|
|
15
|
+
import { I as IconButton } from '../IconButton-8d61f5be.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Component display name.
|
|
19
|
+
*/
|
|
20
|
+
const COMPONENT_NAME = 'ExpansionPanel';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Component default class name and class prefix.
|
|
24
|
+
*/
|
|
25
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Component default props.
|
|
29
|
+
*/
|
|
30
|
+
const DEFAULT_PROPS = {
|
|
31
|
+
closeMode: 'unmount'
|
|
32
|
+
};
|
|
33
|
+
const isDragHandle = isComponent(DragHandle);
|
|
34
|
+
const isHeader = isComponent('header');
|
|
35
|
+
const isFooter = isComponent('footer');
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* ExpansionPanel component.
|
|
39
|
+
*
|
|
40
|
+
* @param props Component props.
|
|
41
|
+
* @param ref Component ref.
|
|
42
|
+
* @return React element.
|
|
43
|
+
*/
|
|
44
|
+
const ExpansionPanel = forwardRef((props, ref) => {
|
|
45
|
+
const defaultTheme = useTheme() || Theme.light;
|
|
46
|
+
const {
|
|
47
|
+
className,
|
|
48
|
+
closeMode = DEFAULT_PROPS.closeMode,
|
|
49
|
+
children: anyChildren,
|
|
50
|
+
hasBackground,
|
|
51
|
+
hasHeaderDivider,
|
|
52
|
+
isOpen,
|
|
53
|
+
label,
|
|
54
|
+
onClose,
|
|
55
|
+
onOpen,
|
|
56
|
+
onToggleOpen,
|
|
57
|
+
theme = defaultTheme,
|
|
58
|
+
toggleButtonProps,
|
|
59
|
+
...forwardedProps
|
|
60
|
+
} = props;
|
|
61
|
+
const children = Children.toArray(anyChildren);
|
|
62
|
+
|
|
63
|
+
// Partition children by types.
|
|
64
|
+
const [[dragHandle], [header], [footer], content] = partitionMulti(children, [isDragHandle, isHeader, isFooter]);
|
|
65
|
+
|
|
66
|
+
// Either take the header in children or create one with the label.
|
|
67
|
+
const headerProps = /*#__PURE__*/React__default.isValidElement(header) ? header.props : {};
|
|
68
|
+
const headerContent = React__default.Children.count(headerProps.children) > 0 ? headerProps.children : /*#__PURE__*/jsx("span", {
|
|
69
|
+
className: `${CLASSNAME}__label`,
|
|
70
|
+
children: label
|
|
71
|
+
});
|
|
72
|
+
const toggleOpen = event => {
|
|
73
|
+
const shouldOpen = !isOpen;
|
|
74
|
+
if (onOpen && shouldOpen) {
|
|
75
|
+
onOpen(event);
|
|
76
|
+
}
|
|
77
|
+
if (onClose && !shouldOpen) {
|
|
78
|
+
onClose(event);
|
|
79
|
+
}
|
|
80
|
+
if (onToggleOpen) {
|
|
81
|
+
onToggleOpen(shouldOpen, event);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const color = theme === Theme.dark ? ColorPalette.light : ColorPalette.dark;
|
|
85
|
+
const rootClassName = classNames(className, handleBasicClasses({
|
|
86
|
+
hasBackground,
|
|
87
|
+
hasHeader: !isEmpty(headerProps.children),
|
|
88
|
+
hasHeaderDivider,
|
|
89
|
+
isClose: !isOpen,
|
|
90
|
+
isDraggable: Boolean(dragHandle),
|
|
91
|
+
isOpen,
|
|
92
|
+
prefix: CLASSNAME,
|
|
93
|
+
theme
|
|
94
|
+
}));
|
|
95
|
+
const wrapperRef = useRef(null);
|
|
96
|
+
|
|
97
|
+
// Children stay visible while the open/close transition is running
|
|
98
|
+
const [isChildrenVisible, setChildrenVisible] = React__default.useState(isOpen);
|
|
99
|
+
const isOpenRef = React__default.useRef(isOpen);
|
|
100
|
+
React__default.useEffect(() => {
|
|
101
|
+
if (isOpen || closeMode === 'hide') {
|
|
102
|
+
setChildrenVisible(true);
|
|
103
|
+
} else if (!IS_BROWSER) {
|
|
104
|
+
// Outside a browser we can't wait for the transition
|
|
105
|
+
setChildrenVisible(false);
|
|
106
|
+
}
|
|
107
|
+
isOpenRef.current = isOpen;
|
|
108
|
+
}, [closeMode, isOpen]);
|
|
109
|
+
|
|
110
|
+
// Change children's visibility on the transition end
|
|
111
|
+
React__default.useEffect(() => {
|
|
112
|
+
const {
|
|
113
|
+
current: wrapper
|
|
114
|
+
} = wrapperRef;
|
|
115
|
+
if (!IS_BROWSER || !wrapper) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
const onTransitionEnd = () => {
|
|
119
|
+
setChildrenVisible(isOpenRef.current || closeMode === 'hide');
|
|
120
|
+
};
|
|
121
|
+
wrapper.addEventListener('transitionend', onTransitionEnd);
|
|
122
|
+
return () => wrapper.removeEventListener('transitionend', onTransitionEnd);
|
|
123
|
+
}, [closeMode]);
|
|
124
|
+
return /*#__PURE__*/jsxs("section", {
|
|
125
|
+
ref: ref,
|
|
126
|
+
...forwardedProps,
|
|
127
|
+
className: rootClassName,
|
|
128
|
+
children: [/*#__PURE__*/jsxs("header", {
|
|
129
|
+
className: `${CLASSNAME}__header`,
|
|
130
|
+
onClick: toggleOpen,
|
|
131
|
+
children: [dragHandle && /*#__PURE__*/jsx("div", {
|
|
132
|
+
className: `${CLASSNAME}__header-drag`,
|
|
133
|
+
children: dragHandle
|
|
134
|
+
}), /*#__PURE__*/jsx("div", {
|
|
135
|
+
...headerProps,
|
|
136
|
+
className: `${CLASSNAME}__header-content`,
|
|
137
|
+
children: headerContent
|
|
138
|
+
}), /*#__PURE__*/jsx("div", {
|
|
139
|
+
className: `${CLASSNAME}__header-toggle`,
|
|
140
|
+
children: /*#__PURE__*/jsx(IconButton, {
|
|
141
|
+
...toggleButtonProps,
|
|
142
|
+
color: color,
|
|
143
|
+
emphasis: Emphasis.low,
|
|
144
|
+
icon: isOpen ? mdiChevronUp : mdiChevronDown,
|
|
145
|
+
"aria-expanded": isOpen || 'false'
|
|
146
|
+
})
|
|
147
|
+
})]
|
|
148
|
+
}), /*#__PURE__*/jsx("div", {
|
|
149
|
+
className: `${CLASSNAME}__wrapper`,
|
|
150
|
+
ref: wrapperRef,
|
|
151
|
+
children: (isOpen || isChildrenVisible) && /*#__PURE__*/jsxs("div", {
|
|
152
|
+
className: `${CLASSNAME}__container`,
|
|
153
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
154
|
+
className: `${CLASSNAME}__content`,
|
|
155
|
+
children: content
|
|
156
|
+
}), footer && /*#__PURE__*/jsx("div", {
|
|
157
|
+
className: `${CLASSNAME}__footer`,
|
|
158
|
+
children: footer
|
|
159
|
+
})]
|
|
160
|
+
})
|
|
161
|
+
})]
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
ExpansionPanel.displayName = COMPONENT_NAME;
|
|
165
|
+
ExpansionPanel.className = CLASSNAME;
|
|
166
|
+
ExpansionPanel.defaultProps = DEFAULT_PROPS;
|
|
167
|
+
|
|
168
|
+
export { ExpansionPanel };
|
|
169
|
+
//# sourceMappingURL=expansion-panel-0b263437.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expansion-panel-0b263437.js","sources":["../../../src/components/expansion-panel/ExpansionPanel.tsx"],"sourcesContent":["import React, { Children, PropsWithChildren, ReactNode, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { mdiChevronDown } from '@lumx/icons/esm/chevron-down';\nimport { mdiChevronUp } from '@lumx/icons/esm/chevron-up';\n\nimport { ColorPalette, DragHandle, Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { GenericProps, HasCloseMode, HasTheme, isComponent } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { partitionMulti } from '@lumx/core/js/utils/collection/partitionMulti';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { isEmpty } from '@lumx/core/js/utils/collection/isEmpty';\nimport { IS_BROWSER } from '@lumx/react/constants';\n\n/**\n * Defines the props of the component.\n */\nexport interface ExpansionPanelProps extends GenericProps, HasCloseMode, HasTheme {\n /** Whether the expansion panel has a background. */\n hasBackground?: boolean;\n /** Whether the header has a divider. */\n hasHeaderDivider?: boolean;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Label text (overwritten if a `<header>` is provided in the children). */\n label?: string;\n /** On open callback. */\n onOpen?: (event: React.MouseEvent) => void;\n /** On close callback. */\n onClose?: (event: React.MouseEvent) => void;\n /** Props to pass to the toggle button (minus those already set by the ExpansionPanel props). */\n toggleButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** On toggle open or close callback. */\n onToggleOpen?(shouldOpen: boolean, event: React.MouseEvent): void;\n /** Children */\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'ExpansionPanel';\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<ExpansionPanelProps> = {\n closeMode: 'unmount',\n};\n\nconst isDragHandle = isComponent(DragHandle);\nconst isHeader = isComponent('header');\nconst isFooter = isComponent('footer');\n\n/**\n * ExpansionPanel component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const ExpansionPanel = forwardRef<ExpansionPanelProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n className,\n closeMode = DEFAULT_PROPS.closeMode,\n children: anyChildren,\n hasBackground,\n hasHeaderDivider,\n isOpen,\n label,\n onClose,\n onOpen,\n onToggleOpen,\n theme = defaultTheme,\n toggleButtonProps,\n ...forwardedProps\n } = props;\n\n const children: ReactNode[] = Children.toArray(anyChildren);\n\n // Partition children by types.\n const [[dragHandle], [header], [footer], content] = partitionMulti(children, [isDragHandle, isHeader, isFooter]);\n\n // Either take the header in children or create one with the label.\n const headerProps: PropsWithChildren<any> = React.isValidElement(header) ? header.props : {};\n const headerContent =\n React.Children.count(headerProps.children) > 0 ? (\n headerProps.children\n ) : (\n <span className={`${CLASSNAME}__label`}>{label}</span>\n );\n\n const toggleOpen = (event: React.MouseEvent) => {\n const shouldOpen = !isOpen;\n\n if (onOpen && shouldOpen) {\n onOpen(event);\n }\n if (onClose && !shouldOpen) {\n onClose(event);\n }\n if (onToggleOpen) {\n onToggleOpen(shouldOpen, event);\n }\n };\n\n const color = theme === Theme.dark ? ColorPalette.light : ColorPalette.dark;\n\n const rootClassName = classNames(\n className,\n handleBasicClasses({\n hasBackground,\n hasHeader: !isEmpty(headerProps.children),\n hasHeaderDivider,\n isClose: !isOpen,\n isDraggable: Boolean(dragHandle),\n isOpen,\n prefix: CLASSNAME,\n theme,\n }),\n );\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // Children stay visible while the open/close transition is running\n const [isChildrenVisible, setChildrenVisible] = React.useState(isOpen);\n\n const isOpenRef = React.useRef(isOpen);\n React.useEffect(() => {\n if (isOpen || closeMode === 'hide') {\n setChildrenVisible(true);\n } else if (!IS_BROWSER) {\n // Outside a browser we can't wait for the transition\n setChildrenVisible(false);\n }\n isOpenRef.current = isOpen;\n }, [closeMode, isOpen]);\n\n // Change children's visibility on the transition end\n React.useEffect(() => {\n const { current: wrapper } = wrapperRef;\n if (!IS_BROWSER || !wrapper) {\n return undefined;\n }\n const onTransitionEnd = () => {\n setChildrenVisible(isOpenRef.current || closeMode === 'hide');\n };\n wrapper.addEventListener('transitionend', onTransitionEnd);\n return () => wrapper.removeEventListener('transitionend', onTransitionEnd);\n }, [closeMode]);\n\n return (\n <section ref={ref} {...forwardedProps} className={rootClassName}>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}\n <header className={`${CLASSNAME}__header`} onClick={toggleOpen}>\n {dragHandle && <div className={`${CLASSNAME}__header-drag`}>{dragHandle}</div>}\n\n <div {...headerProps} className={`${CLASSNAME}__header-content`}>\n {headerContent}\n </div>\n\n <div className={`${CLASSNAME}__header-toggle`}>\n <IconButton\n {...toggleButtonProps}\n color={color}\n emphasis={Emphasis.low}\n icon={isOpen ? mdiChevronUp : mdiChevronDown}\n aria-expanded={isOpen || 'false'}\n />\n </div>\n </header>\n\n <div className={`${CLASSNAME}__wrapper`} ref={wrapperRef}>\n {(isOpen || isChildrenVisible) && (\n <div className={`${CLASSNAME}__container`}>\n <div className={`${CLASSNAME}__content`}>{content}</div>\n\n {footer && <div className={`${CLASSNAME}__footer`}>{footer}</div>}\n </div>\n )}\n </div>\n </section>\n );\n});\nExpansionPanel.displayName = COMPONENT_NAME;\nExpansionPanel.className = CLASSNAME;\nExpansionPanel.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","closeMode","isDragHandle","isComponent","DragHandle","isHeader","isFooter","ExpansionPanel","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","className","children","anyChildren","hasBackground","hasHeaderDivider","isOpen","label","onClose","onOpen","onToggleOpen","theme","toggleButtonProps","forwardedProps","Children","toArray","dragHandle","header","footer","content","partitionMulti","headerProps","React","isValidElement","headerContent","count","_jsx","toggleOpen","event","shouldOpen","color","dark","ColorPalette","rootClassName","classNames","handleBasicClasses","hasHeader","isEmpty","isClose","isDraggable","Boolean","prefix","wrapperRef","useRef","isChildrenVisible","setChildrenVisible","useState","isOpenRef","useEffect","IS_BROWSER","current","wrapper","undefined","onTransitionEnd","addEventListener","removeEventListener","_jsxs","onClick","IconButton","emphasis","Emphasis","low","icon","mdiChevronUp","mdiChevronDown","displayName","defaultProps"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 { Theme, ColorPalette, Size } from '@lumx/core/js/constants';
|
|
7
|
+
import { Icon } from './icon-ee15673b.js';
|
|
8
|
+
import { T as Text } from '../index-25c9e8c2.js';
|
|
9
|
+
|
|
10
|
+
const COMPONENT_NAME = 'Flag';
|
|
11
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
12
|
+
const DEFAULT_PROPS = {};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Flag component.
|
|
16
|
+
*
|
|
17
|
+
* @param props Component props.
|
|
18
|
+
* @param ref Component ref.
|
|
19
|
+
* @return React element.
|
|
20
|
+
*/
|
|
21
|
+
const Flag = forwardRef((props, ref) => {
|
|
22
|
+
const defaultTheme = useTheme() || Theme.light;
|
|
23
|
+
const {
|
|
24
|
+
label,
|
|
25
|
+
icon,
|
|
26
|
+
color,
|
|
27
|
+
className,
|
|
28
|
+
theme = defaultTheme,
|
|
29
|
+
truncate,
|
|
30
|
+
...forwardedProps
|
|
31
|
+
} = props;
|
|
32
|
+
const flagColor = color || (theme === Theme.light ? ColorPalette.dark : ColorPalette.light);
|
|
33
|
+
const isTruncated = !!truncate;
|
|
34
|
+
return /*#__PURE__*/jsxs("div", {
|
|
35
|
+
...forwardedProps,
|
|
36
|
+
className: classNames(className, handleBasicClasses({
|
|
37
|
+
prefix: CLASSNAME,
|
|
38
|
+
color: flagColor,
|
|
39
|
+
isTruncated
|
|
40
|
+
})),
|
|
41
|
+
ref: ref,
|
|
42
|
+
children: [icon && /*#__PURE__*/jsx(Icon, {
|
|
43
|
+
icon: icon,
|
|
44
|
+
size: Size.xxs,
|
|
45
|
+
className: `${CLASSNAME}__icon`
|
|
46
|
+
}), /*#__PURE__*/jsx(Text, {
|
|
47
|
+
as: "span",
|
|
48
|
+
truncate: isTruncated,
|
|
49
|
+
typography: "overline",
|
|
50
|
+
className: `${CLASSNAME}__label`,
|
|
51
|
+
children: label
|
|
52
|
+
})]
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
Flag.displayName = COMPONENT_NAME;
|
|
56
|
+
Flag.className = CLASSNAME;
|
|
57
|
+
Flag.defaultProps = DEFAULT_PROPS;
|
|
58
|
+
|
|
59
|
+
export { Flag };
|
|
60
|
+
//# sourceMappingURL=flag-8f9a498a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flag-8f9a498a.js","sources":["../../../src/components/flag/Flag.tsx"],"sourcesContent":["import classNames from 'classnames';\n\nimport { ColorPalette, Icon, Size, Theme, Text } from '@lumx/react';\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\nexport interface FlagProps extends GenericProps, HasTheme {\n /** Color of the component. */\n color?: ColorPalette;\n /** Icon to use before the label. */\n icon?: string;\n /** Text label of the flag. */\n label: React.ReactNode;\n /** Enable text truncate on overflow */\n truncate?: boolean;\n}\n\nconst COMPONENT_NAME = 'Flag';\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\nconst DEFAULT_PROPS: Partial<FlagProps> = {};\n\n/**\n * Flag component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Flag = forwardRef<FlagProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const { label, icon, color, className, theme = defaultTheme, truncate, ...forwardedProps } = props;\n const flagColor = color || (theme === Theme.light ? ColorPalette.dark : ColorPalette.light);\n const isTruncated = !!truncate;\n\n return (\n <div\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, color: flagColor, isTruncated }))}\n ref={ref}\n >\n {icon && <Icon icon={icon} size={Size.xxs} className={`${CLASSNAME}__icon`} />}\n <Text as=\"span\" truncate={isTruncated} typography=\"overline\" className={`${CLASSNAME}__label`}>\n {label}\n </Text>\n </div>\n );\n});\nFlag.displayName = COMPONENT_NAME;\nFlag.className = CLASSNAME;\nFlag.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","Flag","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","label","icon","color","className","theme","truncate","forwardedProps","flagColor","ColorPalette","dark","isTruncated","_jsxs","classNames","handleBasicClasses","prefix","children","_jsx","Icon","size","Size","xxs","Text","as","typography","displayName","defaultProps"],"mappings":";;;;;;;;;AAmBA,MAAMA,cAAc,GAAG,MAAM,CAAA;AAC7B,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;AAClD,MAAMG,aAAiC,GAAG,EAAE,CAAA;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,IAAI,GAAGC,UAAU,CAA4B,CAACC,KAAK,EAAEC,GAAG,KAAK;EACtE,MAAMC,YAAY,GAAGC,QAAQ,EAAE,IAAIC,KAAK,CAACC,KAAK,CAAA;EAC9C,MAAM;IAAEC,KAAK;IAAEC,IAAI;IAAEC,KAAK;IAAEC,SAAS;AAAEC,IAAAA,KAAK,GAAGR,YAAY;IAAES,QAAQ;IAAE,GAAGC,cAAAA;AAAe,GAAC,GAAGZ,KAAK,CAAA;AAClG,EAAA,MAAMa,SAAS,GAAGL,KAAK,KAAKE,KAAK,KAAKN,KAAK,CAACC,KAAK,GAAGS,YAAY,CAACC,IAAI,GAAGD,YAAY,CAACT,KAAK,CAAC,CAAA;AAC3F,EAAA,MAAMW,WAAW,GAAG,CAAC,CAACL,QAAQ,CAAA;AAE9B,EAAA,oBACIM,IAAA,CAAA,KAAA,EAAA;AAAA,IAAA,GACQL,cAAc;AAClBH,IAAAA,SAAS,EAAES,UAAU,CAACT,SAAS,EAAEU,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEzB,SAAS;AAAEa,MAAAA,KAAK,EAAEK,SAAS;AAAEG,MAAAA,WAAAA;AAAY,KAAC,CAAC,CAAE;AAC3Gf,IAAAA,GAAG,EAAEA,GAAI;AAAAoB,IAAAA,QAAA,EAERd,CAAAA,IAAI,iBAAIe,GAAA,CAACC,IAAI,EAAA;AAAChB,MAAAA,IAAI,EAAEA,IAAK;MAACiB,IAAI,EAAEC,IAAI,CAACC,GAAI;MAACjB,SAAS,EAAE,GAAGd,SAAS,CAAA,MAAA,CAAA;AAAS,KAAE,CAAC,eAC9E2B,GAAA,CAACK,IAAI,EAAA;AAACC,MAAAA,EAAE,EAAC,MAAM;AAACjB,MAAAA,QAAQ,EAAEK,WAAY;AAACa,MAAAA,UAAU,EAAC,UAAU;MAACpB,SAAS,EAAE,CAAGd,EAAAA,SAAS,CAAU,OAAA,CAAA;AAAA0B,MAAAA,QAAA,EACzFf,KAAAA;AAAK,KACJ,CAAC,CAAA;AAAA,GACN,CAAC,CAAA;AAEd,CAAC,EAAC;AACFR,IAAI,CAACgC,WAAW,GAAGpC,cAAc,CAAA;AACjCI,IAAI,CAACW,SAAS,GAAGd,SAAS,CAAA;AAC1BG,IAAI,CAACiC,YAAY,GAAGlC,aAAa;;;;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import classNames from 'classnames';
|
|
2
|
+
import { Orientation } from '@lumx/core/js/constants';
|
|
3
|
+
import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
|
|
4
|
+
import { f as forwardRef } from '../forwardRef-8bce732e.js';
|
|
5
|
+
import { castArray } from '@lumx/core/js/utils/collection/castArray';
|
|
6
|
+
import { jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Component display name.
|
|
10
|
+
*/
|
|
11
|
+
const COMPONENT_NAME = 'FlexBox';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Component default class name and class prefix.
|
|
15
|
+
*/
|
|
16
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* FlexBox component.
|
|
20
|
+
*
|
|
21
|
+
* @param props Component props.
|
|
22
|
+
* @param ref Component ref.
|
|
23
|
+
* @return React element.
|
|
24
|
+
*/
|
|
25
|
+
const FlexBox = forwardRef((props, ref) => {
|
|
26
|
+
const {
|
|
27
|
+
as: Component = 'div',
|
|
28
|
+
children,
|
|
29
|
+
className,
|
|
30
|
+
fillSpace,
|
|
31
|
+
gap,
|
|
32
|
+
hAlign,
|
|
33
|
+
marginAuto,
|
|
34
|
+
noShrink,
|
|
35
|
+
orientation,
|
|
36
|
+
vAlign,
|
|
37
|
+
wrap,
|
|
38
|
+
...forwardedProps
|
|
39
|
+
} = props;
|
|
40
|
+
return /*#__PURE__*/jsx(Component, {
|
|
41
|
+
ref: ref,
|
|
42
|
+
...forwardedProps,
|
|
43
|
+
className: classNames(className, handleBasicClasses({
|
|
44
|
+
prefix: CLASSNAME,
|
|
45
|
+
orientation: orientation ?? (wrap || hAlign || vAlign ? Orientation.horizontal : null),
|
|
46
|
+
vAlign,
|
|
47
|
+
hAlign,
|
|
48
|
+
gap
|
|
49
|
+
}), wrap && `${CLASSNAME}--wrap`, fillSpace && `${CLASSNAME}--fill-space`, noShrink && `${CLASSNAME}--no-shrink`, marginAuto && castArray(marginAuto).map(align => `${CLASSNAME}--margin-auto-${align}`)),
|
|
50
|
+
children: children
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
FlexBox.displayName = COMPONENT_NAME;
|
|
54
|
+
FlexBox.className = CLASSNAME;
|
|
55
|
+
|
|
56
|
+
export { FlexBox };
|
|
57
|
+
//# sourceMappingURL=flex-box-15be92f6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flex-box-15be92f6.js","sources":["../../../src/components/flex-box/FlexBox.tsx"],"sourcesContent":["import { ReactNode } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Alignment, Orientation, HorizontalAlignment, Size, VerticalAlignment } from '@lumx/core/js/constants';\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { castArray } from '@lumx/core/js/utils/collection/castArray';\n\nexport type MarginAutoAlignment = Extract<Alignment, 'top' | 'bottom' | 'right' | 'left'>;\nexport type GapSize = Extract<Size, 'tiny' | 'regular' | 'medium' | 'big' | 'huge'>;\ntype SpaceAlignment = Extract<Alignment, 'space-between' | 'space-evenly' | 'space-around'>;\nexport type FlexVerticalAlignment = VerticalAlignment | SpaceAlignment;\nexport type FlexHorizontalAlignment = HorizontalAlignment | SpaceAlignment;\n\n/**\n * Defines the props of the component.\n */\nexport interface FlexBoxProps extends GenericProps {\n /** Customize the root element. */\n as?: React.ElementType;\n /** Children elements. */\n children?: ReactNode;\n /** Whether the \"content filling space\" is enabled or not. */\n fillSpace?: boolean;\n /** Gap space between flexbox items. */\n gap?: GapSize;\n /** Flex horizontal alignment. */\n hAlign?: FlexVerticalAlignment;\n /** Whether the \"auto margin\" is enabled all around or not. */\n marginAuto?: MarginAutoAlignment | MarginAutoAlignment[];\n /** Whether the \"content shrink\" is disabled or not. */\n noShrink?: boolean;\n /** Flex direction. */\n orientation?: Orientation;\n /** Flex vertical alignment. */\n vAlign?: FlexHorizontalAlignment;\n /** Whether the \"flex wrap\" is enabled or not. */\n wrap?: boolean;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'FlexBox';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * FlexBox component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const FlexBox = forwardRef<FlexBoxProps, HTMLDivElement>((props, ref) => {\n const {\n as: Component = 'div',\n children,\n className,\n fillSpace,\n gap,\n hAlign,\n marginAuto,\n noShrink,\n orientation,\n vAlign,\n wrap,\n ...forwardedProps\n } = props;\n\n return (\n <Component\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n orientation: orientation ?? (wrap || hAlign || vAlign ? Orientation.horizontal : null),\n vAlign,\n hAlign,\n gap,\n }),\n wrap && `${CLASSNAME}--wrap`,\n fillSpace && `${CLASSNAME}--fill-space`,\n noShrink && `${CLASSNAME}--no-shrink`,\n marginAuto && castArray(marginAuto).map((align) => `${CLASSNAME}--margin-auto-${align}`),\n )}\n >\n {children}\n </Component>\n );\n});\nFlexBox.displayName = COMPONENT_NAME;\nFlexBox.className = CLASSNAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","FlexBox","forwardRef","props","ref","as","Component","children","className","fillSpace","gap","hAlign","marginAuto","noShrink","orientation","vAlign","wrap","forwardedProps","_jsx","classNames","handleBasicClasses","prefix","Orientation","horizontal","castArray","map","align","displayName"],"mappings":";;;;;;;AA0CA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,SAAS,CAAA;;AAEhC;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,OAAO,GAAGC,UAAU,CAA+B,CAACC,KAAK,EAAEC,GAAG,KAAK;EAC5E,MAAM;IACFC,EAAE,EAAEC,SAAS,GAAG,KAAK;IACrBC,QAAQ;IACRC,SAAS;IACTC,SAAS;IACTC,GAAG;IACHC,MAAM;IACNC,UAAU;IACVC,QAAQ;IACRC,WAAW;IACXC,MAAM;IACNC,IAAI;IACJ,GAAGC,cAAAA;AACP,GAAC,GAAGd,KAAK,CAAA;EAET,oBACIe,GAAA,CAACZ,SAAS,EAAA;AACNF,IAAAA,GAAG,EAAEA,GAAI;AAAA,IAAA,GACLa,cAAc;AAClBT,IAAAA,SAAS,EAAEW,UAAU,CACjBX,SAAS,EACTY,kBAAkB,CAAC;AACfC,MAAAA,MAAM,EAAEtB,SAAS;AACjBe,MAAAA,WAAW,EAAEA,WAAW,KAAKE,IAAI,IAAIL,MAAM,IAAII,MAAM,GAAGO,WAAW,CAACC,UAAU,GAAG,IAAI,CAAC;MACtFR,MAAM;MACNJ,MAAM;AACND,MAAAA,GAAAA;AACJ,KAAC,CAAC,EACFM,IAAI,IAAI,CAAA,EAAGjB,SAAS,CAAQ,MAAA,CAAA,EAC5BU,SAAS,IAAI,GAAGV,SAAS,CAAA,YAAA,CAAc,EACvCc,QAAQ,IAAI,CAAGd,EAAAA,SAAS,CAAa,WAAA,CAAA,EACrCa,UAAU,IAAIY,SAAS,CAACZ,UAAU,CAAC,CAACa,GAAG,CAAEC,KAAK,IAAK,CAAG3B,EAAAA,SAAS,iBAAiB2B,KAAK,CAAA,CAAE,CAC3F,CAAE;AAAAnB,IAAAA,QAAA,EAEDA,QAAAA;AAAQ,GACF,CAAC,CAAA;AAEpB,CAAC,EAAC;AACFN,OAAO,CAAC0B,WAAW,GAAG7B,cAAc,CAAA;AACpCG,OAAO,CAACO,SAAS,GAAGT,SAAS;;;;"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import React__default, { Children } from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { i as isComponentType } from '../isComponentType-e806b848.js';
|
|
4
|
+
import { getRootClassName } from '@lumx/core/js/utils/className';
|
|
5
|
+
import { partitionMulti } from '@lumx/core/js/utils/collection/partitionMulti';
|
|
6
|
+
import { f as forwardRef } from '../forwardRef-8bce732e.js';
|
|
7
|
+
import { jsxs } from 'react/jsx-runtime';
|
|
8
|
+
import { Size, Orientation } from '@lumx/core/js/constants';
|
|
9
|
+
import { FlexBox } from './flex-box-15be92f6.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Component display name.
|
|
13
|
+
*/
|
|
14
|
+
const COMPONENT_NAME = 'GenericBlock';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Component default class name and class prefix.
|
|
18
|
+
*/
|
|
19
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Component default props.
|
|
23
|
+
*/
|
|
24
|
+
const DEFAULT_PROPS = {
|
|
25
|
+
gap: Size.big,
|
|
26
|
+
orientation: Orientation.horizontal
|
|
27
|
+
};
|
|
28
|
+
const Figure = () => {};
|
|
29
|
+
const isFigure = isComponentType(Figure);
|
|
30
|
+
const Content = () => {};
|
|
31
|
+
const isContent = isComponentType(Content);
|
|
32
|
+
const Actions = () => {};
|
|
33
|
+
const isActions = isComponentType(Actions);
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The GenericBlock is a layout component made of 3 sections that can be
|
|
37
|
+
* displayed either horizontally of vertically with the same gap between each section.
|
|
38
|
+
*
|
|
39
|
+
* The sections are:
|
|
40
|
+
* - `Figure` => A visual element to display before the main content.
|
|
41
|
+
* - `Content` => The main content displayed
|
|
42
|
+
* - `Actions` => One or more actions to set after the element.
|
|
43
|
+
*
|
|
44
|
+
* @see https://www.figma.com/file/lzzrQmsfaXRaOyRfoEogPZ/DS%3A-playground?node-id=1%3A4076
|
|
45
|
+
*/
|
|
46
|
+
const BaseGenericBlock = forwardRef((props, ref) => {
|
|
47
|
+
const {
|
|
48
|
+
className,
|
|
49
|
+
figure,
|
|
50
|
+
figureProps,
|
|
51
|
+
children,
|
|
52
|
+
actions,
|
|
53
|
+
actionsProps,
|
|
54
|
+
gap = DEFAULT_PROPS.gap,
|
|
55
|
+
orientation = DEFAULT_PROPS.orientation,
|
|
56
|
+
contentProps,
|
|
57
|
+
...forwardedProps
|
|
58
|
+
} = props;
|
|
59
|
+
const sections = React__default.useMemo(() => {
|
|
60
|
+
// Split children by section type
|
|
61
|
+
const [[figureChild], [contentChild], [actionsChild], ...otherChildren] = partitionMulti(Children.toArray(children), [isFigure, isContent, isActions]);
|
|
62
|
+
return {
|
|
63
|
+
figureChild,
|
|
64
|
+
figureChildProps: figureChild?.props,
|
|
65
|
+
contentChild,
|
|
66
|
+
contentChildProps: contentChild?.props,
|
|
67
|
+
actionsChild,
|
|
68
|
+
actionsChildProps: actionsChild?.props,
|
|
69
|
+
otherChildren: otherChildren.filter(child => React__default.Children.count(child) > 0)
|
|
70
|
+
};
|
|
71
|
+
}, [children]);
|
|
72
|
+
return /*#__PURE__*/jsxs(FlexBox, {
|
|
73
|
+
ref: ref,
|
|
74
|
+
className: classNames(className, CLASSNAME),
|
|
75
|
+
gap: gap,
|
|
76
|
+
orientation: orientation,
|
|
77
|
+
...forwardedProps,
|
|
78
|
+
children: [(figure || sections.figureChildProps?.children) && /*#__PURE__*/jsxs(FlexBox, {
|
|
79
|
+
ref: sections.figureChild?.ref,
|
|
80
|
+
vAlign: forwardedProps.vAlign,
|
|
81
|
+
hAlign: forwardedProps.hAlign,
|
|
82
|
+
...figureProps,
|
|
83
|
+
...sections.figureChildProps,
|
|
84
|
+
className: classNames(figureProps?.className, sections.figureChildProps?.className, `${CLASSNAME}__figure`),
|
|
85
|
+
children: [figure, sections.figureChildProps?.children]
|
|
86
|
+
}), (sections.contentChildProps?.children || sections.otherChildren.length > 0) && /*#__PURE__*/jsxs(FlexBox, {
|
|
87
|
+
ref: sections.contentChild?.ref,
|
|
88
|
+
orientation: Orientation.vertical,
|
|
89
|
+
fillSpace: true,
|
|
90
|
+
vAlign: forwardedProps.vAlign,
|
|
91
|
+
hAlign: forwardedProps.hAlign,
|
|
92
|
+
...contentProps,
|
|
93
|
+
...sections.contentChildProps,
|
|
94
|
+
className: classNames(contentProps?.className, sections.contentChildProps?.className, `${CLASSNAME}__content`),
|
|
95
|
+
children: [sections.contentChildProps?.children, sections.otherChildren]
|
|
96
|
+
}), (actions || sections.actionsChildProps?.children) && /*#__PURE__*/jsxs(FlexBox, {
|
|
97
|
+
ref: sections.actionsChild?.ref,
|
|
98
|
+
vAlign: forwardedProps.vAlign,
|
|
99
|
+
hAlign: forwardedProps.hAlign,
|
|
100
|
+
...actionsProps,
|
|
101
|
+
...sections.actionsChildProps,
|
|
102
|
+
className: classNames(actionsProps?.className, sections.actionsChildProps?.className, `${CLASSNAME}__actions`),
|
|
103
|
+
children: [actions, sections.actionsChildProps?.children]
|
|
104
|
+
})]
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
BaseGenericBlock.displayName = COMPONENT_NAME;
|
|
108
|
+
BaseGenericBlock.className = CLASSNAME;
|
|
109
|
+
BaseGenericBlock.defaultProps = DEFAULT_PROPS;
|
|
110
|
+
const GenericBlock = Object.assign(BaseGenericBlock, {
|
|
111
|
+
Figure,
|
|
112
|
+
Content,
|
|
113
|
+
Actions
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Accepted gap sizes for the generic block.
|
|
118
|
+
*/
|
|
119
|
+
const GenericBlockGapSize = {
|
|
120
|
+
tiny: Size.tiny,
|
|
121
|
+
regular: Size.regular,
|
|
122
|
+
medium: Size.medium,
|
|
123
|
+
big: Size.big,
|
|
124
|
+
huge: Size.huge
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export { GenericBlock, GenericBlockGapSize };
|
|
128
|
+
//# sourceMappingURL=generic-block-5d843f1e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-block-5d843f1e.js","sources":["../../../src/components/generic-block/GenericBlock.tsx","../../../src/components/generic-block/constants.ts"],"sourcesContent":["import React, { Children, ReactElement, ReactNode } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Comp, isComponentType } from '@lumx/react/utils/type';\nimport { getRootClassName } from '@lumx/core/js/utils/className';\nimport { partitionMulti } from '@lumx/core/js/utils/collection/partitionMulti';\nimport { Orientation, Size, FlexBox, FlexBoxProps } from '@lumx/react';\nimport { GenericBlockGapSize } from '@lumx/react/components/generic-block/constants';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nexport interface GenericBlockProps extends FlexBoxProps {\n /**\n * Component to use as visual element.\n */\n figure?: ReactNode;\n /**\n * Actions to set after the main content.\n */\n actions?: ReactNode;\n /**\n * Main content to display or sections components\n * ({@see GenericBlock.Figure}, {@see GenericBlock.Content} & {@see GenericBlock.Actions})\n */\n children: ReactNode;\n /**\n * Orientation of the 3 sections\n */\n orientation?: FlexBoxProps['orientation'];\n /**\n * Horizontal alignment.\n */\n hAlign?: FlexBoxProps['hAlign'];\n /**\n * Vertical alignment.\n */\n vAlign?: FlexBoxProps['vAlign'];\n /**\n * The props to forward to the content.\n * By default, the content will have the same alignment as wrapper.\n */\n contentProps?: Omit<FlexBoxProps, 'children'>;\n /**\n * props to forward to the actions element.\n */\n actionsProps?: Omit<FlexBoxProps, 'children'>;\n /**\n * props to forward to the figure element.\n */\n figureProps?: Omit<FlexBoxProps, 'children'>;\n /**\n * Gap space between sections.\n */\n gap?: GenericBlockGapSize;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'GenericBlock';\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<GenericBlockProps> = {\n gap: Size.big,\n orientation: Orientation.horizontal,\n};\n\ntype BaseGenericBlock = Comp<GenericBlockProps, HTMLDivElement>;\n\ninterface GenericBlockSectionProps extends FlexBoxProps {\n /**\n * Gap space between items.\n */\n gap?: GenericBlockGapSize;\n}\n\ninterface GenericBlock extends BaseGenericBlock {\n /**\n * Use `GenericBlock.Figure` component as children of the `GenericBlock` component as an alternative way to inject\n * the \"figure\" section of the block (instead of using `figure` and `figureProps` props).\n */\n Figure: Comp<GenericBlockSectionProps>;\n /**\n * Use `GenericBlock.Content` component as children of the `GenericBlock` component as an alternative way to inject\n * the \"content\" section of the block (instead of using `content` and `contentProps` props).\n */\n Content: Comp<GenericBlockSectionProps>;\n /**\n * Use `GenericBlock.Actions` component as children of the `GenericBlock` component as an alternative way to inject\n * the \"actions\" section of the block (instead of using `actions` and `actionsProps` props).\n */\n Actions: Comp<GenericBlockSectionProps>;\n}\n\nconst Figure = (() => {}) as unknown as Comp<FlexBoxProps>;\nconst isFigure = isComponentType(Figure);\n\nconst Content = (() => {}) as unknown as Comp<FlexBoxProps>;\nconst isContent = isComponentType(Content);\n\nconst Actions = (() => {}) as unknown as Comp<FlexBoxProps>;\nconst isActions = isComponentType(Actions);\n\n/**\n * The GenericBlock is a layout component made of 3 sections that can be\n * displayed either horizontally of vertically with the same gap between each section.\n *\n * The sections are:\n * - `Figure` => A visual element to display before the main content.\n * - `Content` => The main content displayed\n * - `Actions` => One or more actions to set after the element.\n *\n * @see https://www.figma.com/file/lzzrQmsfaXRaOyRfoEogPZ/DS%3A-playground?node-id=1%3A4076\n */\nconst BaseGenericBlock: BaseGenericBlock = forwardRef((props, ref) => {\n const {\n className,\n figure,\n figureProps,\n children,\n actions,\n actionsProps,\n gap = DEFAULT_PROPS.gap,\n orientation = DEFAULT_PROPS.orientation,\n contentProps,\n ...forwardedProps\n } = props;\n\n const sections = React.useMemo(() => {\n // Split children by section type\n const [[figureChild], [contentChild], [actionsChild], ...otherChildren] = partitionMulti(\n Children.toArray(children),\n [isFigure, isContent, isActions],\n );\n return {\n figureChild,\n figureChildProps: (figureChild as ReactElement)?.props,\n contentChild,\n contentChildProps: (contentChild as ReactElement)?.props,\n actionsChild,\n actionsChildProps: (actionsChild as ReactElement)?.props,\n otherChildren: otherChildren.filter((child) => React.Children.count(child) > 0),\n };\n }, [children]);\n\n return (\n <FlexBox\n ref={ref}\n className={classNames(className, CLASSNAME)}\n gap={gap}\n orientation={orientation}\n {...forwardedProps}\n >\n {(figure || sections.figureChildProps?.children) && (\n <FlexBox\n ref={(sections.figureChild as any)?.ref}\n vAlign={forwardedProps.vAlign}\n hAlign={forwardedProps.hAlign}\n {...figureProps}\n {...sections.figureChildProps}\n className={classNames(\n figureProps?.className,\n sections.figureChildProps?.className,\n `${CLASSNAME}__figure`,\n )}\n >\n {figure}\n {sections.figureChildProps?.children}\n </FlexBox>\n )}\n\n {(sections.contentChildProps?.children || sections.otherChildren.length > 0) && (\n <FlexBox\n ref={(sections.contentChild as any)?.ref}\n orientation={Orientation.vertical}\n fillSpace\n vAlign={forwardedProps.vAlign}\n hAlign={forwardedProps.hAlign}\n {...contentProps}\n {...sections.contentChildProps}\n className={classNames(\n contentProps?.className,\n sections.contentChildProps?.className,\n `${CLASSNAME}__content`,\n )}\n >\n {sections.contentChildProps?.children}\n {sections.otherChildren}\n </FlexBox>\n )}\n\n {(actions || sections.actionsChildProps?.children) && (\n <FlexBox\n ref={(sections.actionsChild as any)?.ref}\n vAlign={forwardedProps.vAlign}\n hAlign={forwardedProps.hAlign}\n {...actionsProps}\n {...sections.actionsChildProps}\n className={classNames(\n actionsProps?.className,\n sections.actionsChildProps?.className,\n `${CLASSNAME}__actions`,\n )}\n >\n {actions}\n {sections.actionsChildProps?.children}\n </FlexBox>\n )}\n </FlexBox>\n );\n});\nBaseGenericBlock.displayName = COMPONENT_NAME;\nBaseGenericBlock.className = CLASSNAME;\nBaseGenericBlock.defaultProps = DEFAULT_PROPS;\n\nexport const GenericBlock: GenericBlock = Object.assign(BaseGenericBlock, { Figure, Content, Actions });\n","import { Size } from '@lumx/react';\n\nexport type GenericBlockGapSize = Extract<Size, 'tiny' | 'regular' | 'medium' | 'big' | 'huge'>;\n\n/**\n * Accepted gap sizes for the generic block.\n */\nexport const GenericBlockGapSize: { [S in GenericBlockGapSize]: S } = {\n tiny: Size.tiny,\n regular: Size.regular,\n medium: Size.medium,\n big: Size.big,\n huge: Size.huge,\n};\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","gap","Size","big","orientation","Orientation","horizontal","Figure","isFigure","isComponentType","Content","isContent","Actions","isActions","BaseGenericBlock","forwardRef","props","ref","className","figure","figureProps","children","actions","actionsProps","contentProps","forwardedProps","sections","React","useMemo","figureChild","contentChild","actionsChild","otherChildren","partitionMulti","Children","toArray","figureChildProps","contentChildProps","actionsChildProps","filter","child","count","_jsxs","FlexBox","classNames","vAlign","hAlign","length","vertical","fillSpace","displayName","defaultProps","GenericBlock","Object","assign","GenericBlockGapSize","tiny","regular","medium","huge"],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import classNames from 'classnames';
|
|
2
|
+
import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
|
|
3
|
+
import { f as forwardRef } from '../forwardRef-8bce732e.js';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
import { Orientation } from '@lumx/core/js/constants';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Component display name.
|
|
9
|
+
*/
|
|
10
|
+
const COMPONENT_NAME$1 = 'Grid';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Component default class name and class prefix.
|
|
14
|
+
*/
|
|
15
|
+
const CLASSNAME$1 = getRootClassName(COMPONENT_NAME$1);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Component default props.
|
|
19
|
+
*/
|
|
20
|
+
const DEFAULT_PROPS = {
|
|
21
|
+
orientation: Orientation.horizontal,
|
|
22
|
+
wrap: 'nowrap'
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Grid component.
|
|
27
|
+
*
|
|
28
|
+
* @param props Component props.
|
|
29
|
+
* @param ref Component ref.
|
|
30
|
+
* @return React element.
|
|
31
|
+
*/
|
|
32
|
+
const Grid = forwardRef((props, ref) => {
|
|
33
|
+
const {
|
|
34
|
+
children,
|
|
35
|
+
className,
|
|
36
|
+
gutter,
|
|
37
|
+
hAlign,
|
|
38
|
+
orientation = DEFAULT_PROPS.orientation,
|
|
39
|
+
vAlign,
|
|
40
|
+
wrap = DEFAULT_PROPS.wrap,
|
|
41
|
+
...forwardedProps
|
|
42
|
+
} = props;
|
|
43
|
+
return /*#__PURE__*/jsx("div", {
|
|
44
|
+
ref: ref,
|
|
45
|
+
...forwardedProps,
|
|
46
|
+
className: classNames(className, `${CLASSNAME$1}-container`, {
|
|
47
|
+
[`${CLASSNAME$1}--h-align-${hAlign}`]: hAlign
|
|
48
|
+
}, {
|
|
49
|
+
[`${CLASSNAME$1}--v-align-${vAlign}`]: vAlign
|
|
50
|
+
}, handleBasicClasses({
|
|
51
|
+
prefix: CLASSNAME$1,
|
|
52
|
+
orientation,
|
|
53
|
+
wrap,
|
|
54
|
+
gutter
|
|
55
|
+
})),
|
|
56
|
+
children: children
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
Grid.displayName = COMPONENT_NAME$1;
|
|
60
|
+
Grid.className = CLASSNAME$1;
|
|
61
|
+
Grid.defaultProps = DEFAULT_PROPS;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Component display name.
|
|
65
|
+
*/
|
|
66
|
+
const COMPONENT_NAME = 'GridItem';
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Component default class name and class prefix.
|
|
70
|
+
*/
|
|
71
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* GridItem component.
|
|
75
|
+
*
|
|
76
|
+
* @param props Component props.
|
|
77
|
+
* @param ref Component ref.
|
|
78
|
+
* @return React element.
|
|
79
|
+
*/
|
|
80
|
+
const GridItem = forwardRef((props, ref) => {
|
|
81
|
+
const {
|
|
82
|
+
children,
|
|
83
|
+
className,
|
|
84
|
+
width,
|
|
85
|
+
align,
|
|
86
|
+
order,
|
|
87
|
+
...forwardedProps
|
|
88
|
+
} = props;
|
|
89
|
+
return /*#__PURE__*/jsx("div", {
|
|
90
|
+
ref: ref,
|
|
91
|
+
...forwardedProps,
|
|
92
|
+
className: classNames(className, handleBasicClasses({
|
|
93
|
+
prefix: CLASSNAME,
|
|
94
|
+
width,
|
|
95
|
+
order,
|
|
96
|
+
align
|
|
97
|
+
})),
|
|
98
|
+
children: children
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
GridItem.displayName = COMPONENT_NAME;
|
|
102
|
+
GridItem.className = CLASSNAME;
|
|
103
|
+
|
|
104
|
+
export { Grid, GridItem };
|
|
105
|
+
//# sourceMappingURL=grid-8c08dc4b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-8c08dc4b.js","sources":["../../../src/components/grid/Grid.tsx","../../../src/components/grid/GridItem.tsx"],"sourcesContent":["import classNames from 'classnames';\n\nimport { Alignment, Orientation, Size } from '@lumx/react';\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\ntype GridGutterSize = Extract<Size, 'regular' | 'big' | 'huge'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface GridProps extends GenericProps {\n /** Orientation. */\n orientation?: Orientation;\n /** Whether the children are wrapped or not. */\n wrap?: string;\n /** Vertical alignment. */\n vAlign?: Alignment;\n /** Horizontal alignment. */\n hAlign?: Alignment;\n /** Gutter size. */\n gutter?: GridGutterSize;\n /** Children */\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Grid';\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<GridProps> = {\n orientation: Orientation.horizontal,\n wrap: 'nowrap',\n};\n\n/**\n * Grid component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Grid = forwardRef<GridProps, HTMLDivElement>((props, ref) => {\n const {\n children,\n className,\n gutter,\n hAlign,\n orientation = DEFAULT_PROPS.orientation,\n vAlign,\n wrap = DEFAULT_PROPS.wrap,\n ...forwardedProps\n } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n `${CLASSNAME}-container`,\n { [`${CLASSNAME}--h-align-${hAlign}`]: hAlign },\n { [`${CLASSNAME}--v-align-${vAlign}`]: vAlign },\n handleBasicClasses({ prefix: CLASSNAME, orientation, wrap, gutter }),\n )}\n >\n {children}\n </div>\n );\n});\nGrid.displayName = COMPONENT_NAME;\nGrid.className = CLASSNAME;\nGrid.defaultProps = DEFAULT_PROPS;\n","import classNames from 'classnames';\n\nimport { Alignment } from '@lumx/react';\nimport { GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\ntype Columns = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12';\n\n/**\n * Defines the props of the component.\n */\nexport interface GridItemProps extends GenericProps {\n /** Alignment. */\n align?: Alignment;\n /** Order. */\n order?: Columns;\n /** Width. */\n width?: Columns;\n /** Children */\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'GridItem';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * GridItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const GridItem = forwardRef<GridItemProps, HTMLDivElement>((props, ref) => {\n const { children, className, width, align, order, ...forwardedProps } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, width, order, align }))}\n >\n {children}\n </div>\n );\n});\nGridItem.displayName = COMPONENT_NAME;\nGridItem.className = CLASSNAME;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","orientation","Orientation","horizontal","wrap","Grid","forwardRef","props","ref","children","className","gutter","hAlign","vAlign","forwardedProps","_jsx","classNames","handleBasicClasses","prefix","displayName","defaultProps","GridItem","width","align","order"],"mappings":";;;;;;AA2BA;AACA;AACA;AACA,MAAMA,gBAAc,GAAG,MAAM,CAAA;;AAE7B;AACA;AACA;AACA,MAAMC,WAAS,GAAGC,gBAAgB,CAACF,gBAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMG,aAAiC,GAAG;EACtCC,WAAW,EAAEC,WAAW,CAACC,UAAU;AACnCC,EAAAA,IAAI,EAAE,QAAA;AACV,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,IAAI,GAAGC,UAAU,CAA4B,CAACC,KAAK,EAAEC,GAAG,KAAK;EACtE,MAAM;IACFC,QAAQ;IACRC,SAAS;IACTC,MAAM;IACNC,MAAM;IACNX,WAAW,GAAGD,aAAa,CAACC,WAAW;IACvCY,MAAM;IACNT,IAAI,GAAGJ,aAAa,CAACI,IAAI;IACzB,GAAGU,cAAAA;AACP,GAAC,GAAGP,KAAK,CAAA;AAET,EAAA,oBACIQ,GAAA,CAAA,KAAA,EAAA;AACIP,IAAAA,GAAG,EAAEA,GAAI;AAAA,IAAA,GACLM,cAAc;IAClBJ,SAAS,EAAEM,UAAU,CACjBN,SAAS,EACT,CAAGZ,EAAAA,WAAS,YAAY,EACxB;AAAE,MAAA,CAAC,CAAGA,EAAAA,WAAS,CAAac,UAAAA,EAAAA,MAAM,EAAE,GAAGA,MAAAA;AAAO,KAAC,EAC/C;AAAE,MAAA,CAAC,CAAGd,EAAAA,WAAS,CAAae,UAAAA,EAAAA,MAAM,EAAE,GAAGA,MAAAA;KAAQ,EAC/CI,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEpB,WAAS;MAAEG,WAAW;MAAEG,IAAI;AAAEO,MAAAA,MAAAA;AAAO,KAAC,CACvE,CAAE;AAAAF,IAAAA,QAAA,EAEDA,QAAAA;AAAQ,GACR,CAAC,CAAA;AAEd,CAAC,EAAC;AACFJ,IAAI,CAACc,WAAW,GAAGtB,gBAAc,CAAA;AACjCQ,IAAI,CAACK,SAAS,GAAGZ,WAAS,CAAA;AAC1BO,IAAI,CAACe,YAAY,GAAGpB,aAAa;;AC3DjC;AACA;AACA;AACA,MAAMH,cAAc,GAAG,UAAU,CAAA;;AAEjC;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMwB,QAAQ,GAAGf,UAAU,CAAgC,CAACC,KAAK,EAAEC,GAAG,KAAK;EAC9E,MAAM;IAAEC,QAAQ;IAAEC,SAAS;IAAEY,KAAK;IAAEC,KAAK;IAAEC,KAAK;IAAE,GAAGV,cAAAA;AAAe,GAAC,GAAGP,KAAK,CAAA;AAE7E,EAAA,oBACIQ,GAAA,CAAA,KAAA,EAAA;AACIP,IAAAA,GAAG,EAAEA,GAAI;AAAA,IAAA,GACLM,cAAc;AAClBJ,IAAAA,SAAS,EAAEM,UAAU,CAACN,SAAS,EAAEO,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAEpB,SAAS;MAAEwB,KAAK;MAAEE,KAAK;AAAED,MAAAA,KAAAA;AAAM,KAAC,CAAC,CAAE;AAAAd,IAAAA,QAAA,EAEhGA,QAAAA;AAAQ,GACR,CAAC,CAAA;AAEd,CAAC,EAAC;AACFY,QAAQ,CAACF,WAAW,GAAGtB,cAAc,CAAA;AACrCwB,QAAQ,CAACX,SAAS,GAAGZ,SAAS;;;;"}
|