react-asc 21.3.1 → 23.1.0

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.
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ interface ICssTransitionProps {
3
+ className: string;
4
+ children: React.ReactNode;
5
+ show: boolean | undefined;
6
+ }
7
+ export declare const CssTransition: (props: ICssTransitionProps) => JSX.Element;
8
+ export {};
@@ -0,0 +1 @@
1
+ export * from './CssTransition';
@@ -3,6 +3,7 @@ export interface IExpansionPanelProps {
3
3
  header: ReactNode;
4
4
  children: ReactNode;
5
5
  isExpanded?: boolean;
6
+ shadow?: boolean;
6
7
  onChange?: (event: React.MouseEvent, isExpanded: boolean) => void;
7
8
  }
8
9
  export declare const ExpansionPanel: (props: IExpansionPanelProps) => JSX.Element;
@@ -7,6 +7,7 @@ export interface IFloatingActionButtonProps extends React.DetailedHTMLProps<Reac
7
7
  fixed?: boolean;
8
8
  isActive?: boolean;
9
9
  disabled?: boolean;
10
+ position?: 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom';
10
11
  onClick?: (e: React.MouseEvent) => void;
11
12
  }
12
13
  export declare const FloatingActionButton: (props: IFloatingActionButtonProps) => JSX.Element;
@@ -10,6 +10,7 @@ export * from './Card';
10
10
  export * from './ConditionalWrapper';
11
11
  export * from './Checkbox';
12
12
  export * from './Chip';
13
+ export * from './CssTransition';
13
14
  export * from './DateSelect';
14
15
  export * from './Drawer';
15
16
  export * from './Menu';
package/hooks/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export * from './useWindowSize';
2
- export * from './useHover';
3
- export * from './useConstructor';
4
1
  export * from './useDebounce';
2
+ export * from './useConstructor';
5
3
  export * from './useCssClasses';
4
+ export * from './useHover';
5
+ export * from './useMobileDetect';
6
+ export * from './useWindowSize';
@@ -0,0 +1,3 @@
1
+ export declare function useMobileDetect(): {
2
+ isMobile: boolean;
3
+ };
package/index.es.js CHANGED
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect, useRef, Fragment, Component, createRef, cloneElement, createContext, useContext } from 'react';
1
+ import React, { useRef, useEffect, useState, Fragment, Component, createRef, cloneElement, createContext, useContext } from 'react';
2
2
  import { createPortal, render, unmountComponentAtNode } from 'react-dom';
3
3
  import { createPopper } from '@popperjs/core';
4
4
 
