@cerberus-design/react 0.6.1-next-1315bf2 → 0.6.1-next-8062b70

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 (66) hide show
  1. package/build/legacy/_tsup-dts-rollup.d.ts +78 -0
  2. package/build/legacy/{chunk-5RA3ZIXA.js → chunk-5GEC53G7.js} +5 -5
  3. package/build/legacy/{chunk-3TYUA4C7.js → chunk-6TXQZ3PB.js} +2 -2
  4. package/build/legacy/{chunk-SCAVVE6E.js → chunk-C45DY4VE.js} +2 -1
  5. package/build/legacy/chunk-C45DY4VE.js.map +1 -0
  6. package/build/legacy/{chunk-JJGZRBIR.js → chunk-CU7HXAKM.js} +4 -4
  7. package/build/legacy/chunk-G3JEWPLM.js +29 -0
  8. package/build/legacy/chunk-G3JEWPLM.js.map +1 -0
  9. package/build/legacy/{chunk-VLVKNEA5.js → chunk-TAZI77TP.js} +2 -2
  10. package/build/legacy/{chunk-YRUUO4AP.js → chunk-UZIN7UOS.js} +19 -38
  11. package/build/legacy/chunk-UZIN7UOS.js.map +1 -0
  12. package/build/legacy/chunk-WKSC2WCV.js +202 -0
  13. package/build/legacy/chunk-WKSC2WCV.js.map +1 -0
  14. package/build/legacy/components/Input.js +4 -4
  15. package/build/legacy/components/Label.js +2 -2
  16. package/build/legacy/components/ModalIcon.js +7 -0
  17. package/build/legacy/components/ModalIcon.js.map +1 -0
  18. package/build/legacy/components/Toggle.js +3 -3
  19. package/build/legacy/config/cerbIcons.js +1 -1
  20. package/build/legacy/config/defineIcons.js +2 -2
  21. package/build/legacy/context/confirm-modal.js +4 -3
  22. package/build/legacy/context/prompt-modal.js +20 -0
  23. package/build/legacy/context/prompt-modal.js.map +1 -0
  24. package/build/legacy/index.js +24 -14
  25. package/build/modern/_tsup-dts-rollup.d.ts +78 -0
  26. package/build/modern/{chunk-5RA3ZIXA.js → chunk-5GEC53G7.js} +5 -5
  27. package/build/modern/{chunk-3TYUA4C7.js → chunk-6TXQZ3PB.js} +2 -2
  28. package/build/modern/{chunk-SCAVVE6E.js → chunk-C45DY4VE.js} +2 -1
  29. package/build/modern/chunk-C45DY4VE.js.map +1 -0
  30. package/build/modern/{chunk-JJGZRBIR.js → chunk-CU7HXAKM.js} +4 -4
  31. package/build/modern/chunk-G3JEWPLM.js +29 -0
  32. package/build/modern/chunk-G3JEWPLM.js.map +1 -0
  33. package/build/modern/{chunk-VLVKNEA5.js → chunk-TAZI77TP.js} +2 -2
  34. package/build/modern/{chunk-BVK6GEDZ.js → chunk-X2GKC3IU.js} +19 -38
  35. package/build/modern/chunk-X2GKC3IU.js.map +1 -0
  36. package/build/modern/chunk-YHJTKBVE.js +200 -0
  37. package/build/modern/chunk-YHJTKBVE.js.map +1 -0
  38. package/build/modern/components/Input.js +4 -4
  39. package/build/modern/components/Label.js +2 -2
  40. package/build/modern/components/ModalIcon.js +7 -0
  41. package/build/modern/components/ModalIcon.js.map +1 -0
  42. package/build/modern/components/Toggle.js +3 -3
  43. package/build/modern/config/cerbIcons.js +1 -1
  44. package/build/modern/config/defineIcons.js +2 -2
  45. package/build/modern/context/confirm-modal.js +4 -3
  46. package/build/modern/context/prompt-modal.js +20 -0
  47. package/build/modern/context/prompt-modal.js.map +1 -0
  48. package/build/modern/index.js +24 -14
  49. package/package.json +2 -2
  50. package/src/components/ModalIcon.tsx +28 -0
  51. package/src/config/cerbIcons.ts +2 -0
  52. package/src/context/confirm-modal.tsx +20 -43
  53. package/src/context/prompt-modal.tsx +231 -0
  54. package/src/index.ts +2 -0
  55. package/build/legacy/chunk-SCAVVE6E.js.map +0 -1
  56. package/build/legacy/chunk-YRUUO4AP.js.map +0 -1
  57. package/build/modern/chunk-BVK6GEDZ.js.map +0 -1
  58. package/build/modern/chunk-SCAVVE6E.js.map +0 -1
  59. /package/build/legacy/{chunk-5RA3ZIXA.js.map → chunk-5GEC53G7.js.map} +0 -0
  60. /package/build/legacy/{chunk-3TYUA4C7.js.map → chunk-6TXQZ3PB.js.map} +0 -0
  61. /package/build/legacy/{chunk-JJGZRBIR.js.map → chunk-CU7HXAKM.js.map} +0 -0
  62. /package/build/legacy/{chunk-VLVKNEA5.js.map → chunk-TAZI77TP.js.map} +0 -0
  63. /package/build/modern/{chunk-5RA3ZIXA.js.map → chunk-5GEC53G7.js.map} +0 -0
  64. /package/build/modern/{chunk-3TYUA4C7.js.map → chunk-6TXQZ3PB.js.map} +0 -0
  65. /package/build/modern/{chunk-JJGZRBIR.js.map → chunk-CU7HXAKM.js.map} +0 -0
  66. /package/build/modern/{chunk-VLVKNEA5.js.map → chunk-TAZI77TP.js.map} +0 -0
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  $cerberusIcons,
3
3
  defineIcons
