react-asc 23.6.1 → 23.7.2

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.
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
- interface IBackdropProps extends React.ComponentProps<'div'> {
2
+ export interface IBackdropProps extends React.ComponentProps<'div'> {
3
3
  target?: HTMLElement;
4
4
  isTransparent?: boolean;
5
5
  }
6
- export declare const Backdrop: (props: IBackdropProps) => React.ReactPortal;
7
- export {};
6
+ export declare const Backdrop: (props: IBackdropProps) => JSX.Element;
@@ -6,4 +6,4 @@ export interface IDrawerProps extends React.ComponentProps<'div'> {
6
6
  permanent?: boolean;
7
7
  target?: HTMLElement;
8
8
  }
9
- export declare const Drawer: (props: IDrawerProps) => React.ReactPortal;
9
+ export declare const Drawer: (props: IDrawerProps) => JSX.Element;
@@ -9,4 +9,4 @@ export interface IMenuBodyProps {
9
9
  shadow?: boolean;
10
10
  onClickBackdrop?: () => void;
11
11
  }
12
- export declare const MenuBody: (props: IMenuBodyProps) => React.ReactPortal;
12
+ export declare const MenuBody: (props: IMenuBodyProps) => JSX.Element;
@@ -1,9 +1,10 @@
1
1
  import { ReactElement, ReactNode } from 'react';
2
2
  import { SIZE } from '../component.enums';
3
3
  export interface IModalProps {
4
+ target?: HTMLElement;
4
5
  className?: string;
5
6
  children?: ReactNode;
6
- header?: string;
7
+ header?: string | ReactElement;
7
8
  footer?: string | ReactElement;
8
9
  onHeaderCloseClick?: () => void;
9
10
  onBackdropClick?: () => void;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ export interface IPortalProps {
3
+ children: React.ReactNode;
4
+ target?: HTMLElement;
5
+ className?: string;
6
+ }
7
+ export declare const Portal: ({ children, target, className }: IPortalProps) => import("react").ReactPortal;
@@ -0,0 +1 @@
1
+ export * from './Portal';
@@ -26,6 +26,7 @@ export * from './List';
26
26
  export * from './LoadingIndicator';
27
27
  export * from './Modal';
28
28
  export * from './NumberSelect';
29
+ export * from './Portal';
29
30
  export * from './ProgressBar';
30
31
  export * from './Sidebar';
31
32
  export * from './Snackbar';
package/index.es.js CHANGED
@@ -1,4 +1,4 @@
1
- import React, { useRef, useEffect, useState, createContext, useContext, Fragment, Component, createRef, cloneElement } from 'react';
1
+ import React, { useRef, useEffect, useState, useMemo, createContext, useContext, Fragment, Component, createRef, cloneElement } from 'react';
2
2
  import { createPortal, render, unmountComponentAtNode } from 'react-dom';
3
3
  import { createPopper } from '@popperjs/core';
4
4
 
@@ -308,6 +308,18 @@ const useOnDestroy = (callBack) => {
308
308
  }, []);
309
309
  };
310
310
 
311
+ const Portal = ({ children, target = document.body, className }) => {
312
+ const containerEl = useMemo(() => document.createElement('div'), []);
313
+ useEffect(() => {
314
+ className && className.split(' ').forEach(cssClass => containerEl.classList.add(cssClass));
315
+ target.appendChild(containerEl);
316
+ return () => {
317
+ target.removeChild(containerEl);
318
+ };
319
+ }, []);
320
+ return createPortal(children, containerEl);
321
+ };
322
+
311
323
  var css_248z$10 = ".Backdrop-module_backdrop__IRMoL {\n height: 100%;\n width: 100%;\n position: absolute;\n opacity: 0.5;\n z-index: 1040;\n top: 0;\n left: 0;\n background-color: #000;\n}\n.Backdrop-module_backdrop__IRMoL.Backdrop-module_isTransparent__F5nA5 {\n opacity: 0;\n}";
312
324
  var styles$10 = {"backdrop":"Backdrop-module_backdrop__IRMoL","isTransparent":"Backdrop-module_isTransparent__F5nA5"};
313
325
  styleInject(css_248z$10);
@@ -325,10 +337,10 @@ const Backdrop = (props) => {
325
337
  return cssClasses.filter(css => css).join(' ');
326
338
  };
327
339
  const getStyles = () => {
328
- const styles = Object.assign({ height: '100%', width: '100%', position: 'absolute' }, style);
329
- return styles;
340
+ return Object.assign({ height: '100%', width: '100%', position: 'absolute' }, style);
330
341
  };
331
- return (createPortal(React.createElement("div", Object.assign({ className: getCssClasses(), onClick: handleClick, style: getStyles() }, rest)), target));
342
+ return (React.createElement(Portal, { className: 'backdrop-root', target: target },
343
+ React.createElement("div", Object.assign({ className: getCssClasses(), onClick: handleClick, style: getStyles() }, rest))));
332
344
  };
333
345
 
334
346
  var css_248z$$ = ".List-module_list__gpZ41 {\n width: 100%;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n margin-top: 0;\n background-color: var(--white);\n}";
@@ -1116,13 +1128,13 @@ const Select = (props) => {
1116
1128
  React.createElement(Icon, { className: "ml-2" },
1117
1129
  React.createElement(ChevronDownSolidIcon, null))),