@@ -224,23 +224,26 @@ const CircleSolidIcon = () => (React.createElement("svg", { "aria-hidden": "true
224
224
  const ChevronLeftSolidIcon = () => (React.createElement("svg", { "aria-hidden": "true", focusable: "false", role: "img", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 320 512" },
225
225
  React.createElement("path", { fill: "currentColor", d: "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z" })));
226
226
 
227
- function useWindowSize() {
228
- const [windowSize, setWindowSize] = useState({
229
- width: 0,
230
- height: 0,
231
- });
227
+ function useDebounce(callback, timeout, deps) {
228
+ const timeoutId = useRef();
232
229
  useEffect(() => {
233
- function handleResize() {
234
- setWindowSize({
235
- width: window.innerWidth,
236
- height: window.innerHeight,
237
- });
238
- }
239
- window.addEventListener("resize", handleResize);
240
- handleResize();
241
- return () => window.removeEventListener("resize", handleResize);
242
- }, []);
243
- return windowSize;
230
+ clearTimeout(timeoutId.current);
231
+ timeoutId.current = setTimeout(callback, timeout);
232
+ return () => clearTimeout(timeoutId.current);
233
+ }, deps);
234
+ }
235
+
236
+ const useConstructor = (callBack) => {
237
+ const [hasBeenCalled, setHasBeenCalled] = useState(false);
238
+ if (hasBeenCalled)
239
+ return;
240
+ callBack();
241
+ setHasBeenCalled(true);
242
+ };
243
+
244
+ function useCssClasses(cssClasses) {
245
+ const cssClassName = (cssClasses === null || cssClasses === void 0 ? void 0 : cssClasses.filter(css => css).join(' ')) || '';
246
+ return [cssClassName];
244
247
  }
245
248
 
246
249
  function useHover() {
@@ -265,26 +268,37 @@ function useHover() {
265
268
  return [ref, value];
266
269
  }
267
270
 
268
- const useConstructor = (callBack) => {
269
- const [hasBeenCalled, setHasBeenCalled] = useState(false);
270
- if (hasBeenCalled)
271
- return;
272
- callBack();
273
- setHasBeenCalled(true);
274
- };
275
-
276
- function useDebounce(callback, timeout, deps) {
277
- const timeoutId = useRef();
271
+ function useWindowSize() {
272
+ const [windowSize, setWindowSize] = useState({
273
+ width: 0,
274
+ height: 0,
275
+ });
278
276
  useEffect(() => {
279
- clearTimeout(timeoutId.current);
280
- timeoutId.current = setTimeout(callback, timeout);
281
- return () => clearTimeout(timeoutId.current);
282
- }, deps);
277
+ function handleResize() {
278
+ setWindowSize({
279
+ width: window.innerWidth,
280
+ height: window.innerHeight,
281
+ });
282
+ }
283
+ window.addEventListener("resize", handleResize);
284
+ handleResize();
285
+ return () => window.removeEventListener("resize", handleResize);
286
+ }, []);
287
+ return windowSize;
283
288
  }
284
289
 
285
- function useCssClasses(cssClasses) {
286
- const cssClassName = (cssClasses === null || cssClasses === void 0 ? void 0 : cssClasses.filter(css => css).join(' ')) || '';
287
- return [cssClassName];
290
+ function useMobileDetect() {
291
+ const [isMobile, setIsMobile] = useState(false);
292
+ const windowSize = useWindowSize();
293
+ const checkIsMobile = (height, width) => {
294
+ if (height > 0 && width > 0) {
295
+ setIsMobile(!(width >= 1024));
296
+ }
297
+ };
298
+ useEffect(() => {
299
+ windowSize && checkIsMobile(windowSize.height, windowSize.width);
300
+ }, [windowSize]);
301
+ return { isMobile };
288
302
  }
289
303
 
290
304
  var css_248z$X = ".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 .Backdrop-module_backdrop__IRMoL.Backdrop-module_isTransparent__F5nA5 {\n opacity: 0; }\n";
@@ -557,7 +571,7 @@ const ButtonGroup = (props) => {
557
571
  return (React.createElement("div", Object.assign({ className: getCssClasses(), role: "group" }, rest), children));
558
572
  };
559
573
 
560
- var css_248z$M = ".Breadcrumb-module_breadcrumb__-pvAn {\n display: flex;\n flex-wrap: wrap;\n padding: 0;\n margin-bottom: 0;\n list-style: none;\n margin-bottom: 1rem; }\n";
574
+ var css_248z$M = ".Breadcrumb-module_breadcrumb__-pvAn {\n display: flex;\n flex-wrap: wrap;\n padding: 0;\n list-style: none;\n margin: 0; }\n";
561
575
  var styles$M = {"breadcrumb":"Breadcrumb-module_breadcrumb__-pvAn"};
562
576
  styleInject(css_248z$M);
563
577
 
@@ -776,6 +790,71 @@ const Chip = (props) => {
776
790
  isDeletable && (React.createElement("div", { className: styles$C.deleteIcon, onClick: e => handleClickOnDelete(e) }, deleteIcon))));
777
791
  };
778
792
 
793
+ const CssTransition = (props) => {
794
+ const { className, children, show } = props;
795
+ const [isShow, setIsShow] = useState(undefined);
796
+ const [cssState, setCssState] = useState({
797
+ hidden: true
798
+ });
799
+ const transitionConainter = useRef(null);
800
+ useEffect(() => {
801
+ if (show !== undefined) {
802
+ setIsShow(show);
803
+ }
804
+ }, [show]);
805
+ const nextFrame = () => {
806
+ return new Promise((resolve) => {
807
+ requestAnimationFrame(() => {
808
+ requestAnimationFrame(resolve);
809
+ });
810
+ });
811
+ };
812
+ const afterTransition = (element) => {
813
+ return new Promise((resolve) => {
814
+ if (element) {
815
+ const duration = Number(getComputedStyle(element).transitionDuration.replace("s", "")) * 1000;
816
+ setTimeout(() => { resolve(); }, duration);
817
+ }
818
+ else {
819
+ resolve();
820
+ }
821
+ });
822
+ };
823
+ const renderAnimation = async (show) => {
824
+ if (show === true) {
825
+ setCssState({ enter: true, enterStart: true });
826
+ await nextFrame();
827
+ setCssState({ enter: true, enterEnd: true });
828
+ await afterTransition(transitionConainter.current);
829
+ setCssState(undefined);
830
+ }
831
+ if (show === false) {
832
+ setCssState({ leave: true, leaveStart: true });
833
+ await nextFrame();
834
+ setCssState({ leave: true, leaveEnd: true });
835
+ await afterTransition(transitionConainter.current);
836
+ setCssState({ hidden: true });
837
+ }
838
+ };
839
+ useEffect(() => {
840
+ if (isShow !== undefined && (isShow === true || isShow === false)) {
841
+ renderAnimation(isShow);
842
+ }
843
+ }, [isShow]);
844
+ const getCssClasses = () => {
845
+ const cssClasses = [];
846
+ (cssState === null || cssState === void 0 ? void 0 : cssState.hidden) && cssClasses.push(`hidden`);
847
+ (cssState === null || cssState === void 0 ? void 0 : cssState.enter) && cssClasses.push(`${className}-enter`);
848
+ (cssState === null || cssState === void 0 ? void 0 : cssState.enterStart) && cssClasses.push(`${className}-enter-start`);
849
+ (cssState === null || cssState === void 0 ? void 0 : cssState.enterEnd) && cssClasses.push(`${className}-enter-end`);
850
+ (cssState === null || cssState === void 0 ? void 0 : cssState.leave) && cssClasses.push(`${className}-leave`);
851
+ (cssState === null || cssState === void 0 ? void 0 : cssState.leaveStart) && cssClasses.push(`${className}-leave-start`);
852
+ (cssState === null || cssState === void 0 ? void 0 : cssState.leaveEnd) && cssClasses.push(`${className}-leave-end`);
853
+ return cssClasses.filter((css) => css).join(" ");
854
+ };
855
+ return (React.createElement("div", { ref: transitionConainter, className: getCssClasses() }, children));
856
+ };
857
+
779
858
  var css_248z$B = ".Column-module_column__fcTgl {\n flex: 1 0 0%; }\n\n@media (max-width: 575.98px) {\n .Column-module_column__fcTgl {\n flex: 1; } }\n";
780
859
  var styles$B = {"column":"Column-module_column__fcTgl"};
781
860
  styleInject(css_248z$B);
@@ -1581,12 +1660,12 @@ const ExpansionPanelHeader = (props) => {
1581
1660
  React.createElement(Icon, null, isExpanded ? React.createElement(ChevronUpSolidIcon, null) : React.createElement(ChevronDownSolidIcon, null)))));
