@drivy/cobalt 2.19.0 → 2.24.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.
Files changed (53) hide show
  1. package/components/Calendar/CalendarRangePicker/CalendarRangePickerDay.js +14 -7
  2. package/components/Calendar/CalendarRangePicker/CalendarRangePickerDay.js.map +1 -1
  3. package/components/Modal/index.js +6 -5
  4. package/components/Modal/index.js.map +1 -1
  5. package/components/PhotoDropzone/index.js +1 -1
  6. package/components/PhotoDropzone/index.js.map +1 -1
  7. package/components/Popover/DesktopPopover.js +27 -0
  8. package/components/Popover/DesktopPopover.js.map +1 -0
  9. package/components/Popover/PopoverWrapper.js +49 -0
  10. package/components/Popover/PopoverWrapper.js.map +1 -0
  11. package/components/Popover/TooltipWrapper.js +10 -0
  12. package/components/Popover/TooltipWrapper.js.map +1 -0
  13. package/components/Popover/index.js +8 -40
  14. package/components/Popover/index.js.map +1 -1
  15. package/components/Popover/popoverRegistry.js +15 -0
  16. package/components/Popover/popoverRegistry.js.map +1 -0
  17. package/components/Popover/tooltipConfig.js +12 -0
  18. package/components/Popover/tooltipConfig.js.map +1 -0
  19. package/components/Popover/useDesktopPopoverCore.js +102 -0
  20. package/components/Popover/useDesktopPopoverCore.js.map +1 -0
  21. package/components/Popover/useSingletonPopover.js +148 -0
  22. package/components/Popover/useSingletonPopover.js.map +1 -0
  23. package/components/ProgressBanner/index.js +5 -3
  24. package/components/ProgressBanner/index.js.map +1 -1
  25. package/components/Sidepanel/index.js +7 -4
  26. package/components/Sidepanel/index.js.map +1 -1
  27. package/index.js +5 -0
  28. package/index.js.map +1 -1
  29. package/package.json +3 -4
  30. package/styles/components/Calendar/CalendarRangePicker/index.scss +0 -8
  31. package/styles/components/Modal/index.scss +14 -2
  32. package/styles/components/Popover/index.scss +29 -72
  33. package/styles/components/ProgressBanner/index.scss +7 -0
  34. package/styles/components/Sidepanel/index.scss +9 -3
  35. package/types/src/components/Modal/index.d.ts +1 -0
  36. package/types/src/components/Popover/DesktopPopover.d.ts +2 -0
  37. package/types/src/components/Popover/PopoverWrapper.d.ts +13 -0
  38. package/types/src/components/Popover/TooltipWrapper.d.ts +3 -0
  39. package/types/src/components/Popover/index.d.ts +13 -24
  40. package/types/src/components/Popover/popoverRegistry.d.ts +4 -0
  41. package/types/src/components/Popover/tooltipConfig.d.ts +9 -0
  42. package/types/src/components/Popover/useDesktopPopoverCore.d.ts +44 -0
  43. package/types/src/components/Popover/useSingletonPopover.d.ts +17 -0
  44. package/types/src/components/ProgressBanner/index.d.ts +2 -1
  45. package/types/src/components/Sidepanel/index.d.ts +2 -1
  46. package/types/src/index.d.ts +6 -0
  47. package/components/Calendar/CalendarRangePicker/DayTooltip.js +0 -23
  48. package/components/Calendar/CalendarRangePicker/DayTooltip.js.map +0 -1
  49. package/components/Popover/LazyTippy.js +0 -9
  50. package/components/Popover/LazyTippy.js.map +0 -1
  51. package/types/src/__tests__/AsyncComponent.d.ts +0 -6
  52. package/types/src/components/Calendar/CalendarRangePicker/DayTooltip.d.ts +0 -3
  53. package/types/src/components/Popover/LazyTippy.d.ts +0 -3