1118
1130
  isShow &&
1119
- createPortal(React.createElement(React.Fragment, null,
1131
+ React.createElement(Portal, { className: 'backdrop-root' },
1120
1132
  React.createElement("div", { className: styles$D.selectMenu, style: { left: (_a = selectConainter.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().x, top: (_b = selectConainter.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().y, width: (_c = selectConainter.current) === null || _c === void 0 ? void 0 : _c.getBoundingClientRect().width } },
1121
1133
  React.createElement(List, null, options && options.map((option, index) => React.createElement(ListItem, { id: `list-item-${index}`, key: option.value, onClick: () => handleOnClick(option), active: isActive(option) },
1122
1134
  multiple &&
1123
1135
  React.createElement(Checkbox, { checked: isActive(option), onChange: () => handleOnClick(option) }),
1124
1136
  React.createElement(ListItemText, { primary: option.label ? option.label : option.value }))))),
1125
- React.createElement(Backdrop, { style: { zIndex: 1111 }, isTransparent: true, onClick: () => hide() })), document.body)));
1137
+ React.createElement(Backdrop, { style: { zIndex: 1111 }, isTransparent: true, onClick: () => hide() }))));
1126
1138
  };
1127
1139
 
1128
1140
  var css_248z$C = ".Textarea-module_textarea__L5zqa {\n min-height: calc(10em + 0.75rem + 2px);\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n background-clip: padding-box;\n border: 2px solid var(--input-border-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: var(--borderRadius);\n resize: vertical;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n appearance: none;\n border-radius: 0.25rem;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.0745098039);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n border: 1px solid #ced4da;\n}\n.Textarea-module_textarea__L5zqa:focus:not(.Textarea-module_textarea__L5zqa.Textarea-module_disabled__OqqOF) {\n outline: none !important;\n border-color: var(--primary);\n}\n.Textarea-module_textarea__L5zqa.Textarea-module_isInvalid__JI01W {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.2509803922);\n}";
@@ -1550,9 +1562,9 @@ const Drawer = (props) => {
1550
1562
  const handleClickBackdrop = () => {
1551
1563
  onClickBackdrop && onClickBackdrop();
1552
1564
  };
1553
- return createPortal(React.createElement(React.Fragment, null,
1565
+ return (React.createElement(Portal, { className: 'drawer-root', target: target },
1554
1566
  React.createElement(DrawerContent, Object.assign({ className: className, position: position, permanent: permanent, shadow: shadow }, rest), children),
1555
- !permanent && React.createElement(Backdrop, { onClick: handleClickBackdrop })), target);
1567
+ !permanent && React.createElement(Backdrop, { onClick: handleClickBackdrop })));
1556
1568
  };
1557
1569
  const DrawerContent = (props) => {
1558
1570
  const { children, className, position = 'left', permanent = false, shadow } = props, rest = __rest(props, ["children", "className", "position", "permanent", "shadow"]);
@@ -1616,9 +1628,9 @@ const MenuBody = (props) => {
1616
1628
  const handleClickBackdrop = () => {
1617
1629
  onClickBackdrop && onClickBackdrop();
1618
1630
  };
1619
- return (createPortal(React.createElement(React.Fragment, null,
1631
+ return (React.createElement(Portal, { className: 'menu-root' },
1620
1632
  React.createElement("div", { ref: menuBodyRef, className: getCssClasses() }, children),
1621
- React.createElement(Backdrop, { isTransparent: true, onClick: handleClickBackdrop })), document.body));
1633
+ React.createElement(Backdrop, { isTransparent: true, onClick: handleClickBackdrop })));
1622
1634
  };
1623
1635
 
1624
1636
  var css_248z$x = ".Menu-module_menu__p8QL- {\n display: flex;\n}";
@@ -1846,7 +1858,7 @@ var styles$l = {"modal":"Modal-module_modal__HMxWV","modal-dialog":"Modal-module
1846
1858
  styleInject(css_248z$l);
1847
1859
 
1848
1860
  const Modal = (props) => {
1849
- const { className, size, fullScreen, children, header, footer, onHeaderCloseClick, onBackdropClick, isDismissable = false } = props;
1861
+ const { target = document.body, className, size, fullScreen, children, header, footer, onHeaderCloseClick, onBackdropClick, isDismissable = false } = props;
1850
1862
  const getCssClass = () => {
1851
1863
  const cssClasses = [];
1852
1864
  cssClasses.push(styles$l.modalDialog);
@@ -1863,17 +1875,19 @@ const Modal = (props) => {
1863
1875
  };
1864
1876
  }, []);
1865
1877
  const handleClickBackdrop = () => {
1878
+ console.warn('backdrop clicked');
1866
1879
  onBackdropClick && onBackdropClick();
1867
1880
  };
1868
1881
  return (React.createElement(React.Fragment, null,
1869
- React.createElement("div", { className: styles$l.modal },
1870
- React.createElement("div", { className: getCssClass() },
1871
- React.createElement("div", { className: styles$l.modalContent },
1872
- header &&
1873
- React.createElement(ModalHeader, { isDismissable: isDismissable, onClose: () => onHeaderCloseClick && onHeaderCloseClick() }, header),
1874
- React.createElement(ModalBody, null, children),
1875
- footer &&
1876
- React.createElement(ModalFooter, null, footer)))),
1882
+ React.createElement(Portal, { className: 'modal-root', target: target },
1883
+ React.createElement("div", { className: styles$l.modal },
1884
+ React.createElement("div", { className: getCssClass() },
1885
+ React.createElement("div", { className: styles$l.modalContent },
1886
+ header &&
1887
+ React.createElement(ModalHeader, { isDismissable: isDismissable, onClose: () => onHeaderCloseClick && onHeaderCloseClick() }, header),
1888
+ React.createElement(ModalBody, null, children),
1889
+ footer &&
1890
+ React.createElement(ModalFooter, null, footer))))),
1877
1891
  React.createElement(Backdrop, { onClick: handleClickBackdrop })));
1878
1892
  };
1879
1893
 
@@ -2033,7 +2047,7 @@ const Tooltip = (props) => {
2033
2047
  React.createElement("div", { id: "arrow", "data-popper-arrow": true }))));