1582
1661
  };
1583
1662
 
1584
- var css_248z$n = ".ExpansionPanel-module_expansionPanel__m1yQq {\n background-color: var(--white);\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n .ExpansionPanel-module_expansionPanel__m1yQq:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px; }\n .ExpansionPanel-module_expansionPanel__m1yQq:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph {\n margin: 16px 0; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph:first-child {\n margin-top: 0; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph:last-child {\n margin-bottom: 0; }\n";
1585
- var styles$n = {"expansionPanel":"ExpansionPanel-module_expansionPanel__m1yQq","isExpanded":"ExpansionPanel-module_isExpanded__TS1ph"};
1663
+ var css_248z$n = ".ExpansionPanel-module_expansionPanel__m1yQq {\n background-color: var(--white);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_shadow__zIjJ6 {\n box-shadow: var(--shadow); }\n .ExpansionPanel-module_expansionPanel__m1yQq:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px; }\n .ExpansionPanel-module_expansionPanel__m1yQq:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph:first-child {\n margin-top: 0; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph:last-child {\n margin-bottom: 0; }\n";
1664
+ var styles$n = {"expansionPanel":"ExpansionPanel-module_expansionPanel__m1yQq","shadow":"ExpansionPanel-module_shadow__zIjJ6","isExpanded":"ExpansionPanel-module_isExpanded__TS1ph"};
1586
1665
  styleInject(css_248z$n);
1587
1666
 