4
- } from "../chunk-3TYUA4C7.js";
5
- import "../chunk-SCAVVE6E.js";
4
+ } from "../chunk-6TXQZ3PB.js";
5
+ import "../chunk-C45DY4VE.js";
6
6
  export {
7
7
  $cerberusIcons,
8
8
  defineIcons
@@ -2,13 +2,14 @@
2
2
  import {
3
3
  ConfirmModal,
4
4
  useConfirmModal
5
- } from "../chunk-YRUUO4AP.js";
5
+ } from "../chunk-UZIN7UOS.js";
6
6
  import "../chunk-4CAT3FHV.js";
7
7
  import "../chunk-2ATICEW3.js";
8
8
  import "../chunk-4O4QFF4S.js";
9
+ import "../chunk-G3JEWPLM.js";
9
10
  import "../chunk-KESKDLX6.js";
10
- import "../chunk-3TYUA4C7.js";
11
- import "../chunk-SCAVVE6E.js";
11
+ import "../chunk-6TXQZ3PB.js";
12
+ import "../chunk-C45DY4VE.js";
12
13
  export {
13
14
  ConfirmModal,
14
15
  useConfirmModal
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import {
3
+ PromptModal,
4
+ usePromptModal
5
+ } from "../chunk-WKSC2WCV.js";
6
+ import "../chunk-4CAT3FHV.js";
7
+ import "../chunk-2ATICEW3.js";
8
+ import "../chunk-5GEC53G7.js";
9
+ import "../chunk-CU7HXAKM.js";
10
+ import "../chunk-4O4QFF4S.js";
11
+ import "../chunk-ZAU4JVLL.js";
12
+ import "../chunk-G3JEWPLM.js";
13
+ import "../chunk-KESKDLX6.js";
14
+ import "../chunk-6TXQZ3PB.js";
15
+ import "../chunk-C45DY4VE.js";
16
+ export {
17
+ PromptModal,
18
+ usePromptModal
19
+ };
20
+ //# sourceMappingURL=prompt-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,3 +1,10 @@
1
+ import {
2
+ PromptModal,
3
+ usePromptModal
4
+ } from "./chunk-WKSC2WCV.js";
5
+ import {
6
+ TabPanel
7
+ } from "./chunk-67S42J4B.js";
1
8
  import {
2
9
  Tag
3
10
  } from "./chunk-EVEEQRH6.js";
@@ -6,11 +13,14 @@ import {
6
13
  } from "./chunk-TCO46FK7.js";
7
14
  import {
8
15
  Toggle
9
- } from "./chunk-VLVKNEA5.js";
16
+ } from "./chunk-TAZI77TP.js";
10
17
  import {
11
18
  ConfirmModal,
12
19
  useConfirmModal
13
- } from "./chunk-YRUUO4AP.js";
20
+ } from "./chunk-UZIN7UOS.js";
21
+ import {
22
+ NavMenuLink
23
+ } from "./chunk-6DIGPXAD.js";
14
24
  import {
15
25
  NavMenuList,
16
26
  getPosition
@@ -34,9 +44,6 @@ import {
34
44
  import {
35
45
  TabList
36
46
  } from "./chunk-X2JMXTBH.js";
37
- import {
38
- TabPanel
39
- } from "./chunk-67S42J4B.js";
40
47
  import {
41
48
  useToggle
42
49
  } from "./chunk-SCQVXJBT.js";
@@ -58,20 +65,20 @@ import {
58
65
  } from "./chunk-SLHX5K6I.js";
59
66
  import {
60
67
  Input
61
- } from "./chunk-5RA3ZIXA.js";
68
+ } from "./chunk-5GEC53G7.js";
62
69
  import {
63
70
  Label
64
- } from "./chunk-JJGZRBIR.js";
71
+ } from "./chunk-CU7HXAKM.js";
72
+ import {
73
+ Show
74
+ } from "./chunk-4O4QFF4S.js";
65
75
  import {
66
76
  Field,
67
77
  useFieldContext
68
78
  } from "./chunk-ZAU4JVLL.js";