2034
2048
  };
2035
2049
 
2036
- var css_248z$j = ".ProgressBar-module_progressBarContainer__vtbBw {\n display: flex;\n height: var(--progress-height);\n overflow: hidden;\n background-color: var(--progress-bg);\n}\n\n.ProgressBar-module_progressBar__hr8I8 {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--progress-bar-color);\n text-align: center;\n white-space: nowrap;\n transition: var(--progress-bar-transition);\n background-color: var(--progress-bar-bg);\n}\n.ProgressBar-module_progressBar__hr8I8.ProgressBar-module_indeterminate__WcQdD {\n width: 100%;\n height: 100%;\n animation: ProgressBar-module_indeterminateAnimation__SlBFt 1s infinite linear;\n transform-origin: 0% 50%;\n}\n\n@keyframes ProgressBar-module_indeterminateAnimation__SlBFt {\n 0% {\n transform: translateX(0) scaleX(0);\n }\n 40% {\n transform: translateX(0) scaleX(0.4);\n }\n 100% {\n transform: translateX(100%) scaleX(0.5);\n }\n}";
2050
+ var css_248z$j = ":root {\n --progress-height: 0.5rem;\n --progress-bg: #e9ecef;\n --progress-box-shadow: var(--shadow);\n --progress-bar-color: #fff;\n --progress-bar-bg: var(--primary);\n --progress-bar-transition: width 0.6s ease;\n}\n\n.ProgressBar-module_progressBarContainer__vtbBw {\n display: flex;\n height: var(--progress-height);\n overflow: hidden;\n background-color: var(--progress-bg);\n}\n\n.ProgressBar-module_progressBar__hr8I8 {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--progress-bar-color);\n text-align: center;\n white-space: nowrap;\n transition: var(--progress-bar-transition);\n background-color: var(--progress-bar-bg);\n}\n.ProgressBar-module_progressBar__hr8I8.ProgressBar-module_indeterminate__WcQdD {\n width: 100%;\n height: 100%;\n animation: ProgressBar-module_indeterminateAnimation__SlBFt 1s infinite linear;\n transform-origin: 0% 50%;\n}\n\n@keyframes ProgressBar-module_indeterminateAnimation__SlBFt {\n 0% {\n transform: translateX(0) scaleX(0);\n }\n 40% {\n transform: translateX(0) scaleX(0.4);\n }\n 100% {\n transform: translateX(100%) scaleX(0.5);\n }\n}";
2037
2051
  var styles$j = {"progressBarContainer":"ProgressBar-module_progressBarContainer__vtbBw","progressBar":"ProgressBar-module_progressBar__hr8I8","indeterminate":"ProgressBar-module_indeterminate__WcQdD","indeterminateAnimation":"ProgressBar-module_indeterminateAnimation__SlBFt"};
2038
2052
  styleInject(css_248z$j);
2039
2053
 
@@ -2072,7 +2086,7 @@ const ProgressBar = (props) => {
2072
2086
  }
2073
2087
  return `${width}%`;
2074
2088
  };
2075
- return (React.createElement(Tooltip, { text: model === null || model === void 0 ? void 0 : model.toString() },
2089
+ return (React.createElement(Tooltip, { text: !indeterminate ? model === null || model === void 0 ? void 0 : model.toString() : '' },
2076
2090
  React.createElement("div", Object.assign({ className: getCssClasses() }, rest),
2077
2091
  React.createElement("div", { className: getCssClassesBar(), style: { 'width': getStyle() }, role: "progressbar" }))));
2078
2092
  };
@@ -2554,8 +2568,8 @@ const SkeletonImage = (props) => {
2554
2568
  React.createElement("div", { className: styles$6.img })));
2555
2569
  };
2556
2570
 