1588
1667
  const ExpansionPanel = (props) => {
1589
- const { header, children, isExpanded = false, onChange } = props;
1668
+ const { header, children, isExpanded = false, shadow, onChange } = props;
1590
1669
  const [_isExpanded, setIsExpanded] = useState(false);
1591
1670
  useEffect(() => {
1592
1671
  setIsExpanded(isExpanded);
@@ -1597,6 +1676,7 @@ const ExpansionPanel = (props) => {
1597
1676
  if (_isExpanded) {
1598
1677
  cssClasses.push(styles$n.isExpanded);
1599
1678
  }
1679
+ shadow && cssClasses.push(styles$n.shadow);
1600
1680
  return cssClasses.filter(css => css).join(' ');
1601
1681
  };
1602
1682
  const handleClickHeader = (event) => {
@@ -1609,16 +1689,17 @@ const ExpansionPanel = (props) => {
1609
1689
  React.createElement(ExpansionPanelContent, null, children)));
1610
1690
  };
1611
1691
 
1612
- var css_248z$m = ".FloatingActionButton-module_fab__Rw3kd {\n box-shadow: var(--shadow); }\n .FloatingActionButton-module_fab__Rw3kd.FloatingActionButton-module_fixed__XQOkG {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 1000; }\n";
1613
- var styles$m = {"fab":"FloatingActionButton-module_fab__Rw3kd","fixed":"FloatingActionButton-module_fixed__XQOkG"};
1692
+ var css_248z$m = ".FloatingActionButton-module_fab__Rw3kd {\n box-shadow: var(--shadow); }\n\n.FloatingActionButton-module_fixed__XQOkG {\n position: fixed;\n z-index: 1000; }\n .FloatingActionButton-module_fixed__XQOkG.FloatingActionButton-module_leftTop__ZiHQN {\n top: 16px;\n left: 16px; }\n .FloatingActionButton-module_fixed__XQOkG.FloatingActionButton-module_leftBottom__210sl {\n bottom: 16px;\n left: 16px; }\n .FloatingActionButton-module_fixed__XQOkG.FloatingActionButton-module_rightTop__VUsvT {\n top: 64px;\n right: 16px; }\n .FloatingActionButton-module_fixed__XQOkG.FloatingActionButton-module_rightBottom__FaUFl {\n bottom: 16px;\n right: 16px; }\n";
1693
+ var styles$m = {"fab":"FloatingActionButton-module_fab__Rw3kd","fixed":"FloatingActionButton-module_fixed__XQOkG","leftTop":"FloatingActionButton-module_leftTop__ZiHQN","leftBottom":"FloatingActionButton-module_leftBottom__210sl","rightTop":"FloatingActionButton-module_rightTop__VUsvT","rightBottom":"FloatingActionButton-module_rightBottom__FaUFl"};
1614
1694
  styleInject(css_248z$m);
1615
1695
 
1616
1696
  const FloatingActionButton = (props) => {
1617
- const { className, icon, color = COLOR.primary, fixed, size = SIZE.lg, isActive, disabled, onClick } = props;
1697
+ const { className, icon, color = COLOR.primary, fixed, position = 'rightBottom', size = SIZE.lg, isActive, disabled, onClick } = props;
1618
1698
  const getCssClasses = () => {
1619
1699
  const cssClasses = [];
1620
1700
  cssClasses.push(styles$m.fab);
1621
- fixed && cssClasses.push(styles$m['fixed']);
1701
+ fixed && cssClasses.push(styles$m.fixed);
1702
+ position && fixed && cssClasses.push(styles$m[position]);
1622
1703
  className && cssClasses.push(className);
1623
1704
  return cssClasses.filter(css => css).join(' ');
1624
1705
  };
@@ -2220,7 +2301,7 @@ const Stepper = (props) => {
2220
2301
  React.createElement(StepperActions, { className: "mt-3", isFirstStep: activeIndex === 0, isStepOptional: isStepOptional(activeIndex), isCompleted: isLastStep(), onBack: handleBack, onSkip: handleSkip, onNext: handleNext, onReset: handleReset }))));
2221
2302
  };
2222
2303
 
2223
- var css_248z$8 = ".Typography-module_typography__sw-td {\n text-overflow: ellipsis;\n font-family: var(--fontFamily); }\n\nh1 {\n font-size: calc(1.375rem + 1.5vw); }\n\nh2 {\n font-size: calc(1.325rem + 0.9vw); }\n\nh3 {\n font-size: calc(1.3rem + 0.6vw); }\n\nh4 {\n font-size: calc(1.275rem + 0.3vw); }\n\nh5 {\n font-size: 1.25rem; }\n\nh6 {\n font-size: 1rem; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-weight: 500 !important;\n margin-top: 0;\n margin-bottom: 0.5rem;\n line-height: 1.2; }\n";
2304
+ var css_248z$8 = ".Typography-module_typography__sw-td {\n font-family: var(--fontFamily);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n\nh1 {\n font-size: calc(1.375rem + 1.5vw); }\n\nh2 {\n font-size: calc(1.325rem + 0.9vw); }\n\nh3 {\n font-size: calc(1.3rem + 0.6vw); }\n\nh4 {\n font-size: calc(1.275rem + 0.3vw); }\n\nh5 {\n font-size: 1.25rem; }\n\nh6 {\n font-size: 1rem; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-weight: 500 !important;\n margin-top: 0;\n margin-bottom: 0.5rem;\n line-height: 1.2; }\n";
2224
2305
  var styles$8 = {"typography":"Typography-module_typography__sw-td"};
2225
2306
  styleInject(css_248z$8);
2226
2307
 
@@ -2651,4 +2732,4 @@ const TreeItem = (props) => {
2651
2732
  children && _isExpanded ? React.createElement("ul", null, children) : null));
2652
2733
  };
2653
2734
 