@@ -1,90 +1,47 @@
1
- @import "tippy.js/dist/tippy.css";
2
- @import "tippy.js/themes/light.css";
3
- @import "tippy.js/animations/shift-away-subtle.css";
4
-
5
- [data-theme~="cobalt-popover"] {
6
- &.tippy-box {
7
- @apply c-bg-surfaceBright c-text-onSurface c-shadow-lg c-rounded-lg;
8
- }
9
-
10
- .tippy-content {
11
- padding: 0;
12
- min-width: 16rem;
13
-
14
- @apply c-rounded-lg;
15
- }
16
-
17
- &[data-placement^="top"] > .tippy-arrow::before {
18
- border-top-color: theme("colors.surfaceBright") !important;
19
- }
20
-
21
- &[data-placement^="bottom"] > .tippy-arrow::before {
22
- border-bottom-color: theme("colors.surfaceBright") !important;
23
- }
24
-
25
- &[data-placement^="left"] > .tippy-arrow::before {
26
- border-left-color: theme("colors.surfaceBright") !important;
27
- }
28
-
29
- &[data-placement^="right"] > .tippy-arrow::before {
30
- border-right-color: theme("colors.surfaceBright") !important;
31
- }
1
+ .cobalt-popover {
2
+ @apply c-bg-surfaceBright c-text-onSurface c-shadow-lg c-rounded-lg;
3
+ padding: 0;
4
+ min-width: 16rem;
5
+ max-width: 500px;
32
6
  }
33
7
 
34
- [data-theme~="cobalt-popover--fitContent"] {
35
- .tippy-content {
36
- min-width: auto;
37
- }
8
+ .cobalt-popover--fitContent {
9
+ min-width: auto;
10
+ max-width: none;
38
11
  }
39
12
 
40
- [data-theme~="cobalt-popover--withArrow"] {
41
- &.tippy-box {
42
- @apply c-rounded-xl;
43
- }
13
+ .cobalt-popover--withArrow {
14
+ @apply c-rounded-xl;
15
+ }
44
16
 
45
- .tippy-content {
46
- @apply c-rounded-xl;
47
- }
17
+ .cobalt-popover--withBorder {
18
+ @apply c-border c-border-outline;
48
19
  }
49
20
 
50
21
  .cobalt-popover--bodySpacing {
51
22
  padding: theme("spacing.md");
52
23
  }
53
24
 
25
+ .cobalt-popover__arrow {
26
+ fill: theme("colors.surfaceBright");
27
+ }
28
+
54
29
  .use-cobalt-dark-theme {
55
- [data-theme~="cobalt-popover"] {
30
+ .cobalt-popover {
56
31
  box-shadow: 0 0 0 1px theme("colors.outline");
32
+ }
57
33
 
58
- &[data-placement^="top"] > .tippy-arrow {
59
- bottom: -1px;
60
-
61
- &::before {
62
- border-top-color: theme("colors.outline") !important;
63
- }
64
- }
65
-
66
- &[data-placement^="bottom"] > .tippy-arrow {
67
- top: -1px;
68
-
69
- &::before {
70
- border-bottom-color: theme("colors.outline") !important;
71
- }
72
- }
73
-
74
- &[data-placement^="left"] > .tippy-arrow {
75
- right: -1px;
34
+ .cobalt-popover__arrow {
35
+ fill: theme("colors.surfaceBright");
36
+ stroke: theme("colors.outline");
37
+ stroke-width: 1;
38
+ }
39
+ }
76
40
 
77
- &::before {
78
- border-left-color: theme("colors.outline") !important;
79
- }
80
- }
41
+ .cobalt-popover[data-theme~="tooltip"] {
42
+ @apply c-py-2xs c-px-xs c-rounded c-text-body-sm;
81
43
 
82
- &[data-placement^="right"] > .tippy-arrow {
83
- left: -1px;
44
+ min-width: auto;
84
45
 
85
- &::before {
86
- border-right-color: theme("colors.outline") !important;
87
- }
88
- }
89
- }
46
+ box-shadow: elevation(), elevation(md);
90
47
  }
@@ -48,6 +48,13 @@
48
48
  }
49
49
  }
50
50
 
51
+ a.cobalt-progressBanner {
52
+ @apply c-state-interactive;
53
+
54
+ color: inherit;
55
+ text-decoration: none;
56
+ }
57
+
51
58
  @keyframes progressBanner__animation--zoom-in {
52
59
  0% {
53
60
  transform: scale(0, 0);
@@ -1,5 +1,5 @@
1
1
  .cobalt-sidepanel {
2
- @apply c-bg-surface;
2
+ @apply c-bg-surface c-rounded-tl-xl c-rounded-bl-xl;
3
3
 
4
4
  position: fixed;
5
5
 
@@ -16,8 +16,8 @@
16
16
  transform: translateX(100%);
17
17
 
18
18
  transition-duration: 250ms;
19
- transition-timing-function: ease-out;
20
- transition-property: transform;
19
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
20
+ transition-property: transform, box-shadow;
21
21
 
22
22
  will-change: transform;
23
23
 
@@ -58,3 +58,9 @@
58
58
  .cobalt-sidepanel--show + .cobalt-sidepanel-overlay {
59
59
  opacity: 1;
60
60
  }
61
+
62
+ .cobalt-sidepanel__close {
63
+ @apply c--mr-xs;
64
+ min-height: 32px;
65
+ min-width: 32px;
66
+ }
@@ -60,6 +60,7 @@ export type ModalPropsType = {
60
60
  * Always take the full height of the screen
61
61
  */
62
62
  fullHeight?: boolean;
63
+ fullScreen?: boolean;
63
64
  /**
64
65
  * Remove the modal from the DOM on hidden (enabled by default)
65
66
  */
@@ -0,0 +1,2 @@
1
+ import type { PopoverPropsType } from ".";
2
+ export declare const DesktopPopover: ({ targetRef, children, isOpen, onOpenChange, ...rest }: PopoverPropsType) => import("react").ReactNode;
@@ -0,0 +1,13 @@
1
+ import React, { type ReactElement, type Ref } from "react";
2
+ import { type PopoverPropsType } from ".";
3
+ type RefableElement = ReactElement & {
4
+ ref?: Ref<HTMLElement>;
5
+ };
6
+ export type PopoverWrapperPropsType = Omit<PopoverPropsType, "targetRef" | "children" | "isOpen"> & {
7
+ content: React.ReactNode;
8
+ disabled?: boolean;
9
+ isOpenByDefault?: boolean;
10
+ children: RefableElement;
11
+ };
12
+ export declare function PopoverWrapper({ content, children, trigger, onOpenChange, isOpenByDefault, disabled, responsive, ...popoverProps }: PopoverWrapperPropsType): import("react/jsx-runtime").JSX.Element;
13
+ export {};
@@ -0,0 +1,3 @@
1
+ import { type PopoverWrapperPropsType } from "./PopoverWrapper";
2
+ export type TooltipWrapperPropsType = Omit<PopoverWrapperPropsType, "responsive">;
3
+ export declare function TooltipWrapper({ content, children, ...popoverProps }: TooltipWrapperPropsType): import("react/jsx-runtime").JSX.Element;
@@ -1,29 +1,18 @@
1
- import { type TippyProps } from "@tippyjs/react";
2
1
  import type React from "react";
3
- export type PopoverPropsType = {
4
- children?: React.ReactNode;
2
+ import type { DesktopPopoverCoreRefs, PopoverConfig } from "./useDesktopPopoverCore";
3
+ type DesktopPopoverRenderProps = {
4
+ refs: DesktopPopoverCoreRefs;
5
+ getReferenceProps: ReturnType<typeof import("@floating-ui/react").useInteractions>["getReferenceProps"];
6
+ renderFloating: (content: React.ReactNode) => React.ReactNode;
7
+ };
8
+ export type DesktopPopoverChildren = React.ReactNode | ((props: DesktopPopoverRenderProps) => React.ReactNode);
9
+ export type PopoverPropsType = PopoverConfig & {
10
+ children?: DesktopPopoverChildren;
5
11
  isOpen: boolean;
6
- close: () => void;
12
+ onOpenChange?: (open: boolean) => void;
7
13
  "aria-label"?: string;
8
- bodySpacing?: boolean;
9
- onShow?: () => void;
10
- onHidden?: () => void;
11
- targetRef: TippyProps["reference"];
12
- arrow?: boolean;
13
- placement?: TippyProps["placement"];
14
- flip?: boolean;
15
- theme?: string;
16
- distance?: number;
17
- zIndex?: number;
18
- appendToBody?: boolean;
19
- fitContent?: boolean;
20
- /**
21
- * __Only for desktop popover__
22
- *
23
- * Allow to render the content only when the popover is mounted in the DOM
24
- * Useful to render async content in the popover
25
- */
26
- lazy?: boolean;
14
+ targetRef: React.RefObject<Element | null> | Element | null;
15
+ responsive?: boolean;
27
16
  };
28
- declare const Popover: ({ isOpen, targetRef, close, "aria-label": ariaLabel, children, bodySpacing, onShow, onHidden, arrow, placement, flip, theme, distance, zIndex, appendToBody, fitContent, lazy, }: PopoverPropsType) => import("react/jsx-runtime").JSX.Element;
17
+ declare const Popover: ({ arrow, placement, bodySpacing, appendToBody, fitContent, responsive, ...restProps }: PopoverPropsType) => import("react/jsx-runtime").JSX.Element;
29
18
  export default Popover;
@@ -0,0 +1,4 @@
1
+ type CloseFn = () => void;
2
+ export declare const registerPopover: (close: CloseFn) => () => void;
3
+ export declare const hideAllPopovers: () => void;
4
+ export {};
@@ -0,0 +1,9 @@
1
+ export declare const tooltipConfig: {
2
+ trigger: "mouseenter";
3
+ interactive: false;
4
+ tooltip: true;
5
+ arrow: true;
6
+ placement: "top";
7
+ bodySpacing: false;
8
+ appendToBody: true;
9
+ };
@@ -0,0 +1,44 @@
1
+ import { type Placement } from "@floating-ui/react";
2
+ import type React from "react";
3
+ export type PopoverConfig = {
4
+ placement?: Placement;
5
+ flip?: boolean;
6
+ arrow?: boolean;
7
+ theme?: string;
8
+ tooltip?: boolean;
9
+ lightMode?: boolean;
10
+ zIndex?: number;
11
+ appendToBody?: boolean;
12
+ withBorder?: boolean;
13
+ fitContent?: boolean;
14
+ trigger?: "click" | "mouseenter";
15
+ interactive?: boolean;
16
+ delay?: number | {
17
+ open?: number;
18
+ close?: number;
19
+ };
20
+ offset?: [number, number];
21
+ bodySpacing?: boolean;
22
+ onShow?: () => void;
23
+ onHidden?: () => void;
24
+ };
25
+ export type UseDesktopPopoverCoreOptions = Omit<PopoverConfig, "trigger"> & {
26
+ isOpen: boolean;
27
+ onOpenChange?: (open: boolean) => void;
28
+ referenceElement: Element | null;
29
+ trigger?: "click" | "mouseenter" | "manual";
30
+ ariaLabel?: string;
31
+ getFloatingExtraProps?: () => React.HTMLAttributes<HTMLElement>;
32
+ };
33
+ export type DesktopPopoverCoreRefs = {
34
+ setReference: (node: Element | null) => void;
35
+ setFloating: (node: HTMLElement | null) => void;
36
+ };
37
+ type UseDesktopPopoverCoreReturnType = {
38
+ refs: DesktopPopoverCoreRefs;
39
+ getReferenceProps: ReturnType<typeof import("@floating-ui/react").useInteractions>["getReferenceProps"];
40
+ renderFloating: (content: React.ReactNode) => React.ReactNode;
41
+ isMounted: boolean;
42
+ };
43
+ export declare function useDesktopPopoverCore({ isOpen, onOpenChange, referenceElement, placement, flip, tooltip, arrow: showArrow, theme, zIndex, appendToBody, fitContent, withBorder, trigger, interactive, delay, offset, bodySpacing, ariaLabel, onShow, onHidden, getFloatingExtraProps, }: UseDesktopPopoverCoreOptions): UseDesktopPopoverCoreReturnType;
44
+ export {};
@@ -0,0 +1,17 @@
1
+ import type React from "react";
2
+ import type { UseDesktopPopoverCoreOptions } from "./useDesktopPopoverCore";
3
+ type SingletonItem = {
4
+ content: React.ReactNode;
5
+ };
6
+ type SingletonReferenceProps = React.HTMLAttributes<HTMLElement>;
7
+ type SingletonOptions = Omit<UseDesktopPopoverCoreOptions, "isOpen" | "onOpenChange" | "referenceElement" | "trigger" | "getFloatingExtraProps"> & {
8
+ trigger?: "click" | "mouseenter";
9
+ gracePeriod?: number;
10
+ };
11
+ export declare function useSingletonPopover({ trigger, delay, interactive, gracePeriod, ...options }: SingletonOptions): {
12
+ getReferenceProps: (item: SingletonItem, userProps?: SingletonReferenceProps) => Record<string, unknown>;
13
+ renderFloating: () => React.ReactNode;
14
+ close: () => void;
15
+ isOpen: boolean;
16
+ };
17
+ export {};
@@ -9,6 +9,7 @@ type ProgressBannerPropsType = {
9
9
  animated?: boolean;
10
10
  fullWidth?: boolean;
11
11
  className?: string;
12
+ href?: string;
12
13
  };
13
- export declare function ProgressBanner({ progress, title, description, completed, animated, fullWidth, className, }: ProgressBannerPropsType): import("react/jsx-runtime").JSX.Element;
14
+ export declare function ProgressBanner({ progress, title, description, completed, animated, fullWidth, className, href, }: ProgressBannerPropsType): import("react/jsx-runtime").JSX.Element;
14
15
  export {};
@@ -9,9 +9,10 @@ type SidepanelPropsType = React.PropsWithChildren<{
9
9
  close?: () => void;
10
10
  width?: ComponentProps<typeof Fixed>["width"];
11
11
  withDesktopOverlay?: boolean;
12
+ onPointerDownOutside?: () => void;
12
13
  }>;
13
14
  export declare const Sidepanel: {
14
- ({ isOpen, title, close, withDesktopOverlay, width, children, }: SidepanelPropsType): import("react/jsx-runtime").JSX.Element;
15
+ ({ isOpen, title, close, withDesktopOverlay, onPointerDownOutside, width, children, }: SidepanelPropsType): import("react/jsx-runtime").JSX.Element;
15
16
  displayName: string;
16
17
  } & {
17
18
  Footer: (_props: SidepanelFooterPropsType) => null;
@@ -50,6 +50,12 @@ export { default as PhotoDropzone } from "./components/PhotoDropzone";
50
50
  export { Pill, PillGroup } from "./components/Pill";
51
51
  export { PlateNumber } from "./components/PlateNumber";
52
52
  export { default as Popover } from "./components/Popover";
53
+ export { PopoverWrapper, type PopoverWrapperPropsType, } from "./components/Popover/PopoverWrapper";
54
+ export { hideAllPopovers } from "./components/Popover/popoverRegistry";
55
+ export { TooltipWrapper } from "./components/Popover/TooltipWrapper";
56
+ export { tooltipConfig } from "./components/Popover/tooltipConfig";
57
+ export type { PopoverConfig } from "./components/Popover/useDesktopPopoverCore";
58
+ export { useSingletonPopover } from "./components/Popover/useSingletonPopover";
53
59
  export { PriceTable, PriceTableRow } from "./components/PriceTable";
54
60
  export { ProgressBanner } from "./components/ProgressBanner";
55
61
  export { ProgressBar } from "./components/ProgressBar";
@@ -1,23 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import Tippy from '@tippyjs/react';
3
- import { sticky } from 'tippy.js';
4
-
5
- const DayTooltip = (props) => {
6
- return (jsx(Tippy, { animation: "fade",
7
- arrow: true,
8
- interactive: true,
9
- interactiveBorder: 10,
10
- placement: "top",
11
- theme: "cobalt-popover range-picker",
12
- delay: [0, 0],
13
- duration: [0, 0],
14
- maxWidth: 500,
15
- offset: [0, 8],
16
- sticky: true,
17
- plugins: [sticky],
18
- appendTo: document.body,
19
- ...props }));
20
- };
21
-
22
- export { DayTooltip as default };
23
- //# sourceMappingURL=DayTooltip.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DayTooltip.js","sources":["../../../../src/components/Calendar/CalendarRangePicker/DayTooltip.tsx"],"sourcesContent":["import Tippy, { type TippyProps } from \"@tippyjs/react\"\nimport { sticky } from \"tippy.js\"\n\nconst DayTooltip = (props: TippyProps) => {\n return (\n <Tippy\n {...{\n animation: \"fade\",\n arrow: true,\n interactive: true,\n interactiveBorder: 10,\n placement: \"top\",\n theme: \"cobalt-popover range-picker\",\n delay: [0, 0],\n duration: [0, 0],\n maxWidth: 500,\n offset: [0, 8],\n sticky: true,\n plugins: [sticky],\n appendTo: document.body,\n ...props,\n }}\n />\n )\n}\n\nexport default DayTooltip\n"],"names":["_jsx"],"mappings":";;;;AAGA,MAAM,UAAU,GAAG,CAAC,KAAiB,KAAI;AACvC,IAAA,QACEA,GAAC,CAAA,KAAK,EAEF,EAAA,SAAS,EAAE,MAAM;AACjB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,iBAAiB,EAAE,EAAE;AACrB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,KAAK,EAAE,6BAA6B;AACpC,QAAA,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,QAAA,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAChB,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,QAAA,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,GAAG,KAAK,EAEV,CAAA,EACH;AACH;;;;"}
@@ -1,9 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import Tippy from '@tippyjs/react';
3
-
4
- const LazyTippy = (props) => {
5
- return props.visible ? jsx(Tippy, { ...props }) : null;
6
- };
7
-
8
- export { LazyTippy as default };
9
- //# sourceMappingURL=LazyTippy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LazyTippy.js","sources":["../../../src/components/Popover/LazyTippy.tsx"],"sourcesContent":["// Will only render the `content` or `render` elements if the tippy is mounted to the DOM.\n// Replace <Tippy /> with <LazyTippy /> component and it should work the same.\n\nimport Tippy, { type TippyProps } from \"@tippyjs/react\"\n\nconst LazyTippy = (props: TippyProps) => {\n return props.visible ? <Tippy {...props} /> : null\n}\n\nexport default LazyTippy\n"],"names":["_jsx"],"mappings":";;;AAKA,MAAM,SAAS,GAAG,CAAC,KAAiB,KAAI;AACtC,IAAA,OAAO,KAAK,CAAC,OAAO,GAAGA,GAAA,CAAC,KAAK,EAAA,EAAA,GAAK,KAAK,EAAI,CAAA,GAAG,IAAI,CAAA;AACpD;;;;"}
@@ -1,6 +0,0 @@
1
- import type React from "react";
2
- declare const AsyncComponent: ({ children, timeout, }: {
3
- children?: React.ReactNode;
4
- timeout?: number;
5
- }) => import("react/jsx-runtime").JSX.Element;
6
- export default AsyncComponent;
@@ -1,3 +0,0 @@
1
- import { type TippyProps } from "@tippyjs/react";
2
- declare const DayTooltip: (props: TippyProps) => import("react/jsx-runtime").JSX.Element;
3
- export default DayTooltip;
@@ -1,3 +0,0 @@
1
- import { type TippyProps } from "@tippyjs/react";
2
- declare const LazyTippy: (props: TippyProps) => import("react/jsx-runtime").JSX.Element | null;
3
- export default LazyTippy;