2557
- var css_248z$5 = ".Table-module_table__DHKNv {\n --bs-table-bg: transparent;\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: #212529;\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: #212529;\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: #212529;\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n vertical-align: top;\n border-color: #dee2e6;\n}\n.Table-module_table__DHKNv thead {\n vertical-align: bottom;\n}\n.Table-module_table__DHKNv > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.Table-module_table__DHKNv > :not(:first-child) {\n border-top: 2px solid currentColor;\n}\n\n.Table-module_bordered__1Kp1p > :not(caption) > * > * {\n border-width: 0 1px;\n}\n.Table-module_bordered__1Kp1p > :not(caption) > * {\n border-width: 1px 0;\n}\n\n.Table-module_striped__jmxgE > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.Table-module_hover__P6r3y > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.Table-module_tableResponsive__ykttB {\n overflow-x: auto;\n}";
2558
- var styles$5 = {"table":"Table-module_table__DHKNv","bordered":"Table-module_bordered__1Kp1p","striped":"Table-module_striped__jmxgE","hover":"Table-module_hover__P6r3y","tableResponsive":"Table-module_tableResponsive__ykttB"};
2571
+ var css_248z$5 = ":root {\n --table-bg: transparent;\n --table-accent-bg: transparent;\n --table-striped-color: #212529;\n --table-striped-bg: rgba(0, 0, 0, 0.05);\n --table-active-color: #212529;\n --table-active-bg: rgba(0, 0, 0, 0.1);\n --table-hover-color: #212529;\n --table-hover-bg: rgba(0, 0, 0, 0.075);\n}\n\n.Table-module_tableResponsive__ykttB {\n overflow-x: auto;\n}\n\n.Table-module_table__DHKNv {\n display: table;\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0px;\n min-width: 650px;\n}\n.Table-module_table__DHKNv thead {\n display: table-header-group;\n}\n.Table-module_table__DHKNv tbody {\n display: table-row-group;\n}\n.Table-module_table__DHKNv tr {\n color: inherit;\n display: table-row;\n vertical-align: middle;\n outline: 0px;\n}\n.Table-module_table__DHKNv th {\n font-size: 0.875rem;\n line-height: 1.5rem;\n letter-spacing: 0.01071em;\n display: table-cell;\n vertical-align: inherit;\n border-bottom: 1px solid rgb(224, 224, 224);\n text-align: left;\n padding: 16px;\n color: rgba(0, 0, 0, 0.87);\n border-collapse: collapse;\n border-spacing: 0px;\n}\n.Table-module_table__DHKNv td {\n font-size: 0.875rem;\n line-height: 1.43;\n letter-spacing: 0.01071em;\n display: table-cell;\n vertical-align: inherit;\n border-bottom: 1px solid rgb(224, 224, 224);\n padding: 16px;\n color: rgba(0, 0, 0, 0.87);\n flex-direction: row-reverse;\n}\n\n.Table-module_hover__P6r3y > tbody > tr:hover > * {\n background-color: var(--table-hover-bg);\n color: var(--table-hover-color);\n}";
2572
+ var styles$5 = {"tableResponsive":"Table-module_tableResponsive__ykttB","table":"Table-module_table__DHKNv","hover":"Table-module_hover__P6r3y"};
2559
2573
  styleInject(css_248z$5);
2560
2574
 
2561
2575
  const Table = (props) => {
@@ -2878,4 +2892,4 @@ const TreeItem = (props) => {
2878
2892
  children && _isExpanded ? React.createElement("ul", null, children) : null));
2879
2893
  };
2880
2894
 