2654
- export { Alert, AppBar, AppBarTitle, AutoComplete, Backdrop, Badge, Breadcrumb, BreadcrumbItem, Button, ButtonGroup, COLOR, Card, CardBody, CardFooter, CardImage, CardSubtitle, CardText, CardTitle, CaretDownSolidIcon, CheckSolidIcon, CheckSquareRegularIcon, Checkbox, ChevronDownSolidIcon, ChevronLeftSolidIcon, ChevronRightSolidIcon, ChevronUpSolidIcon, Chip, CircleSolidIcon, Column, ConditionalWrapper, 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, Menu, MenuBody, MenuDivider, MenuItem, MenuToggle, MilliSecondSelect, MinuteSelect, Modal, ModalBody, ModalFooter, ModalHeader, MonthSelect, NumberSelect, POSITION, PlusSolidIcon, Row, SIZE, STATUS, SecondSelect, Select, Sidebar, 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, useConstructor, useCssClasses, useDebounce, useHover, useWindowSize };
2735
+ export { Alert, AppBar, AppBarTitle, AutoComplete, Backdrop, Badge, Breadcrumb, BreadcrumbItem, Button, 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, Menu, MenuBody, MenuDivider, MenuItem, MenuToggle, MilliSecondSelect, MinuteSelect, Modal, ModalBody, ModalFooter, ModalHeader, MonthSelect, NumberSelect, POSITION, PlusSolidIcon, Row, SIZE, STATUS, SecondSelect, Select, Sidebar, 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, useConstructor, useCssClasses, useDebounce, useHover, useMobileDetect, useWindowSize };
package/index.js CHANGED
@@ -232,23 +232,26 @@ const CircleSolidIcon = () => (React__default["default"].createElement("svg", {
232
232
  const ChevronLeftSolidIcon = () => (React__default["default"].createElement("svg", { "aria-hidden": "true", focusable: "false", role: "img", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 320 512" },
233
233
  React__default["default"].createElement("path", { fill: "currentColor", d: "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z" })));
234
234
 
235
- function useWindowSize() {
236
- const [windowSize, setWindowSize] = React.useState({
237
- width: 0,
238
- height: 0,
239
- });
235
+ function useDebounce(callback, timeout, deps) {
236
+ const timeoutId = React.useRef();
240
237
  React.useEffect(() => {
241
- function handleResize() {
242
- setWindowSize({
243
- width: window.innerWidth,
244
- height: window.innerHeight,
245
- });
246
- }
247
- window.addEventListener("resize", handleResize);
248
- handleResize();
249
- return () => window.removeEventListener("resize", handleResize);
250
- }, []);
251
- return windowSize;
238
+ clearTimeout(timeoutId.current);
239
+ timeoutId.current = setTimeout(callback, timeout);
240
+ return () => clearTimeout(timeoutId.current);
241
+ }, deps);
242
+ }
243
+
244
+ const useConstructor = (callBack) => {
245
+ const [hasBeenCalled, setHasBeenCalled] = React.useState(false);
246
+ if (hasBeenCalled)
247
+ return;
248
+ callBack();
249
+ setHasBeenCalled(true);
250
+ };
251
+
252
+ function useCssClasses(cssClasses) {
253
+ const cssClassName = (cssClasses === null || cssClasses === void 0 ? void 0 : cssClasses.filter(css => css).join(' ')) || '';
254
+ return [cssClassName];
252
255
  }
253
256
 
254
257
  function useHover() {
@@ -273,26 +276,37 @@ function useHover() {
273
276
  return [ref, value];
274
277
  }
275
278
 
276
- const useConstructor = (callBack) => {
277
- const [hasBeenCalled, setHasBeenCalled] = React.useState(false);
278
- if (hasBeenCalled)
279
- return;
280
- callBack();
281
- setHasBeenCalled(true);
282
- };
283
-
284
- function useDebounce(callback, timeout, deps) {
285
- const timeoutId = React.useRef();
279
+ function useWindowSize() {
280
+ const [windowSize, setWindowSize] = React.useState({
281
+ width: 0,
282
+ height: 0,
283
+ });
286
284
  React.useEffect(() => {
287
- clearTimeout(timeoutId.current);
288
- timeoutId.current = setTimeout(callback, timeout);
289
- return () => clearTimeout(timeoutId.current);
290
- }, deps);
285
+ function handleResize() {
286
+ setWindowSize({
287
+ width: window.innerWidth,
288
+ height: window.innerHeight,
289
+ });
290
+ }
291
+ window.addEventListener("resize", handleResize);
292
+ handleResize();
293
+ return () => window.removeEventListener("resize", handleResize);
294
+ }, []);
295
+ return windowSize;
291
296
  }
292
297
 
293
- function useCssClasses(cssClasses) {
294
- const cssClassName = (cssClasses === null || cssClasses === void 0 ? void 0 : cssClasses.filter(css => css).join(' ')) || '';
295
- return [cssClassName];
298
+ function useMobileDetect() {
299
+ const [isMobile, setIsMobile] = React.useState(false);
300
+ const windowSize = useWindowSize();
301
+ const checkIsMobile = (height, width) => {
302
+ if (height > 0 && width > 0) {
303
+ setIsMobile(!(width >= 1024));
304
+ }
305
+ };
306
+ React.useEffect(() => {
307
+ windowSize && checkIsMobile(windowSize.height, windowSize.width);
308
+ }, [windowSize]);
309
+ return { isMobile };
296
310
  }
297
311
 
298
312
  var css_248z$X = ".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 .Backdrop-module_backdrop__IRMoL.Backdrop-module_isTransparent__F5nA5 {\n opacity: 0; }\n";
@@ -565,7 +579,7 @@ const ButtonGroup = (props) => {
565
579
  return (React__default["default"].createElement("div", Object.assign({ className: getCssClasses(), role: "group" }, rest), children));
566
580
  };
567
581
 
568
- var css_248z$M = ".Breadcrumb-module_breadcrumb__-pvAn {\n display: flex;\n flex-wrap: wrap;\n padding: 0;\n margin-bottom: 0;\n list-style: none;\n margin-bottom: 1rem; }\n";
582
+ var css_248z$M = ".Breadcrumb-module_breadcrumb__-pvAn {\n display: flex;\n flex-wrap: wrap;\n padding: 0;\n list-style: none;\n margin: 0; }\n";
569
583
  var styles$M = {"breadcrumb":"Breadcrumb-module_breadcrumb__-pvAn"};
570
584
  styleInject(css_248z$M);
571
585
 
@@ -784,6 +798,71 @@ const Chip = (props) => {
784
798
  isDeletable && (React__default["default"].createElement("div", { className: styles$C.deleteIcon, onClick: e => handleClickOnDelete(e) }, deleteIcon))));
785
799
  };
786
800
 
801
+ const CssTransition = (props) => {
802
+ const { className, children, show } = props;
803
+ const [isShow, setIsShow] = React.useState(undefined);
804
+ const [cssState, setCssState] = React.useState({
805
+ hidden: true
806
+ });
807
+ const transitionConainter = React.useRef(null);
808
+ React.useEffect(() => {
809
+ if (show !== undefined) {
810
+ setIsShow(show);
811
+ }
812
+ }, [show]);
813
+ const nextFrame = () => {
814
+ return new Promise((resolve) => {
815
+ requestAnimationFrame(() => {
816
+ requestAnimationFrame(resolve);
817
+ });
818
+ });
819
+ };
820
+ const afterTransition = (element) => {
821
+ return new Promise((resolve) => {
822
+ if (element) {
823
+ const duration = Number(getComputedStyle(element).transitionDuration.replace("s", "")) * 1000;
824
+ setTimeout(() => { resolve(); }, duration);
825
+ }
826
+ else {
827
+ resolve();
828
+ }
829
+ });
830
+ };
831
+ const renderAnimation = async (show) => {
832
+ if (show === true) {
833
+ setCssState({ enter: true, enterStart: true });
834
+ await nextFrame();
835
+ setCssState({ enter: true, enterEnd: true });
836
+ await afterTransition(transitionConainter.current);
837
+ setCssState(undefined);
838
+ }
839
+ if (show === false) {
840
+ setCssState({ leave: true, leaveStart: true });
841
+ await nextFrame();
842
+ setCssState({ leave: true, leaveEnd: true });
843
+ await afterTransition(transitionConainter.current);
844
+ setCssState({ hidden: true });
845
+ }
846
+ };
847
+ React.useEffect(() => {
848
+ if (isShow !== undefined && (isShow === true || isShow === false)) {
849
+ renderAnimation(isShow);
850
+ }
851
+ }, [isShow]);
852
+ const getCssClasses = () => {
853
+ const cssClasses = [];
854
+ (cssState === null || cssState === void 0 ? void 0 : cssState.hidden) && cssClasses.push(`hidden`);
855
+ (cssState === null || cssState === void 0 ? void 0 : cssState.enter) && cssClasses.push(`${className}-enter`);
856
+ (cssState === null || cssState === void 0 ? void 0 : cssState.enterStart) && cssClasses.push(`${className}-enter-start`);
857
+ (cssState === null || cssState === void 0 ? void 0 : cssState.enterEnd) && cssClasses.push(`${className}-enter-end`);
858
+ (cssState === null || cssState === void 0 ? void 0 : cssState.leave) && cssClasses.push(`${className}-leave`);
859
+ (cssState === null || cssState === void 0 ? void 0 : cssState.leaveStart) && cssClasses.push(`${className}-leave-start`);
860
+ (cssState === null || cssState === void 0 ? void 0 : cssState.leaveEnd) && cssClasses.push(`${className}-leave-end`);
861
+ return cssClasses.filter((css) => css).join(" ");
862
+ };
863
+ return (React__default["default"].createElement("div", { ref: transitionConainter, className: getCssClasses() }, children));
864
+ };
865
+
787
866
  var css_248z$B = ".Column-module_column__fcTgl {\n flex: 1 0 0%; }\n\n@media (max-width: 575.98px) {\n .Column-module_column__fcTgl {\n flex: 1; } }\n";
788
867
  var styles$B = {"column":"Column-module_column__fcTgl"};
789
868
  styleInject(css_248z$B);
@@ -1589,12 +1668,12 @@ const ExpansionPanelHeader = (props) => {
1589
1668
  React__default["default"].createElement(Icon, null, isExpanded ? React__default["default"].createElement(ChevronUpSolidIcon, null) : React__default["default"].createElement(ChevronDownSolidIcon, null)))));
