@dynamic-framework/ui-react 2.6.0 → 2.7.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.
@@ -1,11 +1,18 @@
1
- /// <reference types="react" />
2
1
  import { Splide } from '@splidejs/react-splide';
2
+ import type { ComponentProps } from 'react';
3
3
  import type { SplideProps } from '@splidejs/react-splide';
4
+ import DIcon from '../DIcon';
4
5
  import DCarouselSlide from './components/DCarouselSlide';
5
6
  import type { BaseProps } from '../interface';
7
+ type ArrowIconProps = {
8
+ /** DIcon props used to render the "previous" arrow icon. */
9
+ iconArrowLeft?: ComponentProps<typeof DIcon>;
10
+ /** DIcon props used to render the "next" arrow icon. */
11
+ iconArrowRight?: ComponentProps<typeof DIcon>;
12
+ };
6
13
  declare const _default: import("react").ForwardRefExoticComponent<SplideProps & BaseProps & {
7
14
  children?: import("react").ReactNode;
8
- } & import("react").RefAttributes<Splide>> & {
15
+ } & ArrowIconProps & import("react").RefAttributes<Splide>> & {
9
16
  Slide: typeof DCarouselSlide;
10
17
  };
11
18
  export default _default;
@@ -1,5 +1,5 @@
1
- import type { ComponentProps } from 'react';
2
- import DIconBase from '../DIconBase';
3
- type Props = ComponentProps<typeof DIconBase>;
4
- export default function DIcon({ familyClass: propFamilyClass, familyPrefix: propFamilyPrefix, materialStyle: propMaterialStyle, ...props }: Props): import("react").JSX.Element;
1
+ /// <reference types="react" />
2
+ import type { DIconBaseProps } from '../DIconBase';
3
+ type Props = DIconBaseProps;
4
+ export default function DIcon({ icon, familyClass: propFamilyClass, familyPrefix: propFamilyPrefix, materialStyle: propMaterialStyle, ...props }: Props): import("react").JSX.Element;
5
5
  export {};
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
- import type { BaseProps, ComponentColor } from '../interface';
2
+ import type { BaseProps, ComponentColor, IconValue } from '../interface';
3
3
  import { ResponsiveProp } from '../../hooks/useResponsiveProp';
4
4
  type Props = BaseProps & {
5
- icon: string;
5
+ icon: IconValue;
6
6
  color?: ComponentColor;
7
7
  size?: string | ResponsiveProp;
8
8
  /**
@@ -18,5 +18,6 @@ type Props = BaseProps & {
18
18
  familyPrefix?: string;
19
19
  strokeWidth?: number;
20
20
  };
21
+ export type DIconBaseProps = Props;
21
22
  export default function DIconBase({ icon, color, style, className, size, useListenerSize, hasCircle, materialStyle, familyClass, familyPrefix, strokeWidth, dataAttributes, }: Props): import("react").JSX.Element;
22
23
  export {};
@@ -1,2 +1,3 @@
1
1
  import DIconBase from './DIconBase';
2
+ export type { DIconBaseProps } from './DIconBase';
2
3
  export default DIconBase;
@@ -1,17 +1,29 @@
1
1
  import { type Transition } from 'framer-motion';
2
- import type { PropsWithChildren } from 'react';
2
+ import { type PropsWithChildren } from 'react';
3
+ import { ResponsiveProp } from '../../hooks/useResponsiveProp';
3
4
  import DOffcanvasHeader from './components/DOffcanvasHeader';
4
5
  import DOffcanvasBody from './components/DOffcanvasBody';
5
6
  import DOffcanvasFooter from './components/DOffcanvasFooter';
6
7
  import type { BaseProps, OffcanvasPositionToggleFrom } from '../interface';
8
+ type OffcanvasResponsivePlacement = Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl', OffcanvasPositionToggleFrom>>;
7
9
  type Props = BaseProps & PropsWithChildren<{
8
10
  name: string;
9
11
  staticBackdrop?: boolean;
10
12
  scrollable?: boolean;
11
- openFrom?: OffcanvasPositionToggleFrom;
13
+ openFrom?: OffcanvasPositionToggleFrom | OffcanvasResponsivePlacement;
14
+ /**
15
+ * Overrides the offcanvas size on the `start`/`end` placements (defaults to `400px`).
16
+ * Accepts any CSS length (e.g. `'320px'`, `'50vw'`, `'100%'`) or a `ResponsiveProp` object.
17
+ */
18
+ width?: string | ResponsiveProp;
19
+ /**
20
+ * Overrides the offcanvas size on the `top`/`bottom` placements (defaults to `100%`).
21
+ * Accepts any CSS length (e.g. `'50vh'`, `'320px'`) or a `ResponsiveProp` object.
22
+ */
23
+ height?: string | ResponsiveProp;
12
24
  transition?: Transition;
13
25
  }>;