2881
- export { Alert, AppBar, AppBarTitle, AutoComplete, Backdrop, Badge, Breadcrumb, BreadcrumbItem, Button, ButtonContext, ButtonGroup, COLOR, Card, CardBody, CardFooter, CardImage, CardSubtitle, CardText, CardTitle, CaretDownSolidIcon, CheckSolidIcon, CheckSquareRegularIcon, Checkbox, ChevronDownSolidIcon, ChevronLeftSolidIcon, ChevronRightSolidIcon, ChevronUpSolidIcon, Chip, CircleSolidIcon, Column, ConditionalWrapper, CssTransition, DATEMODE, DateSelect, DaySelect, Drawer, EmailValidator, ExpansionPanel, ExpansionPanelContent, ExpansionPanelHeader, FileInput, FloatingActionButton, Form, FormControl, FormError, FormGroup, FormHint, FormInput, FormLabel, GlobalModal, HomeSolidIcon, HourSelect, Icon, IconButton, IsEmptyValidator, IsEqualValidator, Link, List, ListItem, ListItemAction, ListItemAvatar, ListItemIcon, ListItemText, LoadingIndicator, LoadingIndicatorContainer, MODALBUTTONTYPE, MODALTYPE, MaxValidator, Menu, MenuBody, MenuDivider, MenuItem, MenuToggle, MilliSecondSelect, MinValidator, MinuteSelect, Modal, ModalBody, ModalFooter, ModalHeader, MonthSelect, NumberSelect, POSITION, PlusSolidIcon, ProgressBar, Row, SIZE, STATUS, SecondSelect, Select, Sidebar, SkeletonAvatar, SkeletonFooter, SkeletonImage, SkeletonText, Snackbar, SpeedDial, SpeedDialAction, SpeedDialIcon, SpinnerSolidIcon, SquareRegularIcon, Step, Stepper, StepperActions, TIMEMODE, Tab, TabPanel, Table, TableBody, TableCell, TableHead, TableRow, Tabs, Textarea, TimeSelect, TimesCircleSolidIcon, TimesSolidIcon, Tooltip, TreeItem, TreeView, Typography, VARIANT, YearSelect, loadingIndicatorService, modalService, snackbarService, useButtonContext, useConstructor, useCssClasses, useDebounce, useHover, useMobileDetect, useOnDestroy, useWindowSize };
2895
+ export { Alert, AppBar, AppBarTitle, AutoComplete, Backdrop, Badge, Breadcrumb, BreadcrumbItem, Button, ButtonContext, ButtonGroup, COLOR, Card, CardBody, CardFooter, CardImage, CardSubtitle, CardText, CardTitle, CaretDownSolidIcon, CheckSolidIcon, CheckSquareRegularIcon, Checkbox, ChevronDownSolidIcon, ChevronLeftSolidIcon, ChevronRightSolidIcon, ChevronUpSolidIcon, Chip, CircleSolidIcon, Column, ConditionalWrapper, CssTransition, DATEMODE, DateSelect, DaySelect, Drawer, EmailValidator, ExpansionPanel, ExpansionPanelContent, ExpansionPanelHeader, FileInput, FloatingActionButton, Form, FormControl, FormError, FormGroup, FormHint, FormInput, FormLabel, GlobalModal, HomeSolidIcon, HourSelect, Icon, IconButton, IsEmptyValidator, IsEqualValidator, Link, List, ListItem, ListItemAction, ListItemAvatar, ListItemIcon, ListItemText, LoadingIndicator, LoadingIndicatorContainer, MODALBUTTONTYPE, MODALTYPE, MaxValidator, Menu, MenuBody, MenuDivider, MenuItem, MenuToggle, MilliSecondSelect, MinValidator, MinuteSelect, Modal, ModalBody, ModalFooter, ModalHeader, MonthSelect, NumberSelect, POSITION, PlusSolidIcon, Portal, ProgressBar, Row, SIZE, STATUS, SecondSelect, Select, Sidebar, SkeletonAvatar, SkeletonFooter, SkeletonImage, SkeletonText, Snackbar, SpeedDial, SpeedDialAction, SpeedDialIcon, SpinnerSolidIcon, SquareRegularIcon, Step, Stepper, StepperActions, TIMEMODE, Tab, TabPanel, Table, TableBody, TableCell, TableHead, TableRow, Tabs, Textarea, TimeSelect, TimesCircleSolidIcon, TimesSolidIcon, Tooltip, TreeItem, TreeView, Typography, VARIANT, YearSelect, loadingIndicatorService, modalService, snackbarService, useButtonContext, useConstructor, useCssClasses, useDebounce, useHover, useMobileDetect, useOnDestroy, useWindowSize };
package/index.js CHANGED
@@ -316,6 +316,18 @@ const useOnDestroy = (callBack) => {
316
316
  }, []);
317
317
  };
318
318
 
319
+ const Portal = ({ children, target = document.body, className }) => {
320
+ const containerEl = React.useMemo(() => document.createElement('div'), []);
321
+ React.useEffect(() => {
322
+ className && className.split(' ').forEach(cssClass => containerEl.classList.add(cssClass));
323
+ target.appendChild(containerEl);
324
+ return () => {
325
+ target.removeChild(containerEl);
326
+ };
327
+ }, []);
328
+ return reactDom.createPortal(children, containerEl);
329
+ };
330
+
319
331
  var css_248z$10 = ".Backdrop-module_backdrop__IRMoL {\n height: 100%;\n width: 100%;\n position: absolute;\n opacity: 0.5;\n z-index: 1040;\n top: 0;\n left: 0;\n background-color: #000;\n}\n.Backdrop-module_backdrop__IRMoL.Backdrop-module_isTransparent__F5nA5 {\n opacity: 0;\n}";
320
332
  var styles$10 = {"backdrop":"Backdrop-module_backdrop__IRMoL","isTransparent":"Backdrop-module_isTransparent__F5nA5"};
321
333
  styleInject(css_248z$10);
@@ -333,10 +345,10 @@ const Backdrop = (props) => {
333
345
  return cssClasses.filter(css => css).join(' ');
334
346
  };
335
347
  const getStyles = () => {
336
- const styles = Object.assign({ height: '100%', width: '100%', position: 'absolute' }, style);
337
- return styles;
348
+ return Object.assign({ height: '100%', width: '100%', position: 'absolute' }, style);
338
349
  };
339
- return (reactDom.createPortal(React__default["default"].createElement("div", Object.assign({ className: getCssClasses(), onClick: handleClick, style: getStyles() }, rest)), target));
350
+ return (React__default["default"].createElement(Portal, { className: 'backdrop-root', target: target },
351
+ React__default["default"].createElement("div", Object.assign({ className: getCssClasses(), onClick: handleClick, style: getStyles() }, rest))));
340
352
  };
341
353
 
342
354
  var css_248z$$ = ".List-module_list__gpZ41 {\n width: 100%;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n margin-top: 0;\n background-color: var(--white);\n}";
@@ -1124,13 +1136,13 @@ const Select = (props) => {
1124
1136
  React__default["default"].createElement(Icon, { className: "ml-2" },
1125
1137
  React__default["default"].createElement(ChevronDownSolidIcon, null))),
1126
1138
  isShow &&
