reso-ui 3.4.0 → 3.5.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.
package/README.md CHANGED
@@ -33,6 +33,7 @@ A React component library built with TypeScript + SCSS. Ships as tree-shakeable
33
33
  - [Import styles](#import-styles)
34
34
  - [Basic usage](#basic-usage)
35
35
  - [Theming & Dark Mode Setup](#theming--dark-mode-setup)
36
+ - [Responsive Context](#responsive-context)
36
37
  - [Overriding the Color Palette](#overriding-the-color-palette)
37
38
  - [Utility Classes](#utility-classes)
38
39
  - [Dev Notes](#dev-notes)
@@ -472,6 +473,78 @@ Scope dark-mode overrides with the same attribute selector:
472
473
 
473
474
  ---
474
475
 
476
+ ## Responsive Context
477
+
478
+ `ResoUiProvider` includes a `ResponsiveContext` that exposes viewport breakpoints to any component in your app.
479
+
480
+ ### Basic usage (viewport-only)
481
+
482
+ ```tsx
483
+ import { useContext } from "react";
484
+ import { ResponsiveContext } from "reso-ui";
485
+
486
+ const MyComponent = () => {
487
+ const { isMobile, isTablet } = useContext(ResponsiveContext);
488
+ return isMobile ? <MobileLayout /> : <DesktopLayout />;
489
+ };
490
+ ```
491
+
492
+ ### Breakpoints
493
+
494
+ | Flag | Range |
495
+ |------|-------|
496
+ | `isMobile` | `width < 640` |
497
+ | `isTablet` | `640 <= width < 768` |
498
+ | `isMdDesktop` | `768 <= width < 1024` |
499
+ | `isLgDesktop` | `1024 <= width < 1280` |
500
+ | `isXLgDesktop` | `width >= 1280` |
501
+
502
+ ### Container-aware breakpoints (optional)
503
+
504
+ By default, breakpoints are computed from the viewport width. If your app has sidebars, drawers, or panels that reduce the main content area, you can register a container element so breakpoints reflect the **actual available space**.
505
+
506
+ When a container is registered, breakpoints are computed from `Math.min(viewportWidth, containerWidth)`. This means `isMobile` becomes `true` when **either** the viewport or the tracked container is narrow.
507
+
508
+ ```tsx
509
+ import { useContext, useEffect, useRef } from "react";
510
+ import { Flex, ResponsiveContext } from "reso-ui";
511
+
512
+ const App = () => {
513
+ const mainRef = useRef<HTMLDivElement>(null);
514
+ const { setContainerRef } = useContext(ResponsiveContext);
515
+
516
+ useEffect(() => {
517
+ if (mainRef.current) setContainerRef(mainRef.current);
518
+ return () => setContainerRef(null);
519
+ }, []);
520
+
521
+ return (
522
+ <Flex ref={mainRef} direction="column">
523
+ {/* All child components get container-aware breakpoints */}
524
+ </Flex>
525
+ );
526
+ };
527
+ ```
528
+
529
+ When no container is registered (the default), breakpoints work exactly as before — no changes needed in existing apps.
530
+
531
+ ### Available context values
532
+
533
+ | Field | Type | Description |
534
+ |-------|------|-------------|
535
+ | `isMobile` | `boolean` | Effective width < 640 |
536
+ | `isTablet` | `boolean` | 640 <= effective width < 768 |
537
+ | `isMdDesktop` | `boolean` | 768 <= effective width < 1024 |
538
+ | `isLgDesktop` | `boolean` | 1024 <= effective width < 1280 |
539
+ | `isXLgDesktop` | `boolean` | Effective width >= 1280 |
540
+ | `windowWidth` | `number` | Actual viewport width |
541
+ | `windowHeight` | `number` | Actual viewport height |
542
+ | `containerWidth` | `number` | Tracked container width (0 if none registered) |
543
+ | `containerHeight` | `number` | Tracked container height (0 if none registered) |
544
+ | `setContainerRef` | `(el: HTMLElement \| null) => void` | Register/unregister a container element |
545
+
546
+ ---
547
+
475
548
  ## Overriding the Color Palette
476
549
 
477
550
  `ResoUiProvider` accepts optional `theme` and `mode` props for runtime theming with no build step required.
@@ -10,6 +10,9 @@ const ResponsiveContext = React.createContext({
10
10
  isXLgDesktop: false,
11
11
  windowWidth: 0,
12
12
  windowHeight: 0,
13
+ containerWidth: 0,
14
+ containerHeight: 0,
15
+ setContainerRef: () => { },
13
16
  });
14
17
 
15
18
  exports.ResponsiveContext = ResponsiveContext;
@@ -1 +1 @@
1
- {"version":3,"file":"ResponsiveContext.js","sources":["../../../src/library/context/ResponsiveContext.ts"],"sourcesContent":[null],"names":["createContext"],"mappings":";;;;AAYO,MAAM,iBAAiB,GAAGA,mBAAa,CAAqB;AACjE,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,YAAY,EAAE,CAAC;AAChB,CAAA;;;;"}
1
+ {"version":3,"file":"ResponsiveContext.js","sources":["../../../src/library/context/ResponsiveContext.ts"],"sourcesContent":[null],"names":["createContext"],"mappings":";;;;AAeO,MAAM,iBAAiB,GAAGA,mBAAa,CAAqB;AACjE,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,eAAe,EAAE,MAAK,EAAE,CAAC;AAC1B,CAAA;;;;"}
@@ -3,25 +3,43 @@
3
3
  var React = require('react');
4
4
  var useWindowSize = require('../hooks/useWindowSize.js');
5
5
  var ResponsiveContext = require('../context/ResponsiveContext.js');
6
+ var responsive = require('../utils/responsive.js');
6
7
 
7
8
  const ResponsiveProvider = ({ children }) => {
8
- const [width, height] = useWindowSize.useWindowSize();
9
- const { isMobile, isTablet, isMdDesktop, isLgDesktop, isXLgDesktop } = React.useMemo(() => ({
10
- isMobile: width < 640, // phones: 0–639
11
- isTablet: width >= 640 && width < 768, // tablets: 640–767
12
- isMdDesktop: width >= 768 && width < 1024, // small laptops: 768–1023
13
- isLgDesktop: width >= 1024 && width < 1280, // desktops: 1024–1279
14
- isXLgDesktop: width >= 1280, // large desktops / 2K+: 1280+
15
- }), [width]);
16
- return (React.createElement(ResponsiveContext.ResponsiveContext.Provider, { value: {
17
- isMobile,
18
- isTablet,
19
- isMdDesktop,
20
- isLgDesktop,
21
- isXLgDesktop,
22
- windowWidth: width,
23
- windowHeight: height,
24
- } }, children));
9
+ const [windowWidth, windowHeight] = useWindowSize.useWindowSize();
10
+ const [containerEl, setContainerEl] = React.useState(null);
11
+ const [containerSize, setContainerSize] = React.useState({ width: 0, height: 0 });
12
+ React.useEffect(() => {
13
+ if (!containerEl) {
14
+ setContainerSize({ width: 0, height: 0 });
15
+ return;
16
+ }
17
+ setContainerSize({ width: containerEl.offsetWidth, height: containerEl.offsetHeight });
18
+ const observer = new ResizeObserver((entries) => {
19
+ if (entries[0]) {
20
+ setContainerSize({
21
+ width: entries[0].contentRect.width,
22
+ height: entries[0].contentRect.height,
23
+ });
24
+ }
25
+ });
26
+ observer.observe(containerEl);
27
+ return () => observer.disconnect();
28
+ }, [containerEl]);
29
+ const effectiveWidth = containerEl
30
+ ? Math.min(windowWidth, containerSize.width)
31
+ : windowWidth;
32
+ const band = responsive.computeBreakpointBand(effectiveWidth);
33
+ const breakpoints = React.useMemo(() => responsive.computeBreakpoints(effectiveWidth), [band]);
34
+ const value = React.useMemo(() => ({
35
+ ...breakpoints,
36
+ windowWidth,
37
+ windowHeight,
38
+ containerWidth: containerSize.width,
39
+ containerHeight: containerSize.height,
40
+ setContainerRef: setContainerEl,
41
+ }), [breakpoints, windowWidth, windowHeight, containerSize.width, containerSize.height]);
42
+ return (React.createElement(ResponsiveContext.ResponsiveContext.Provider, { value: value }, children));
25
43
  };
26
44
 
27
45
  exports.ResponsiveProvider = ResponsiveProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"ResponsiveProvider.js","sources":["../../../src/library/providers/ResponsiveProvider.tsx"],"sourcesContent":[null],"names":["useWindowSize","useMemo","ResponsiveContext"],"mappings":";;;;;;MAIa,kBAAkB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAI;IACjD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAGA,2BAAa,EAAE;AAEvC,IAAA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,GAClEC,aAAO,CACL,OAAO;AACL,QAAA,QAAQ,EAAE,KAAK,GAAG,GAAG;QACrB,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG;QACrC,WAAW,EAAE,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,IAAI;QACzC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI;AAC1C,QAAA,YAAY,EAAE,KAAK,IAAI,IAAI;AAC5B,KAAA,CAAC,EACF,CAAC,KAAK,CAAC,CACR;AAEH,IAAA,QACE,KAAA,CAAA,aAAA,CAACC,mCAAiB,CAAC,QAAQ,EAAA,EACzB,KAAK,EAAE;YACL,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,WAAW;YACX,YAAY;AACZ,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,MAAM;SACrB,EAAA,EAEA,QAAQ,CACkB;AAEjC;;;;"}
1
+ {"version":3,"file":"ResponsiveProvider.js","sources":["../../../src/library/providers/ResponsiveProvider.tsx"],"sourcesContent":[null],"names":["useWindowSize","useState","useEffect","computeBreakpointBand","useMemo","computeBreakpoints","ResponsiveContext"],"mappings":";;;;;;;MAKa,kBAAkB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAI;IACjD,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAGA,2BAAa,EAAE;IAEnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAGC,cAAQ,CAAqB,IAAI,CAAC;AACxE,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGA,cAAQ,CAAoC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAE9GC,eAAS,CAAC,MAAK;QACb,IAAI,CAAC,WAAW,EAAE;YAChB,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACzC;QACF;AAEA,QAAA,gBAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC;QAEtF,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;AAC9C,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;AACd,gBAAA,gBAAgB,CAAC;oBACf,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK;oBACnC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM;AACtC,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;AAC7B,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAEjB,MAAM,cAAc,GAAG;UACnB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK;UACzC,WAAW;AAEf,IAAA,MAAM,IAAI,GAAGC,gCAAqB,CAAC,cAAc,CAAC;AAElD,IAAA,MAAM,WAAW,GAAGC,aAAO,CACzB,MAAMC,6BAAkB,CAAC,cAAc,CAAC,EACxC,CAAC,IAAI,CAAC,CACP;AAED,IAAA,MAAM,KAAK,GAAGD,aAAO,CACnB,OAAO;AACL,QAAA,GAAG,WAAW;QACd,WAAW;QACX,YAAY;QACZ,cAAc,EAAE,aAAa,CAAC,KAAK;QACnC,eAAe,EAAE,aAAa,CAAC,MAAM;AACrC,QAAA,eAAe,EAAE,cAAc;AAChC,KAAA,CAAC,EACF,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CACpF;AAED,IAAA,QACE,KAAA,CAAA,aAAA,CAACE,mCAAiB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,EACrC,QAAQ,CACkB;AAEjC;;;;"}
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ const BREAKPOINT_MOBILE = 640;
4
+ const BREAKPOINT_TABLET = 768;
5
+ const BREAKPOINT_MD_DESKTOP = 1024;
6
+ const BREAKPOINT_LG_DESKTOP = 1280;
7
+ const computeBreakpoints = (width) => ({
8
+ isMobile: width < BREAKPOINT_MOBILE,
9
+ isTablet: width >= BREAKPOINT_MOBILE && width < BREAKPOINT_TABLET,
10
+ isMdDesktop: width >= BREAKPOINT_TABLET && width < BREAKPOINT_MD_DESKTOP,
11
+ isLgDesktop: width >= BREAKPOINT_MD_DESKTOP && width < BREAKPOINT_LG_DESKTOP,
12
+ isXLgDesktop: width >= BREAKPOINT_LG_DESKTOP,
13
+ });
14
+ const computeBreakpointBand = (width) => {
15
+ if (width < BREAKPOINT_MOBILE)
16
+ return 0;
17
+ if (width < BREAKPOINT_TABLET)
18
+ return 1;
19
+ if (width < BREAKPOINT_MD_DESKTOP)
20
+ return 2;
21
+ if (width < BREAKPOINT_LG_DESKTOP)
22
+ return 3;
23
+ return 4;
24
+ };
25
+
26
+ exports.BREAKPOINT_LG_DESKTOP = BREAKPOINT_LG_DESKTOP;
27
+ exports.BREAKPOINT_MD_DESKTOP = BREAKPOINT_MD_DESKTOP;
28
+ exports.BREAKPOINT_MOBILE = BREAKPOINT_MOBILE;
29
+ exports.BREAKPOINT_TABLET = BREAKPOINT_TABLET;
30
+ exports.computeBreakpointBand = computeBreakpointBand;
31
+ exports.computeBreakpoints = computeBreakpoints;
32
+ //# sourceMappingURL=responsive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.js","sources":["../../../src/library/utils/responsive.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAO,MAAM,iBAAiB,GAAG;AAC1B,MAAM,iBAAiB,GAAG;AAC1B,MAAM,qBAAqB,GAAG;AAC9B,MAAM,qBAAqB,GAAG;MAExB,kBAAkB,GAAG,CAAC,KAAa,MAAM;IACpD,QAAQ,EAAE,KAAK,GAAG,iBAAiB;AACnC,IAAA,QAAQ,EAAE,KAAK,IAAI,iBAAiB,IAAI,KAAK,GAAG,iBAAiB;AACjE,IAAA,WAAW,EAAE,KAAK,IAAI,iBAAiB,IAAI,KAAK,GAAG,qBAAqB;AACxE,IAAA,WAAW,EAAE,KAAK,IAAI,qBAAqB,IAAI,KAAK,GAAG,qBAAqB;IAC5E,YAAY,EAAE,KAAK,IAAI,qBAAqB;AAC7C,CAAA;AAEM,MAAM,qBAAqB,GAAG,CAAC,KAAa,KAAY;IAC7D,IAAI,KAAK,GAAG,iBAAiB;AAAE,QAAA,OAAO,CAAC;IACvC,IAAI,KAAK,GAAG,iBAAiB;AAAE,QAAA,OAAO,CAAC;IACvC,IAAI,KAAK,GAAG,qBAAqB;AAAE,QAAA,OAAO,CAAC;IAC3C,IAAI,KAAK,GAAG,qBAAqB;AAAE,QAAA,OAAO,CAAC;AAC3C,IAAA,OAAO,CAAC;AACV;;;;;;;;;"}
@@ -6,5 +6,8 @@ export interface IResponsiveContext {
6
6
  isXLgDesktop: boolean;
7
7
  windowWidth: number;
8
8
  windowHeight: number;
9
+ containerWidth: number;
10
+ containerHeight: number;
11
+ setContainerRef: (el: HTMLElement | null) => void;
9
12
  }
10
13
  export declare const ResponsiveContext: import("react").Context<IResponsiveContext>;
@@ -8,6 +8,9 @@ const ResponsiveContext = createContext({
8
8
  isXLgDesktop: false,
9
9
  windowWidth: 0,
10
10
  windowHeight: 0,
11
+ containerWidth: 0,
12
+ containerHeight: 0,
13
+ setContainerRef: () => { },
11
14
  });
12
15
 
13
16
  export { ResponsiveContext };
@@ -1 +1 @@
1
- {"version":3,"file":"ResponsiveContext.js","sources":["../../../src/library/context/ResponsiveContext.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAYO,MAAM,iBAAiB,GAAG,aAAa,CAAqB;AACjE,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,YAAY,EAAE,CAAC;AAChB,CAAA;;;;"}
1
+ {"version":3,"file":"ResponsiveContext.js","sources":["../../../src/library/context/ResponsiveContext.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAeO,MAAM,iBAAiB,GAAG,aAAa,CAAqB;AACjE,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,eAAe,EAAE,MAAK,EAAE,CAAC;AAC1B,CAAA;;;;"}
@@ -1,25 +1,43 @@
1
- import React__default, { useMemo } from 'react';
1
+ import React__default, { useState, useEffect, useMemo } from 'react';
2
2
  import { useWindowSize } from '../hooks/useWindowSize.js';
3
3
  import { ResponsiveContext } from '../context/ResponsiveContext.js';
4
+ import { computeBreakpoints, computeBreakpointBand } from '../utils/responsive.js';
4
5
 
5
6
  const ResponsiveProvider = ({ children }) => {
6
- const [width, height] = useWindowSize();
7
- const { isMobile, isTablet, isMdDesktop, isLgDesktop, isXLgDesktop } = useMemo(() => ({
8
- isMobile: width < 640, // phones: 0–639
9
- isTablet: width >= 640 && width < 768, // tablets: 640–767
10
- isMdDesktop: width >= 768 && width < 1024, // small laptops: 768–1023
11
- isLgDesktop: width >= 1024 && width < 1280, // desktops: 1024–1279
12
- isXLgDesktop: width >= 1280, // large desktops / 2K+: 1280+
13
- }), [width]);
14
- return (React__default.createElement(ResponsiveContext.Provider, { value: {
15
- isMobile,
16
- isTablet,
17
- isMdDesktop,
18
- isLgDesktop,
19
- isXLgDesktop,
20
- windowWidth: width,
21
- windowHeight: height,
22
- } }, children));
7
+ const [windowWidth, windowHeight] = useWindowSize();
8
+ const [containerEl, setContainerEl] = useState(null);
9
+ const [containerSize, setContainerSize] = useState({ width: 0, height: 0 });
10
+ useEffect(() => {
11
+ if (!containerEl) {
12
+ setContainerSize({ width: 0, height: 0 });
13
+ return;
14
+ }
15
+ setContainerSize({ width: containerEl.offsetWidth, height: containerEl.offsetHeight });
16
+ const observer = new ResizeObserver((entries) => {
17
+ if (entries[0]) {
18
+ setContainerSize({
19
+ width: entries[0].contentRect.width,
20
+ height: entries[0].contentRect.height,
21
+ });
22
+ }
23
+ });
24
+ observer.observe(containerEl);
25
+ return () => observer.disconnect();
26
+ }, [containerEl]);
27
+ const effectiveWidth = containerEl
28
+ ? Math.min(windowWidth, containerSize.width)
29
+ : windowWidth;
30
+ const band = computeBreakpointBand(effectiveWidth);
31
+ const breakpoints = useMemo(() => computeBreakpoints(effectiveWidth), [band]);
32
+ const value = useMemo(() => ({
33
+ ...breakpoints,
34
+ windowWidth,
35
+ windowHeight,
36
+ containerWidth: containerSize.width,
37
+ containerHeight: containerSize.height,
38
+ setContainerRef: setContainerEl,
39
+ }), [breakpoints, windowWidth, windowHeight, containerSize.width, containerSize.height]);
40
+ return (React__default.createElement(ResponsiveContext.Provider, { value: value }, children));
23
41
  };
24
42
 
25
43
  export { ResponsiveProvider };
@@ -1 +1 @@
1
- {"version":3,"file":"ResponsiveProvider.js","sources":["../../../src/library/providers/ResponsiveProvider.tsx"],"sourcesContent":[null],"names":["React"],"mappings":";;;;MAIa,kBAAkB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAI;IACjD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,aAAa,EAAE;AAEvC,IAAA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,GAClE,OAAO,CACL,OAAO;AACL,QAAA,QAAQ,EAAE,KAAK,GAAG,GAAG;QACrB,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG;QACrC,WAAW,EAAE,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,IAAI;QACzC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI;AAC1C,QAAA,YAAY,EAAE,KAAK,IAAI,IAAI;AAC5B,KAAA,CAAC,EACF,CAAC,KAAK,CAAC,CACR;AAEH,IAAA,QACEA,cAAA,CAAA,aAAA,CAAC,iBAAiB,CAAC,QAAQ,EAAA,EACzB,KAAK,EAAE;YACL,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,WAAW;YACX,YAAY;AACZ,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,YAAY,EAAE,MAAM;SACrB,EAAA,EAEA,QAAQ,CACkB;AAEjC;;;;"}
1
+ {"version":3,"file":"ResponsiveProvider.js","sources":["../../../src/library/providers/ResponsiveProvider.tsx"],"sourcesContent":[null],"names":["React"],"mappings":";;;;;MAKa,kBAAkB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAI;IACjD,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,aAAa,EAAE;IAEnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC;AACxE,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAoC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAE9G,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,WAAW,EAAE;YAChB,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACzC;QACF;AAEA,QAAA,gBAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC;QAEtF,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;AAC9C,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;AACd,gBAAA,gBAAgB,CAAC;oBACf,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK;oBACnC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM;AACtC,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC;AAC7B,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAEjB,MAAM,cAAc,GAAG;UACnB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK;UACzC,WAAW;AAEf,IAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,cAAc,CAAC;AAElD,IAAA,MAAM,WAAW,GAAG,OAAO,CACzB,MAAM,kBAAkB,CAAC,cAAc,CAAC,EACxC,CAAC,IAAI,CAAC,CACP;AAED,IAAA,MAAM,KAAK,GAAG,OAAO,CACnB,OAAO;AACL,QAAA,GAAG,WAAW;QACd,WAAW;QACX,YAAY;QACZ,cAAc,EAAE,aAAa,CAAC,KAAK;QACnC,eAAe,EAAE,aAAa,CAAC,MAAM;AACrC,QAAA,eAAe,EAAE,cAAc;AAChC,KAAA,CAAC,EACF,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CACpF;AAED,IAAA,QACEA,cAAA,CAAA,aAAA,CAAC,iBAAiB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,EACrC,QAAQ,CACkB;AAEjC;;;;"}
@@ -0,0 +1,12 @@
1
+ export declare const BREAKPOINT_MOBILE = 640;
2
+ export declare const BREAKPOINT_TABLET = 768;
3
+ export declare const BREAKPOINT_MD_DESKTOP = 1024;
4
+ export declare const BREAKPOINT_LG_DESKTOP = 1280;
5
+ export declare const computeBreakpoints: (width: number) => {
6
+ isMobile: boolean;
7
+ isTablet: boolean;
8
+ isMdDesktop: boolean;
9
+ isLgDesktop: boolean;
10
+ isXLgDesktop: boolean;
11
+ };
12
+ export declare const computeBreakpointBand: (width: number) => number;
@@ -0,0 +1,25 @@
1
+ const BREAKPOINT_MOBILE = 640;
2
+ const BREAKPOINT_TABLET = 768;
3
+ const BREAKPOINT_MD_DESKTOP = 1024;
4
+ const BREAKPOINT_LG_DESKTOP = 1280;
5
+ const computeBreakpoints = (width) => ({
6
+ isMobile: width < BREAKPOINT_MOBILE,
7
+ isTablet: width >= BREAKPOINT_MOBILE && width < BREAKPOINT_TABLET,
8
+ isMdDesktop: width >= BREAKPOINT_TABLET && width < BREAKPOINT_MD_DESKTOP,
9
+ isLgDesktop: width >= BREAKPOINT_MD_DESKTOP && width < BREAKPOINT_LG_DESKTOP,
10
+ isXLgDesktop: width >= BREAKPOINT_LG_DESKTOP,
11
+ });
12
+ const computeBreakpointBand = (width) => {
13
+ if (width < BREAKPOINT_MOBILE)
14
+ return 0;
15
+ if (width < BREAKPOINT_TABLET)
16
+ return 1;
17
+ if (width < BREAKPOINT_MD_DESKTOP)
18
+ return 2;
19
+ if (width < BREAKPOINT_LG_DESKTOP)
20
+ return 3;
21
+ return 4;
22
+ };
23
+
24
+ export { BREAKPOINT_LG_DESKTOP, BREAKPOINT_MD_DESKTOP, BREAKPOINT_MOBILE, BREAKPOINT_TABLET, computeBreakpointBand, computeBreakpoints };
25
+ //# sourceMappingURL=responsive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responsive.js","sources":["../../../src/library/utils/responsive.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAO,MAAM,iBAAiB,GAAG;AAC1B,MAAM,iBAAiB,GAAG;AAC1B,MAAM,qBAAqB,GAAG;AAC9B,MAAM,qBAAqB,GAAG;MAExB,kBAAkB,GAAG,CAAC,KAAa,MAAM;IACpD,QAAQ,EAAE,KAAK,GAAG,iBAAiB;AACnC,IAAA,QAAQ,EAAE,KAAK,IAAI,iBAAiB,IAAI,KAAK,GAAG,iBAAiB;AACjE,IAAA,WAAW,EAAE,KAAK,IAAI,iBAAiB,IAAI,KAAK,GAAG,qBAAqB;AACxE,IAAA,WAAW,EAAE,KAAK,IAAI,qBAAqB,IAAI,KAAK,GAAG,qBAAqB;IAC5E,YAAY,EAAE,KAAK,IAAI,qBAAqB;AAC7C,CAAA;AAEM,MAAM,qBAAqB,GAAG,CAAC,KAAa,KAAY;IAC7D,IAAI,KAAK,GAAG,iBAAiB;AAAE,QAAA,OAAO,CAAC;IACvC,IAAI,KAAK,GAAG,iBAAiB;AAAE,QAAA,OAAO,CAAC;IACvC,IAAI,KAAK,GAAG,qBAAqB;AAAE,QAAA,OAAO,CAAC;IAC3C,IAAI,KAAK,GAAG,qBAAqB;AAAE,QAAA,OAAO,CAAC;AAC3C,IAAA,OAAO,CAAC;AACV;;;;"}
@@ -23,13 +23,13 @@ declare const _default: {
23
23
  okButtonStyles?: React.CSSProperties;
24
24
  rootClassName?: string;
25
25
  rootStyles?: React.CSSProperties;
26
- pa?: 0 | 2 | 1 | 3 | 5 | 4 | 6 | 7 | 8 | 9;
27
- pv?: 0 | 2 | 1 | 3 | 5 | 4 | 6 | 7 | 8 | 9;
28
- ph?: 0 | 2 | 1 | 3 | 5 | 4 | 6 | 7 | 8 | 9;
29
- pt?: 0 | 2 | 1 | 3 | 5 | 4 | 6 | 7 | 8 | 9;
30
- pb?: 0 | 2 | 1 | 3 | 5 | 4 | 6 | 7 | 8 | 9;
31
- pr?: 0 | 2 | 1 | 3 | 5 | 4 | 6 | 7 | 8 | 9;
32
- pl?: 0 | 2 | 1 | 3 | 5 | 4 | 6 | 7 | 8 | 9;
26
+ pv?: 0 | 2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
27
+ ph?: 0 | 2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
28
+ pa?: 0 | 2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
29
+ pt?: 0 | 2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
30
+ pb?: 0 | 2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
31
+ pr?: 0 | 2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
32
+ pl?: 0 | 2 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
33
33
  isOpen: boolean;
34
34
  layer?: number;
35
35
  }>) => React.JSX.Element)[];
@@ -6,5 +6,8 @@ export interface IResponsiveContext {
6
6
  isXLgDesktop: boolean;
7
7
  windowWidth: number;
8
8
  windowHeight: number;
9
+ containerWidth: number;
10
+ containerHeight: number;
11
+ setContainerRef: (el: HTMLElement | null) => void;
9
12
  }
10
13
  export declare const ResponsiveContext: import("react").Context<IResponsiveContext>;
@@ -0,0 +1,12 @@
1
+ export declare const BREAKPOINT_MOBILE = 640;
2
+ export declare const BREAKPOINT_TABLET = 768;
3
+ export declare const BREAKPOINT_MD_DESKTOP = 1024;
4
+ export declare const BREAKPOINT_LG_DESKTOP = 1280;
5
+ export declare const computeBreakpoints: (width: number) => {
6
+ isMobile: boolean;
7
+ isTablet: boolean;
8
+ isMdDesktop: boolean;
9
+ isLgDesktop: boolean;
10
+ isXLgDesktop: boolean;
11
+ };
12
+ export declare const computeBreakpointBand: (width: number) => number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reso-ui",
3
- "version": "3.4.0",
3
+ "version": "3.5.0",
4
4
  "description": "Reusable React components in Typescript",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",