14
- declare function DOffcanvas({ name, className, style, staticBackdrop, scrollable, openFrom, transition, children, dataAttributes, }: Props): import("react").JSX.Element;
26
+ declare function DOffcanvas({ name, className, style, staticBackdrop, scrollable, openFrom, width, height, transition, children, dataAttributes, }: Props): import("react").JSX.Element;
15
27
  declare const _default: typeof DOffcanvas & {
16
28
  Header: typeof DOffcanvasHeader;
17
29
  Body: typeof DOffcanvasBody;
@@ -1,4 +1,4 @@
1
- import type { CSSProperties } from 'react';
1
+ import type { ComponentType, CSSProperties, SVGProps } from 'react';
2
2
  export type ClassMap = {
3
3
  [className: string]: boolean;
4
4
  };
@@ -19,13 +19,15 @@ export type BaseProps = {
19
19
  className?: string;
20
20
  dataAttributes?: DataAttributes;
21
21
  };
22
+ export type IconComponent = ComponentType<SVGProps<SVGSVGElement>>;
23
+ export type IconValue = string | IconComponent;
22
24
  export type FamilyIconProps = {
23
25
  iconFamilyClass?: string;
24
26
  iconFamilyPrefix?: string;
25
27
  iconMaterialStyle?: boolean;
26
28
  };
27
29
  export type StartIconProps = {
28
- iconStart?: string;
30
+ iconStart?: IconValue;
29
31
  iconStartDisabled?: boolean;
30
32
  iconStartFamilyClass?: string;
31
33
  iconStartFamilyPrefix?: string;
@@ -34,7 +36,7 @@ export type StartIconProps = {
34
36
  iconStartMaterialStyle?: boolean;
35
37
  };
36
38
  export type EndIconProps = {
37
- iconEnd?: string;
39
+ iconEnd?: IconValue;
38
40
  iconEndDisabled?: boolean;
39
41
  iconEndFamilyClass?: string;
40
42
  iconEndFamilyPrefix?: string;
@@ -1,6 +1,6 @@
1
1
  import { type PropsWithChildren } from 'react';
2
2
  import { type PortalContextProps } from './DPortalContext';
3
- import type { AlertThemeIconMap } from '../components/interface';
3
+ import type { AlertThemeIconMap, IconComponent } from '../components/interface';
4
4
  /**
5
5
  * Currency formatting configuration used by `DContextProvider`.
6
6
  */
@@ -86,6 +86,7 @@ type Props = {
86
86
  language: string;
87
87
  currency: CurrencyProps;
88
88
  icon: IconProps;
89
+ iconRegistry?: Record<string, IconComponent>;
89
90
  iconMap: IconMapProps;
90
91
  breakpoints: BreakpointProps;
91
92
  };
@@ -124,7 +125,7 @@ export declare const DContext: import("react").Context<Context>;
124
125
  * @template T - Map of portal name → payload shape (e.g. `{ modal: { title: string } }`).
125
126
  * Pass it once at the top level: `<DContextProvider<MyPortals> ...>`.
126
127
  */
127
- export declare function DContextProvider<T extends Record<string, unknown>>({ language, currency, icon, iconMap, portalName, availablePortals, children, }: PropsWithChildren<Partial<DContextProviderProps<T>>>): import("react").JSX.Element;
128
+ export declare function DContextProvider<T extends Record<string, unknown>>({ language, currency, icon, iconRegistry, iconMap, portalName, availablePortals, children, }: PropsWithChildren<Partial<DContextProviderProps<T>>>): import("react").JSX.Element;
128
129
  /**
129
130
  * Returns the Dynamic UI context value set by `DContextProvider`.
130
131
  * Falls back to the library's built-in defaults when no `DContextProvider`
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "sideEffects": [
4
4
  "*.css"
5
5
  ],
6
- "version": "2.6.0",
6
+ "version": "2.7.0",
7
7
  "description": "React Dynamic Framework",
8
8
  "license": "https://github.com/dynamic-framework/dynamic-ui/blob/master/LICENSE.md",
9
9
  "repository": {
@@ -110,6 +110,7 @@
110
110
  "react-datepicker": "~8.3.0",
111
111
  "react-error-boundary": "^6.1.0",
112
112
  "react-international-phone": "~4.6.0",
113
+ "react-is": "^19.2.7",
113
114
  "react-responsive-pagination": "~2.11.3",
114
115
  "react-select": "~5.10.2"
115
116
  },
@@ -132,6 +133,7 @@
132
133
  "@types/node": "^22.0.0",
133
134
  "@types/react": "^19.2.0",
134
135
  "@types/react-dom": "^19.2.0",
136
+ "@types/react-is": "^19.2.0",
135
137
  "@typescript-eslint/eslint-plugin": "~6.9.0",
136
138
  "@typescript-eslint/parser": "~6.9.0",
137
139
  "@vitejs/plugin-react": "~4.7.0",
@@ -15,3 +15,11 @@ $offcanvas-separator-margin-x: var(--#{$prefix}ref-spacer-4) !default;
15
15
 
16
16
  $offcanvas-bg-color: var(--#{$prefix}white) !default;
17
17
  // scss-docs-end offcanvas-variables
18
+
19
+ // custom
20
+ // Bootstrap's default is 30vh, which cuts off top/bottom offcanvas content
21
+ // (e.g. mobile bottom-sheet placements) and forces an inner scroll. Cover the
22
+ // full viewport height instead, relying on `.offcanvas-body`'s own
23
+ // `overflow-y: auto` to scroll long content while header/footer stay fixed.
24
+ $offcanvas-vertical-height: 100% !default;
25
+ // end custom
@@ -42,9 +42,27 @@
42
42
  height: $carousel-control-height;
43
43
  background: var(--#{$prefix}primary);
44
44
  padding: var(--#{$prefix}ref-spacer-1);
45
- svg {
45
+
46
+ // Only invert the default arrow icon (a bare <svg> as a direct child).
47
+ // Custom icons rendered via `iconArrowLeft`/`iconArrowRight` use DIcon
48
+ // (wrapped in a .d-icon span) and are reset below, so they are untouched here.
49
+ > svg {
46
50
  filter: invert(1);
47
51
  }
52
+
53
+ // Splide's default theme applies `fill` and, for the prev arrow, a
54
+ // `scaleX(-1)` flip to every descendant <svg>, assuming a single arrow
55
+ // path reused for both directions. `iconArrowLeft`/`iconArrowRight` are
56
+ // typed as DIcon props, so the only <svg> rendered here is a Lucide icon,
57
+ // which is always stroke-based with `fill="none"` (see lucide-react
58
+ // defaultAttributes). Resetting to `fill: none` restores that intended
59
+ // stroke-only look and lets DIcon's own `color` (applied via `currentColor`
60
+ // on stroke) keep controlling the icon color; `transform: none` cancels
61
+ // the flip so the icon keeps its intended orientation.
62
+ .d-icon svg {
63
+ fill: none;
64
+ transform: none;
65
+ }
48
66
  }
49
67
 
50
68
  .d-carousel-pagination {