1127
- reactDom.createPortal(React__default["default"].createElement(React__default["default"].Fragment, null,
1139
+ React__default["default"].createElement(Portal, { className: 'backdrop-root' },
1128
1140
  React__default["default"].createElement("div", { className: styles$D.selectMenu, style: { left: (_a = selectConainter.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().x, top: (_b = selectConainter.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().y, width: (_c = selectConainter.current) === null || _c === void 0 ? void 0 : _c.getBoundingClientRect().width } },
1129
1141
  React__default["default"].createElement(List, null, options && options.map((option, index) => React__default["default"].createElement(ListItem, { id: `list-item-${index}`, key: option.value, onClick: () => handleOnClick(option), active: isActive(option) },
1130
1142
  multiple &&
1131
1143
  React__default["default"].createElement(Checkbox, { checked: isActive(option), onChange: () => handleOnClick(option) }),
1132
1144
  React__default["default"].createElement(ListItemText, { primary: option.label ? option.label : option.value }))))),
1133
- React__default["default"].createElement(Backdrop, { style: { zIndex: 1111 }, isTransparent: true, onClick: () => hide() })), document.body)));
1145
+ React__default["default"].createElement(Backdrop, { style: { zIndex: 1111 }, isTransparent: true, onClick: () => hide() }))));
1134
1146
  };
1135
1147
 
1136
1148
  var css_248z$C = ".Textarea-module_textarea__L5zqa {\n min-height: calc(10em + 0.75rem + 2px);\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n background-clip: padding-box;\n border: 2px solid var(--input-border-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: var(--borderRadius);\n resize: vertical;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n appearance: none;\n border-radius: 0.25rem;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.0745098039);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n border: 1px solid #ced4da;\n}\n.Textarea-module_textarea__L5zqa:focus:not(.Textarea-module_textarea__L5zqa.Textarea-module_disabled__OqqOF) {\n outline: none !important;\n border-color: var(--primary);\n}\n.Textarea-module_textarea__L5zqa.Textarea-module_isInvalid__JI01W {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.2509803922);\n}";
@@ -1558,9 +1570,9 @@ const Drawer = (props) => {
1558
1570
  const handleClickBackdrop = () => {
1559
1571
  onClickBackdrop && onClickBackdrop();
1560
1572
  };
1561
- return reactDom.createPortal(React__default["default"].createElement(React__default["default"].Fragment, null,
1573
+ return (React__default["default"].createElement(Portal, { className: 'drawer-root', target: target },
1562
1574
  React__default["default"].createElement(DrawerContent, Object.assign({ className: className, position: position, permanent: permanent, shadow: shadow }, rest), children),
1563
- !permanent && React__default["default"].createElement(Backdrop, { onClick: handleClickBackdrop })), target);
1575
+ !permanent && React__default["default"].createElement(Backdrop, { onClick: handleClickBackdrop })));
1564
1576
  };
1565
1577
  const DrawerContent = (props) => {
1566
1578
  const { children, className, position = 'left', permanent = false, shadow } = props, rest = __rest(props, ["children", "className", "position", "permanent", "shadow"]);
@@ -1624,9 +1636,9 @@ const MenuBody = (props) => {
1624
1636
  const handleClickBackdrop = () => {
1625
1637
  onClickBackdrop && onClickBackdrop();
1626
1638
  };
1627
- return (reactDom.createPortal(React__default["default"].createElement(React__default["default"].Fragment, null,
1639
+ return (React__default["default"].createElement(Portal, { className: 'menu-root' },
1628
1640
  React__default["default"].createElement("div", { ref: menuBodyRef, className: getCssClasses() }, children),
1629
- React__default["default"].createElement(Backdrop, { isTransparent: true, onClick: handleClickBackdrop })), document.body));
1641
+ React__default["default"].createElement(Backdrop, { isTransparent: true, onClick: handleClickBackdrop })));
1630
1642
  };
1631
1643
 
1632
1644
  var css_248z$x = ".Menu-module_menu__p8QL- {\n display: flex;\n}";
@@ -1854,7 +1866,7 @@ var styles$l = {"modal":"Modal-module_modal__HMxWV","modal-dialog":"Modal-module
1854
1866
  styleInject(css_248z$l);
1855
1867
 
1856
1868
  const Modal = (props) => {
1857
- const { className, size, fullScreen, children, header, footer, onHeaderCloseClick, onBackdropClick, isDismissable = false } = props;
1869
+ const { target = document.body, className, size, fullScreen, children, header, footer, onHeaderCloseClick, onBackdropClick, isDismissable = false } = props;
1858
1870
  const getCssClass = () => {
1859
1871
  const cssClasses = [];
1860
1872
  cssClasses.push(styles$l.modalDialog);
@@ -1871,17 +1883,19 @@ const Modal = (props) => {
1871
1883
  };
1872
1884
  }, []);
1873
1885
  const handleClickBackdrop = () => {
1886
+ console.warn('backdrop clicked');
1874
1887
  onBackdropClick && onBackdropClick();
1875
1888
  };
1876
1889
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
1877
- React__default["default"].createElement("div", { className: styles$l.modal },
1878
- React__default["default"].createElement("div", { className: getCssClass() },
1879
- React__default["default"].createElement("div", { className: styles$l.modalContent },
1880
- header &&
1881
- React__default["default"].createElement(ModalHeader, { isDismissable: isDismissable, onClose: () => onHeaderCloseClick && onHeaderCloseClick() }, header),
1882
- React__default["default"].createElement(ModalBody, null, children),
1883
- footer &&
1884
- React__default["default"].createElement(ModalFooter, null, footer)))),
1890
+ React__default["default"].createElement(Portal, { className: 'modal-root', target: target },
1891
+ React__default["default"].createElement("div", { className: styles$l.modal },
1892
+ React__default["default"].createElement("div", { className: getCssClass() },
1893
+ React__default["default"].createElement("div", { className: styles$l.modalContent },
1894
+ header &&
1895
+ React__default["default"].createElement(ModalHeader, { isDismissable: isDismissable, onClose: () => onHeaderCloseClick && onHeaderCloseClick() }, header),
1896
+ React__default["default"].createElement(ModalBody, null, children),
1897
+ footer &&
1898
+ React__default["default"].createElement(ModalFooter, null, footer))))),
1885
1899
  React__default["default"].createElement(Backdrop, { onClick: handleClickBackdrop })));