1590
1669
  };
1591
1670
 
1592
- var css_248z$n = ".ExpansionPanel-module_expansionPanel__m1yQq {\n background-color: var(--white);\n box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n .ExpansionPanel-module_expansionPanel__m1yQq:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px; }\n .ExpansionPanel-module_expansionPanel__m1yQq:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph {\n margin: 16px 0; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph:first-child {\n margin-top: 0; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph:last-child {\n margin-bottom: 0; }\n";
1593
- var styles$n = {"expansionPanel":"ExpansionPanel-module_expansionPanel__m1yQq","isExpanded":"ExpansionPanel-module_isExpanded__TS1ph"};
1671
+ var css_248z$n = ".ExpansionPanel-module_expansionPanel__m1yQq {\n background-color: var(--white);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_shadow__zIjJ6 {\n box-shadow: var(--shadow); }\n .ExpansionPanel-module_expansionPanel__m1yQq:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px; }\n .ExpansionPanel-module_expansionPanel__m1yQq:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph:first-child {\n margin-top: 0; }\n .ExpansionPanel-module_expansionPanel__m1yQq.ExpansionPanel-module_isExpanded__TS1ph:last-child {\n margin-bottom: 0; }\n";
1672
+ var styles$n = {"expansionPanel":"ExpansionPanel-module_expansionPanel__m1yQq","shadow":"ExpansionPanel-module_shadow__zIjJ6","isExpanded":"ExpansionPanel-module_isExpanded__TS1ph"};
1594
1673
  styleInject(css_248z$n);