69
79
  import {
70
- NavMenuLink
71
- } from "./chunk-6DIGPXAD.js";
72
- import {
73
- Show
74
- } from "./chunk-4O4QFF4S.js";
80
+ ModalIcon
81
+ } from "./chunk-G3JEWPLM.js";
75
82
  import "./chunk-55J6XMHW.js";
76
83
  import {
77
84
  createNavTriggerProps
@@ -90,8 +97,8 @@ import {
90
97
  import {
91
98
  $cerberusIcons,
92
99
  defineIcons
93
- } from "./chunk-3TYUA4C7.js";
94
- import "./chunk-SCAVVE6E.js";
100
+ } from "./chunk-6TXQZ3PB.js";
101
+ import "./chunk-C45DY4VE.js";
95
102
  import {
96
103
  MODE_KEY,
97
104
  THEME_KEY,
@@ -111,11 +118,13 @@ export {
111
118
  Input,
112
119
  Label,
113
120
  MODE_KEY,
121
+ ModalIcon,
114
122
  NavMenu,
115
123
  NavMenuLink,
116
124
  NavMenuList,
117
125
  NavMenuTrigger,
118
126
  Portal,
127
+ PromptModal,
119
128
  Radio,
120
129
  Show,
121
130
  THEME_KEY,
@@ -136,6 +145,7 @@ export {
136
145
  useFeatureFlags,
137
146
  useFieldContext,
138
147
  useNavMenuContext,
148
+ usePromptModal,
139
149
  useTabsContext,
140
150
  useTabsKeyboardNavigation,
141
151
  useTheme,
@@ -13,6 +13,7 @@ import type { InputHTMLAttributes } from 'react';
13
13
  import { JSX as JSX_2 } from 'react/jsx-runtime';
14
14
  import type { KeyboardEventHandler } from 'react';
15
15
  import { label } from '@cerberus/styled-system/recipes';
16
+ import { ModalIconVariantProps } from '@cerberus-design/styled-system/recipes';
16
17
  import { MutableRefObject } from 'react';
17
18
  import type { Pretty } from '@cerberus-design/styled-system/types';
18
19
  import { PropsWithChildren } from 'react';
@@ -117,6 +118,7 @@ export { DefaultThemes as DefaultThemes_alias_1 }
117
118
 
118
119
  export declare interface DefinedIcons {
119
120
  confirmModal?: CarbonIconType | ElementType;
121
+ promptModal?: CarbonIconType | ElementType;
120
122
  invalid: CarbonIconType | ElementType;
121
123
  toggleChecked?: CarbonIconType | ElementType;
122
124
  }
@@ -319,6 +321,18 @@ declare type LabelRecipeProps = RecipeVariantProps<typeof label>;
319
321
  export { LabelRecipeProps }
320
322
  export { LabelRecipeProps as LabelRecipeProps_alias_1 }
321
323
 
324
+ declare function ModalIcon(props: PropsWithChildren<ModalIconProps>): JSX_2.Element;
325
+ export { ModalIcon }
326
+ export { ModalIcon as ModalIcon_alias_1 }
327
+
328
+ declare type ModalIconBaseProps = HTMLAttributes<HTMLDivElement>;
329
+ export { ModalIconBaseProps }
330
+ export { ModalIconBaseProps as ModalIconBaseProps_alias_1 }
331
+
332
+ declare type ModalIconProps = ModalIconBaseProps & ModalIconVariantProps;
333
+ export { ModalIconProps }
334
+ export { ModalIconProps as ModalIconProps_alias_1 }
335
+
322
336
  declare const MODE_KEY = "cerberus-mode";
323
337
  export { MODE_KEY }
324
338
  export { MODE_KEY as MODE_KEY_alias_1 }
@@ -436,6 +450,51 @@ declare type Positions = 'top' | 'right' | 'bottom' | 'left';
436
450
  export { Positions }
437
451
  export { Positions as Positions_alias_1 }
438
452
 
453
+ /**
454
+ * Provides a prompt modal to the app.
455
+ * @example
456
+ * ```tsx
457
+ * // Wrap the Provider around the root of the feature.
458
+ * <PromptModal>
459
+ * <SomeFeatureSection />
460
+ * </PromptModal>
461
+ *
462
+ * // Use the hook to show the prompt modal.
463
+ * const prompt = usePromptModal()
464
+ *
465
+ * const handleClick = useCallback(async () => {
466
+ * const accepted = await prompt.show({
467
+ * kind: 'destructive',
468
+ * heading: 'Delete channel?',
469
+ * description:
470
+ * 'This will permanently delete a channel on your account. There is no going back.',
471
+ * key: CHANNEL_NAME,
472
+ * actionText: 'Yes, delete channel',
473
+ * cancelText: 'No, cancel',
474
+ * })
475
+ * // do something with accepted
476
+ * }, [prompt])
477
+ * ```
478
+ */
479
+ declare function PromptModal(props: PropsWithChildren<PromptModalProviderProps>): JSX_2.Element;
480
+ export { PromptModal }
481
+ export { PromptModal as PromptModal_alias_1 }
482
+
483
+ declare interface PromptModalProviderProps {
484
+ }
485
+ export { PromptModalProviderProps }
486
+ export { PromptModalProviderProps as PromptModalProviderProps_alias_1 }
487
+
488
+ declare interface PromptModalValue {
489
+ show: (options: ShowPromptModalOptions) => Promise<string>;
490
+ }
491
+ export { PromptModalValue }
492
+ export { PromptModalValue as PromptModalValue_alias_1 }
493
+
494
+ declare type PromptShowResult = ((value: string | PromiseLike<string>) => void) | null;
495
+ export { PromptShowResult }
496
+ export { PromptShowResult as PromptShowResult_alias_1 }
497
+
439
498
  declare function Radio(props: PropsWithChildren<RadioProps>): JSX_2.Element;
440
499
  export { Radio }
441
500
  export { Radio as Radio_alias_1 }
@@ -482,6 +541,21 @@ declare interface ShowConfirmModalOptions {
482
541
  export { ShowConfirmModalOptions }
483
542
  export { ShowConfirmModalOptions as ShowConfirmModalOptions_alias_1 }
484
543
 
544
+ /**
545
+ * This module provides a context and hook for the prompt modal.
546
+ * @module
547
+ */
548
+ declare interface ShowPromptModalOptions {
549
+ kind?: 'destructive' | 'non-destructive';
550
+ heading: string;
551
+ description?: string;
552
+ key: string;
553
+ actionText: string;
554
+ cancelText: string;
555
+ }
556
+ export { ShowPromptModalOptions }
557
+ export { ShowPromptModalOptions as ShowPromptModalOptions_alias_1 }
558
+
485
559
  declare interface ShowProps {
486
560
  when: boolean | null | undefined;
487
561
  fallback?: ReactNode;
@@ -739,6 +813,10 @@ declare function useNavMenuContext(): NavMenuContextValue;
739
813
  export { useNavMenuContext }
740
814
  export { useNavMenuContext as useNavMenuContext_alias_1 }
741
815
 
816
+ declare function usePromptModal(): PromptModalValue;
817
+ export { usePromptModal }
818
+ export { usePromptModal as usePromptModal_alias_1 }
819
+
742
820
  declare function useTabsContext(): TabsContextValue;
743
821
  export { useTabsContext }
744
822
  export { useTabsContext as useTabsContext_alias_1 }
@@ -1,12 +1,12 @@
1
- import {
2
- useFieldContext
3
- } from "./chunk-ZAU4JVLL.js";
4
1
  import {
5
2
  Show
6
3
  } from "./chunk-4O4QFF4S.js";
4
+ import {
5
+ useFieldContext
6
+ } from "./chunk-ZAU4JVLL.js";
7
7
  import {
8
8
  $cerberusIcons
9
- } from "./chunk-3TYUA4C7.js";
9
+ } from "./chunk-6TXQZ3PB.js";
10
10
 
11
11
  // src/components/Input.tsx
12
12
  import { input } from "@cerberus/styled-system/recipes";
@@ -39,4 +39,4 @@ function Input(props) {
39
39
  export {
40
40
  Input
41
41
  };
42
- //# sourceMappingURL=chunk-5RA3ZIXA.js.map
42
+ //# sourceMappingURL=chunk-5GEC53G7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  defaultIcons
3
- } from "./chunk-SCAVVE6E.js";
3
+ } from "./chunk-C45DY4VE.js";
4
4
 
5
5
  // src/config/defineIcons.ts
6
6
  function _validateIconsProperties(icons) {
@@ -24,4 +24,4 @@ export {
24
24
  defineIcons,
25
25
  $cerberusIcons
26
26
  };
27
- //# sourceMappingURL=chunk-3TYUA4C7.js.map
27
+ //# sourceMappingURL=chunk-6TXQZ3PB.js.map
@@ -6,6 +6,7 @@ import {
6
6
  } from "@cerberus/icons";
7
7
  var defaultIcons = {
8
8
  confirmModal: Information,
9
+ promptModal: Information,
9
10
  invalid: WarningFilled,
10
11
  toggleChecked: Checkmark
11
12
  };
@@ -13,4 +14,4 @@ var defaultIcons = {
13
14
  export {
14
15
  defaultIcons
15
16
  };
16
- //# sourceMappingURL=chunk-SCAVVE6E.js.map
17
+ //# sourceMappingURL=chunk-C45DY4VE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/cerbIcons.ts"],"sourcesContent":["import {\n Checkmark,\n Information,\n WarningFilled,\n type CarbonIconType,\n} from '@cerberus/icons'\nimport type { ElementType } from 'react'\n\nexport interface DefinedIcons {\n confirmModal?: CarbonIconType | ElementType\n promptModal?: CarbonIconType | ElementType\n invalid: CarbonIconType | ElementType\n toggleChecked?: CarbonIconType | ElementType\n}\n\nexport const defaultIcons: DefinedIcons = {\n confirmModal: Information,\n promptModal: Information,\n invalid: WarningFilled,\n toggleChecked: Checkmark,\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAUA,IAAM,eAA6B;AAAA,EACxC,cAAc;AAAA,EACd,aAAa;AAAA,EACb,SAAS;AAAA,EACT,eAAe;AACjB;","names":[]}
@@ -1,9 +1,9 @@
1
- import {
2
- useFieldContext
3
- } from "./chunk-ZAU4JVLL.js";
4
1
  import {
5
2
  Show
6
3
  } from "./chunk-4O4QFF4S.js";
4
+ import {
5
+ useFieldContext
6
+ } from "./chunk-ZAU4JVLL.js";
7
7
 
8
8
  // src/components/Label.tsx
9
9
  import { label } from "@cerberus/styled-system/recipes";
@@ -46,4 +46,4 @@ function Label(props) {
46
46
  export {
47
47
  Label
48
48
  };
49
- //# sourceMappingURL=chunk-JJGZRBIR.js.map
49
+ //# sourceMappingURL=chunk-CU7HXAKM.js.map
@@ -0,0 +1,29 @@
1
+ // src/components/ModalIcon.tsx
2
+ import { cx } from "@cerberus-design/styled-system/css";
3
+ import { circle } from "@cerberus-design/styled-system/patterns";
4
+ import {
5
+ modalIcon
6
+ } from "@cerberus-design/styled-system/recipes";
7
+ import { jsx } from "react/jsx-runtime";
8
+ function ModalIcon(props) {
9
+ const { palette, ...nativeProps } = props;
10
+ return /* @__PURE__ */ jsx(
11
+ "div",
12
+ {
13
+ ...nativeProps,
14
+ className: cx(
15
+ nativeProps.className,
16
+ modalIcon({
17
+ palette
18
+ }),
19
+ circle()
20
+ ),
21
+ children: props.children
22
+ }
23
+ );
24
+ }
25
+
26
+ export {
27
+ ModalIcon
28
+ };
29
+ //# sourceMappingURL=chunk-G3JEWPLM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/ModalIcon.tsx"],"sourcesContent":["import { cx } from '@cerberus-design/styled-system/css'\nimport { circle } from '@cerberus-design/styled-system/patterns'\nimport {\n modalIcon,\n type ModalIconVariantProps,\n} from '@cerberus-design/styled-system/recipes'\nimport type { HTMLAttributes, PropsWithChildren } from 'react'\n\nexport type ModalIconBaseProps = HTMLAttributes<HTMLDivElement>\nexport type ModalIconProps = ModalIconBaseProps & ModalIconVariantProps\n\nexport function ModalIcon(props: PropsWithChildren<ModalIconProps>) {\n const { palette, ...nativeProps } = props\n return (\n <div\n {...nativeProps}\n className={cx(\n nativeProps.className,\n modalIcon({\n palette,\n }),\n circle(),\n )}\n >\n {props.children}\n </div>\n )\n}\n"],"mappings":";AAAA,SAAS,UAAU;AACnB,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,OAEK;AASH;AAHG,SAAS,UAAU,OAA0C;AAClE,QAAM,EAAE,SAAS,GAAG,YAAY,IAAI;AACpC,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,UACR;AAAA,QACF,CAAC;AAAA,QACD,OAAO;AAAA,MACT;AAAA,MAEC,gBAAM;AAAA;AAAA,EACT;AAEJ;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-ZAU4JVLL.js";
4
4
  import {
5
5
  $cerberusIcons
6
- } from "./chunk-3TYUA4C7.js";
6
+ } from "./chunk-6TXQZ3PB.js";
7
7
 
8
8
  // src/components/Toggle.tsx
9
9
  import { cx } from "@cerberus-design/styled-system/css";
@@ -55,4 +55,4 @@ function Toggle(props) {
55
55
  export {
56
56
  Toggle
57
57
  };
58
- //# sourceMappingURL=chunk-VLVKNEA5.js.map
58
+ //# sourceMappingURL=chunk-TAZI77TP.js.map
@@ -7,12 +7,15 @@ import {
7
7
  import {
8
8
  Show
9
9
  } from "./chunk-4O4QFF4S.js";
10
+ import {
11
+ ModalIcon
12
+ } from "./chunk-G3JEWPLM.js";
10
13
  import {
11
14
  trapFocus
12
15
  } from "./chunk-JIZQFTW6.js";
13
16
  import {
14
17
  $cerberusIcons
15
- } from "./chunk-3TYUA4C7.js";
18
+ } from "./chunk-6TXQZ3PB.js";
16
19
 
17
20
  // src/context/confirm-modal.tsx
18
21
  import {
@@ -23,11 +26,9 @@ import {
23
26
  useRef,
24
27
  useState
25
28
  } from "react";
26
- import { css, cx } from "@cerberus-design/styled-system/css";
27
- import { circle, hstack, vstack } from "@cerberus-design/styled-system/patterns";
28
- import {
29
- confirmModal
30
- } from "@cerberus-design/styled-system/recipes";
29
+ import { css } from "@cerberus-design/styled-system/css";
30
+ import { hstack, vstack } from "@cerberus-design/styled-system/patterns";
31
+ import { modal } from "@cerberus-design/styled-system/recipes";
31
32
  import { jsx, jsxs } from "react/jsx-runtime";
32
33
  var ConfirmModalContext = createContext(null);
33
34
  function ConfirmModal(props) {
@@ -35,11 +36,12 @@ function ConfirmModal(props) {
35
36
  const resolveRef = useRef(null);
36
37
  const [content, setContent] = useState(null);
37
38
  const focusTrap = trapFocus(dialogRef);
39
+ const ConfirmIcon = $cerberusIcons.confirmModal;
38
40
  const palette = useMemo(
39
41
  () => content?.kind === "destructive" ? "danger" : "action",
40
42
  [content]
41
43
  );
42
- const styles = confirmModal({ palette });
44
+ const styles = modal();
43
45
  const handleChoice = useCallback((e) => {
44
46
  const target = e.currentTarget;
45
47
  if (target.value === "true") {
@@ -65,7 +67,7 @@ function ConfirmModal(props) {
65
67
  props.children,
66
68
  /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs("dialog", { className: styles.dialog, onKeyDown: focusTrap, ref: dialogRef, children: [
67
69
  /* @__PURE__ */ jsxs(
68
- "div",
70
+ "section",
69
71
  {
70
72
  className: vstack({
71
73
  alignItems: "flex-start",
@@ -73,7 +75,14 @@ function ConfirmModal(props) {
73
75
  mb: "8"
74
76
  }),
75
77
  children: [
76
- /* @__PURE__ */ jsx(ConfirmModalIcon, { palette }),
78
+ /* @__PURE__ */ jsx(
79
+ Show,
80
+ {
81
+ when: palette === "danger",
82
+ fallback: /* @__PURE__ */ jsx(ModalIcon, { palette: "action", children: /* @__PURE__ */ jsx(ConfirmIcon, { size: 24 }) }),
83
+ children: /* @__PURE__ */ jsx(ModalIcon, { palette: "danger", children: /* @__PURE__ */ jsx(ConfirmIcon, { size: 24 }) })
84
+ }
85
+ ),
77
86
  /* @__PURE__ */ jsx("h2", { className: styles.heading, children: content?.heading }),
78
87
  /* @__PURE__ */ jsx("p", { className: styles.description, children: content?.description })
79
88
  ]
@@ -83,7 +92,6 @@ function ConfirmModal(props) {
83
92
  "div",
84
93
  {
85
94
  className: hstack({
86
- justifyContent: "stretch",
87
95
  gap: "4"
88
96
  }),
89
97
  children: [
@@ -120,33 +128,6 @@ function ConfirmModal(props) {
120
128
  ] }) })
121
129
  ] });
122
130
  }
123
- function ConfirmModalIcon(props) {
124
- const InfoIcon = $cerberusIcons.confirmModal;
125
- return /* @__PURE__ */ jsx(
126
- Show,
127
- {
128
- when: props.palette === "danger",
129
- fallback: /* @__PURE__ */ jsx("div", { className: cx(confirmModal().icon, circle()), children: /* @__PURE__ */ jsx(InfoIcon, {}) }),
130
- children: /* @__PURE__ */ jsx(
131
- "div",
132
- {
133
- className: cx(
134
- confirmModal({
135
- palette: "danger"
136
- }).icon,
137
- circle({
138
- bgColor: "danger.surface.initial"
139
- })
140
- ),
141
- style: {
142
- color: "var(--cerberus-colors-danger-text-100)"
143
- },
144
- children: /* @__PURE__ */ jsx(InfoIcon, {})
145
- }
146
- )
147
- }
148
- );
149
- }
150
131
  function useConfirmModal() {
151
132
  const context = useContext(ConfirmModalContext);
152
133
  if (context === null) {
@@ -161,4 +142,4 @@ export {
161
142
  ConfirmModal,
162
143
  useConfirmModal
163
144
  };
164
- //# sourceMappingURL=chunk-BVK6GEDZ.js.map
145
+ //# sourceMappingURL=chunk-X2GKC3IU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/context/confirm-modal.tsx"],"sourcesContent":["'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n type MouseEvent,\n type PropsWithChildren,\n} from 'react'\nimport { Portal } from '../components/Portal'\nimport { Button } from '../components/Button'\nimport { css } from '@cerberus-design/styled-system/css'\nimport { hstack, vstack } from '@cerberus-design/styled-system/patterns'\nimport { $cerberusIcons } from '../config/defineIcons'\nimport { modal } from '@cerberus-design/styled-system/recipes'\nimport { trapFocus } from '../aria-helpers/trap-focus.aria'\nimport { ModalIcon } from '../components/ModalIcon'\nimport { Show } from '../components/Show'\n\n/**\n * This module provides a context and hook for the confirm modal.\n * @module\n */\n\nexport interface ShowConfirmModalOptions {\n kind?: 'destructive' | 'non-destructive'\n heading: string\n description?: string\n actionText: string\n cancelText: string\n}\nexport type ShowResult =\n | ((value: boolean | PromiseLike<boolean>) => void)\n | null\n\nexport interface ConfirmModalValue {\n show: (options: ShowConfirmModalOptions) => Promise<boolean>\n}\n\nconst ConfirmModalContext = createContext<ConfirmModalValue | null>(null)\n\nexport interface ConfirmModalProviderProps {}\n\n/**\n * Provides a confirm modal to the app.\n * @example\n * ```tsx\n * // Wrap the Provider around the root of the feature.\n * <ConfirmModal>\n * <SomeFeatureSection />\n * </ConfirmModal>\n *\n * // Use the hook to show the confirm modal.\n * const confirm = useConfirmModal()\n *\n * const handleClick = useCallback(async () => {\n * const userConsent = await confirm.show({\n * heading: 'Add new payment method?',\n * description:\n * 'This will add a new payment method to your account to be billed for future purchases.',\n * actionText: 'Yes, add payment method',\n * cancelText: 'No, cancel',\n * })\n * setConsent(userConsent)\n * }, [confirm])\n * ```\n */\nexport function ConfirmModal(\n props: PropsWithChildren<ConfirmModalProviderProps>,\n) {\n const dialogRef = useRef<HTMLDialogElement>(null)\n const resolveRef = useRef<ShowResult>(null)\n const [content, setContent] = useState<ShowConfirmModalOptions | null>(null)\n const focusTrap = trapFocus(dialogRef)\n const ConfirmIcon = $cerberusIcons.confirmModal\n\n const palette = useMemo(\n () => (content?.kind === 'destructive' ? 'danger' : 'action'),\n [content],\n )\n const styles = modal()\n\n const handleChoice = useCallback((e: MouseEvent<HTMLButtonElement>) => {\n const target = e.currentTarget as HTMLButtonElement\n if (target.value === 'true') {\n resolveRef.current?.(true)\n }\n resolveRef.current?.(false)\n dialogRef?.current?.close()\n }, [])\n\n const handleShow = useCallback((options: ShowConfirmModalOptions) => {\n return new Promise<boolean>((resolve) => {\n setContent({ ...options, kind: options.kind || 'non-destructive' })\n dialogRef?.current?.showModal()\n resolveRef.current = resolve\n })\n }, [])\n\n const value = useMemo(\n () => ({\n show: handleShow,\n }),\n [handleShow],\n )\n\n return (\n <ConfirmModalContext.Provider value={value}>\n {props.children}\n\n <Portal>\n <dialog className={styles.dialog} onKeyDown={focusTrap} ref={dialogRef}>\n <section\n className={vstack({\n alignItems: 'flex-start',\n gap: '4',\n mb: '8',\n })}\n >\n <Show\n when={palette === 'danger'}\n fallback={\n <ModalIcon palette=\"action\">\n <ConfirmIcon size={24} />\n </ModalIcon>\n }\n >\n <ModalIcon palette=\"danger\">\n <ConfirmIcon size={24} />\n </ModalIcon>\n </Show>\n <h2 className={styles.heading}>{content?.heading}</h2>\n <p className={styles.description}>{content?.description}</p>\n </section>\n\n <div\n className={hstack({\n gap: '4',\n })}\n >\n <Button\n autoFocus\n className={css({\n w: '1/2',\n })}\n name=\"confirm\"\n onClick={handleChoice}\n palette={palette}\n value=\"true\"\n >\n {content?.actionText}\n </Button>\n <Button\n className={css({\n w: '1/2',\n })}\n name=\"cancel\"\n onClick={handleChoice}\n usage=\"outlined\"\n value=\"false\"\n >\n {content?.cancelText}\n </Button>\n </div>\n </dialog>\n </Portal>\n </ConfirmModalContext.Provider>\n )\n}\n\nexport function useConfirmModal(): ConfirmModalValue {\n const context = useContext(ConfirmModalContext)\n if (context === null) {\n throw new Error(\n 'useConfirmModal must be used within a ConfirmModal Provider',\n )\n }\n return context\n}\n"],"mappings":"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","names":[]}