1886
1900
  };
1887
1901
 
@@ -2041,7 +2055,7 @@ const Tooltip = (props) => {
2041
2055
  React__default["default"].createElement("div", { id: "arrow", "data-popper-arrow": true }))));
2042
2056
  };
2043
2057
 
2044
- var css_248z$j = ".ProgressBar-module_progressBarContainer__vtbBw {\n display: flex;\n height: var(--progress-height);\n overflow: hidden;\n background-color: var(--progress-bg);\n}\n\n.ProgressBar-module_progressBar__hr8I8 {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--progress-bar-color);\n text-align: center;\n white-space: nowrap;\n transition: var(--progress-bar-transition);\n background-color: var(--progress-bar-bg);\n}\n.ProgressBar-module_progressBar__hr8I8.ProgressBar-module_indeterminate__WcQdD {\n width: 100%;\n height: 100%;\n animation: ProgressBar-module_indeterminateAnimation__SlBFt 1s infinite linear;\n transform-origin: 0% 50%;\n}\n\n@keyframes ProgressBar-module_indeterminateAnimation__SlBFt {\n 0% {\n transform: translateX(0) scaleX(0);\n }\n 40% {\n transform: translateX(0) scaleX(0.4);\n }\n 100% {\n transform: translateX(100%) scaleX(0.5);\n }\n}";
2058
+ var css_248z$j = ":root {\n --progress-height: 0.5rem;\n --progress-bg: #e9ecef;\n --progress-box-shadow: var(--shadow);\n --progress-bar-color: #fff;\n --progress-bar-bg: var(--primary);\n --progress-bar-transition: width 0.6s ease;\n}\n\n.ProgressBar-module_progressBarContainer__vtbBw {\n display: flex;\n height: var(--progress-height);\n overflow: hidden;\n background-color: var(--progress-bg);\n}\n\n.ProgressBar-module_progressBar__hr8I8 {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--progress-bar-color);\n text-align: center;\n white-space: nowrap;\n transition: var(--progress-bar-transition);\n background-color: var(--progress-bar-bg);\n}\n.ProgressBar-module_progressBar__hr8I8.ProgressBar-module_indeterminate__WcQdD {\n width: 100%;\n height: 100%;\n animation: ProgressBar-module_indeterminateAnimation__SlBFt 1s infinite linear;\n transform-origin: 0% 50%;\n}\n\n@keyframes ProgressBar-module_indeterminateAnimation__SlBFt {\n 0% {\n transform: translateX(0) scaleX(0);\n }\n 40% {\n transform: translateX(0) scaleX(0.4);\n }\n 100% {\n transform: translateX(100%) scaleX(0.5);\n }\n}";
2045
2059
  var styles$j = {"progressBarContainer":"ProgressBar-module_progressBarContainer__vtbBw","progressBar":"ProgressBar-module_progressBar__hr8I8","indeterminate":"ProgressBar-module_indeterminate__WcQdD","indeterminateAnimation":"ProgressBar-module_indeterminateAnimation__SlBFt"};
2046
2060
  styleInject(css_248z$j);
2047
2061
 
@@ -2080,7 +2094,7 @@ const ProgressBar = (props) => {
2080
2094
  }
2081
2095
  return `${width}%`;
2082
2096
  };
2083
- return (React__default["default"].createElement(Tooltip, { text: model === null || model === void 0 ? void 0 : model.toString() },
2097
+ return (React__default["default"].createElement(Tooltip, { text: !indeterminate ? model === null || model === void 0 ? void 0 : model.toString() : '' },
2084
2098
  React__default["default"].createElement("div", Object.assign({ className: getCssClasses() }, rest),
2085
2099
  React__default["default"].createElement("div", { className: getCssClassesBar(), style: { 'width': getStyle() }, role: "progressbar" }))));
2086
2100
  };
@@ -2562,8 +2576,8 @@ const SkeletonImage = (props) => {
2562
2576
  React__default["default"].createElement("div", { className: styles$6.img })));
2563
2577
  };
2564
2578
 