1595
1674
 
1596
1675
  const ExpansionPanel = (props) => {
1597
- const { header, children, isExpanded = false, onChange } = props;
1676
+ const { header, children, isExpanded = false, shadow, onChange } = props;
1598
1677
  const [_isExpanded, setIsExpanded] = React.useState(false);
1599
1678
  React.useEffect(() => {
1600
1679
  setIsExpanded(isExpanded);
@@ -1605,6 +1684,7 @@ const ExpansionPanel = (props) => {
1605
1684
  if (_isExpanded) {
1606
1685
  cssClasses.push(styles$n.isExpanded);
1607
1686
  }
1687
+ shadow && cssClasses.push(styles$n.shadow);
1608
1688
  return cssClasses.filter(css => css).join(' ');
1609
1689
  };
1610
1690
  const handleClickHeader = (event) => {
@@ -1617,16 +1697,17 @@ const ExpansionPanel = (props) => {
1617
1697
  React__default["default"].createElement(ExpansionPanelContent, null, children)));
1618
1698
  };
1619
1699
 
1620
- var css_248z$m = ".FloatingActionButton-module_fab__Rw3kd {\n box-shadow: var(--shadow); }\n .FloatingActionButton-module_fab__Rw3kd.FloatingActionButton-module_fixed__XQOkG {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 1000; }\n";
1621
- var styles$m = {"fab":"FloatingActionButton-module_fab__Rw3kd","fixed":"FloatingActionButton-module_fixed__XQOkG"};
1700
+ var css_248z$m = ".FloatingActionButton-module_fab__Rw3kd {\n box-shadow: var(--shadow); }\n\n.FloatingActionButton-module_fixed__XQOkG {\n position: fixed;\n z-index: 1000; }\n .FloatingActionButton-module_fixed__XQOkG.FloatingActionButton-module_leftTop__ZiHQN {\n top: 16px;\n left: 16px; }\n .FloatingActionButton-module_fixed__XQOkG.FloatingActionButton-module_leftBottom__210sl {\n bottom: 16px;\n left: 16px; }\n .FloatingActionButton-module_fixed__XQOkG.FloatingActionButton-module_rightTop__VUsvT {\n top: 64px;\n right: 16px; }\n .FloatingActionButton-module_fixed__XQOkG.FloatingActionButton-module_rightBottom__FaUFl {\n bottom: 16px;\n right: 16px; }\n";
1701
+ var styles$m = {"fab":"FloatingActionButton-module_fab__Rw3kd","fixed":"FloatingActionButton-module_fixed__XQOkG","leftTop":"FloatingActionButton-module_leftTop__ZiHQN","leftBottom":"FloatingActionButton-module_leftBottom__210sl","rightTop":"FloatingActionButton-module_rightTop__VUsvT","rightBottom":"FloatingActionButton-module_rightBottom__FaUFl"};
1622
1702
  styleInject(css_248z$m);
1623
1703
 
1624
1704
  const FloatingActionButton = (props) => {
1625
- const { className, icon, color = exports.COLOR.primary, fixed, size = exports.SIZE.lg, isActive, disabled, onClick } = props;
1705
+ const { className, icon, color = exports.COLOR.primary, fixed, position = 'rightBottom', size = exports.SIZE.lg, isActive, disabled, onClick } = props;
1626
1706
  const getCssClasses = () => {
1627
1707
  const cssClasses = [];
1628
1708
  cssClasses.push(styles$m.fab);
1629
- fixed && cssClasses.push(styles$m['fixed']);
1709
+ fixed && cssClasses.push(styles$m.fixed);
1710
+ position && fixed && cssClasses.push(styles$m[position]);
1630
1711
  className && cssClasses.push(className);
1631
1712
  return cssClasses.filter(css => css).join(' ');
1632
1713
  };
@@ -2228,7 +2309,7 @@ const Stepper = (props) => {
2228
2309
  React__default["default"].createElement(StepperActions, { className: "mt-3", isFirstStep: activeIndex === 0, isStepOptional: isStepOptional(activeIndex), isCompleted: isLastStep(), onBack: handleBack, onSkip: handleSkip, onNext: handleNext, onReset: handleReset }))));
2229
2310
  };
2230
2311
 
2231
- var css_248z$8 = ".Typography-module_typography__sw-td {\n text-overflow: ellipsis;\n font-family: var(--fontFamily); }\n\nh1 {\n font-size: calc(1.375rem + 1.5vw); }\n\nh2 {\n font-size: calc(1.325rem + 0.9vw); }\n\nh3 {\n font-size: calc(1.3rem + 0.6vw); }\n\nh4 {\n font-size: calc(1.275rem + 0.3vw); }\n\nh5 {\n font-size: 1.25rem; }\n\nh6 {\n font-size: 1rem; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-weight: 500 !important;\n margin-top: 0;\n margin-bottom: 0.5rem;\n line-height: 1.2; }\n";
2312
+ var css_248z$8 = ".Typography-module_typography__sw-td {\n font-family: var(--fontFamily);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n\nh1 {\n font-size: calc(1.375rem + 1.5vw); }\n\nh2 {\n font-size: calc(1.325rem + 0.9vw); }\n\nh3 {\n font-size: calc(1.3rem + 0.6vw); }\n\nh4 {\n font-size: calc(1.275rem + 0.3vw); }\n\nh5 {\n font-size: 1.25rem; }\n\nh6 {\n font-size: 1rem; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-weight: 500 !important;\n margin-top: 0;\n margin-bottom: 0.5rem;\n line-height: 1.2; }\n";
2232
2313
  var styles$8 = {"typography":"Typography-module_typography__sw-td"};
2233
2314
  styleInject(css_248z$8);
2234
2315
 
@@ -2688,6 +2769,7 @@ exports.Chip = Chip;
2688
2769
  exports.CircleSolidIcon = CircleSolidIcon;
2689
2770
  exports.Column = Column;
2690
2771
  exports.ConditionalWrapper = ConditionalWrapper;
2772
+ exports.CssTransition = CssTransition;
2691
2773
  exports.DateSelect = DateSelect;
2692
2774
  exports.DaySelect = DaySelect;
2693
2775
  exports.Drawer = Drawer;
@@ -2772,4 +2854,5 @@ exports.useConstructor = useConstructor;
2772
2854
  exports.useCssClasses = useCssClasses;
2773
2855
  exports.useDebounce = useDebounce;
2774
2856
  exports.useHover = useHover;
2857
+ exports.useMobileDetect = useMobileDetect;
2775
2858
  exports.useWindowSize = useWindowSize;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-asc",
3
- "version": "21.3.1",
3
+ "version": "23.1.0",
4
4
  "description": "handcrafted react components",
5
5
  "main": "index.js",
6
6
  "module": "index.es.js",
package/react-asc.scss CHANGED
@@ -306,6 +306,11 @@
306
306
  }
307
307
 
308
308
 
309
+ * {
310
+ min-width: 0;
311
+ min-height: 0;
312
+ }
313
+
309
314
  label.required {
310
315
  &::after {
311
316
  display: inline-block;
package/readme.md CHANGED
@@ -47,6 +47,7 @@ const MyApp = () => {
47
47
  - Card
48
48
  - Checkbox
49
49
  - Chip
50
+ - CssTransition
50
51
  - ConditionalWrapper
51
52
  - DateSelect
52
53
  - Drawer