2565
- var css_248z$5 = ".Table-module_table__DHKNv {\n --bs-table-bg: transparent;\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: #212529;\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: #212529;\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: #212529;\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n vertical-align: top;\n border-color: #dee2e6;\n}\n.Table-module_table__DHKNv thead {\n vertical-align: bottom;\n}\n.Table-module_table__DHKNv > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.Table-module_table__DHKNv > :not(:first-child) {\n border-top: 2px solid currentColor;\n}\n\n.Table-module_bordered__1Kp1p > :not(caption) > * > * {\n border-width: 0 1px;\n}\n.Table-module_bordered__1Kp1p > :not(caption) > * {\n border-width: 1px 0;\n}\n\n.Table-module_striped__jmxgE > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.Table-module_hover__P6r3y > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.Table-module_tableResponsive__ykttB {\n overflow-x: auto;\n}";
2566
- var styles$5 = {"table":"Table-module_table__DHKNv","bordered":"Table-module_bordered__1Kp1p","striped":"Table-module_striped__jmxgE","hover":"Table-module_hover__P6r3y","tableResponsive":"Table-module_tableResponsive__ykttB"};
2579
+ var css_248z$5 = ":root {\n --table-bg: transparent;\n --table-accent-bg: transparent;\n --table-striped-color: #212529;\n --table-striped-bg: rgba(0, 0, 0, 0.05);\n --table-active-color: #212529;\n --table-active-bg: rgba(0, 0, 0, 0.1);\n --table-hover-color: #212529;\n --table-hover-bg: rgba(0, 0, 0, 0.075);\n}\n\n.Table-module_tableResponsive__ykttB {\n overflow-x: auto;\n}\n\n.Table-module_table__DHKNv {\n display: table;\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0px;\n min-width: 650px;\n}\n.Table-module_table__DHKNv thead {\n display: table-header-group;\n}\n.Table-module_table__DHKNv tbody {\n display: table-row-group;\n}\n.Table-module_table__DHKNv tr {\n color: inherit;\n display: table-row;\n vertical-align: middle;\n outline: 0px;\n}\n.Table-module_table__DHKNv th {\n font-size: 0.875rem;\n line-height: 1.5rem;\n letter-spacing: 0.01071em;\n display: table-cell;\n vertical-align: inherit;\n border-bottom: 1px solid rgb(224, 224, 224);\n text-align: left;\n padding: 16px;\n color: rgba(0, 0, 0, 0.87);\n border-collapse: collapse;\n border-spacing: 0px;\n}\n.Table-module_table__DHKNv td {\n font-size: 0.875rem;\n line-height: 1.43;\n letter-spacing: 0.01071em;\n display: table-cell;\n vertical-align: inherit;\n border-bottom: 1px solid rgb(224, 224, 224);\n padding: 16px;\n color: rgba(0, 0, 0, 0.87);\n flex-direction: row-reverse;\n}\n\n.Table-module_hover__P6r3y > tbody > tr:hover > * {\n background-color: var(--table-hover-bg);\n color: var(--table-hover-color);\n}";
2580
+ var styles$5 = {"tableResponsive":"Table-module_tableResponsive__ykttB","table":"Table-module_table__DHKNv","hover":"Table-module_hover__P6r3y"};
2567
2581
  styleInject(css_248z$5);
2568
2582
 
2569
2583
  const Table = (props) => {
@@ -2965,6 +2979,7 @@ exports.ModalHeader = ModalHeader;
2965
2979
  exports.MonthSelect = MonthSelect;
2966
2980
  exports.NumberSelect = NumberSelect;
2967
2981
  exports.PlusSolidIcon = PlusSolidIcon;
2982
+ exports.Portal = Portal;
2968
2983
  exports.ProgressBar = ProgressBar;
2969
2984
  exports.Row = Row;
2970
2985
  exports.STATUS = STATUS;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-asc",
3
- "version": "23.6.1",
3
+ "version": "23.7.2",
4
4
  "description": "handcrafted react components",
5
5
  "main": "index.js",
6
6
  "module": "index.es.js",
package/react-asc.scss CHANGED
@@ -212,17 +212,6 @@
212
212
  }
213
213
  }
214
214
 
215
- :root {
216
- --progress-height: 0.5rem;
217
- // --progress-font-size: 0.75rem;
218
- --progress-bg: #e9ecef;
219
- // --progress-border-radius: 0.375rem;
220
- --progress-box-shadow: var(--shadow);
221
- --progress-bar-color: #fff;
222
- --progress-bar-bg: var(--primary);
223
- --progress-bar-transition: width 0.6s ease;
224
- }
225
-
226
215
  :root {
227
216
  --borderRadius: 5px;
228
217
  --0: 0px !important;
@@ -248,6 +237,10 @@
248
237
  color: var(--muted);
249
238
  }
250
239
 
240
+ .flex-1 {
241
+ flex: 1;
242
+ }
243
+
251
244
  .d-flex {
252
245
  display: flex !important;
253
246
  }
@@ -288,8 +281,6 @@
288
281
  height: 100%;
289
282
  }
290
283
 
291
-
292
-
293
284
  .text-center {
294
285
  text-align: center;
295
286
  }
package/readme.md CHANGED
@@ -69,8 +69,10 @@ react-asc provides built-in ts definition
69
69
  - Menu
70
70
  - Modal + ModalService
71
71
  - NumberSelect
72
+ Portal
72
73
  - Select
73
74
  - Sidebar
75
+ - Skeleton (Avatar, Image, Text, SkeletonFooter)
74
76
  - Snackbar + SnackbarService
75
77
  - SpeedDial
76
78
  - Stepper (beta)
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- interface IMenuBackdropProps {
3
- onClick?: () => void;
4
- }
5
- export declare const MenuBackdrop: ({ onClick }: IMenuBackdropProps) => React.ReactPortal;
6
- export {};