@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.
- package/build/legacy/_tsup-dts-rollup.d.ts +78 -0
- package/build/legacy/{chunk-5RA3ZIXA.js → chunk-5GEC53G7.js} +5 -5
- package/build/legacy/{chunk-3TYUA4C7.js → chunk-6TXQZ3PB.js} +2 -2
- package/build/legacy/{chunk-SCAVVE6E.js → chunk-C45DY4VE.js} +2 -1
- package/build/legacy/chunk-C45DY4VE.js.map +1 -0
- package/build/legacy/{chunk-JJGZRBIR.js → chunk-CU7HXAKM.js} +4 -4
- package/build/legacy/chunk-G3JEWPLM.js +29 -0
- package/build/legacy/chunk-G3JEWPLM.js.map +1 -0
- package/build/legacy/{chunk-VLVKNEA5.js → chunk-TAZI77TP.js} +2 -2
- package/build/legacy/{chunk-YRUUO4AP.js → chunk-UZIN7UOS.js} +19 -38
- package/build/legacy/chunk-UZIN7UOS.js.map +1 -0
- package/build/legacy/chunk-WKSC2WCV.js +202 -0
- package/build/legacy/chunk-WKSC2WCV.js.map +1 -0
- package/build/legacy/components/Input.js +4 -4
- package/build/legacy/components/Label.js +2 -2
- package/build/legacy/components/ModalIcon.js +7 -0
- package/build/legacy/components/ModalIcon.js.map +1 -0
- package/build/legacy/components/Toggle.js +3 -3
- package/build/legacy/config/cerbIcons.js +1 -1
- package/build/legacy/config/defineIcons.js +2 -2
- package/build/legacy/context/confirm-modal.js +4 -3
- package/build/legacy/context/prompt-modal.js +20 -0
- package/build/legacy/context/prompt-modal.js.map +1 -0
- package/build/legacy/index.js +24 -14
- package/build/modern/_tsup-dts-rollup.d.ts +78 -0
- package/build/modern/{chunk-5RA3ZIXA.js → chunk-5GEC53G7.js} +5 -5
- package/build/modern/{chunk-3TYUA4C7.js → chunk-6TXQZ3PB.js} +2 -2
- package/build/modern/{chunk-SCAVVE6E.js → chunk-C45DY4VE.js} +2 -1
- package/build/modern/chunk-C45DY4VE.js.map +1 -0
- package/build/modern/{chunk-JJGZRBIR.js → chunk-CU7HXAKM.js} +4 -4
- package/build/modern/chunk-G3JEWPLM.js +29 -0
- package/build/modern/chunk-G3JEWPLM.js.map +1 -0
- package/build/modern/{chunk-VLVKNEA5.js → chunk-TAZI77TP.js} +2 -2
- package/build/modern/{chunk-BVK6GEDZ.js → chunk-X2GKC3IU.js} +19 -38
- package/build/modern/chunk-X2GKC3IU.js.map +1 -0
- package/build/modern/chunk-YHJTKBVE.js +200 -0
- package/build/modern/chunk-YHJTKBVE.js.map +1 -0
- package/build/modern/components/Input.js +4 -4
- package/build/modern/components/Label.js +2 -2
- package/build/modern/components/ModalIcon.js +7 -0
- package/build/modern/components/ModalIcon.js.map +1 -0
- package/build/modern/components/Toggle.js +3 -3
- package/build/modern/config/cerbIcons.js +1 -1
- package/build/modern/config/defineIcons.js +2 -2
- package/build/modern/context/confirm-modal.js +4 -3
- package/build/modern/context/prompt-modal.js +20 -0
- package/build/modern/context/prompt-modal.js.map +1 -0
- package/build/modern/index.js +24 -14
- package/package.json +2 -2
- package/src/components/ModalIcon.tsx +28 -0
- package/src/config/cerbIcons.ts +2 -0
- package/src/context/confirm-modal.tsx +20 -43
- package/src/context/prompt-modal.tsx +231 -0
- package/src/index.ts +2 -0
- package/build/legacy/chunk-SCAVVE6E.js.map +0 -1
- package/build/legacy/chunk-YRUUO4AP.js.map +0 -1
- package/build/modern/chunk-BVK6GEDZ.js.map +0 -1
- package/build/modern/chunk-SCAVVE6E.js.map +0 -1
- /package/build/legacy/{chunk-5RA3ZIXA.js.map → chunk-5GEC53G7.js.map} +0 -0
- /package/build/legacy/{chunk-3TYUA4C7.js.map → chunk-6TXQZ3PB.js.map} +0 -0
- /package/build/legacy/{chunk-JJGZRBIR.js.map → chunk-CU7HXAKM.js.map} +0 -0
- /package/build/legacy/{chunk-VLVKNEA5.js.map → chunk-TAZI77TP.js.map} +0 -0
- /package/build/modern/{chunk-5RA3ZIXA.js.map → chunk-5GEC53G7.js.map} +0 -0
- /package/build/modern/{chunk-3TYUA4C7.js.map → chunk-6TXQZ3PB.js.map} +0 -0
- /package/build/modern/{chunk-JJGZRBIR.js.map → chunk-CU7HXAKM.js.map} +0 -0
- /package/build/modern/{chunk-VLVKNEA5.js.map → chunk-TAZI77TP.js.map} +0 -0
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
import {
|
|
3
3
|
ConfirmModal,
|
|
4
4
|
useConfirmModal
|
|
5
|
-
} from "../chunk-
|
|
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-
|
|
11
|
-
import "../chunk-
|
|
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":[]}
|
package/build/legacy/index.js
CHANGED
|
@@ -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-
|
|
16
|
+
} from "./chunk-TAZI77TP.js";
|
|
10
17
|
import {
|
|
11
18
|
ConfirmModal,
|
|
12
19
|
useConfirmModal
|
|
13
|
-
} from "./chunk-
|
|
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-
|
|
68
|
+
} from "./chunk-5GEC53G7.js";
|
|
62
69
|
import {
|
|
63
70
|
Label
|
|
64
|
-
} from "./chunk-
|
|
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
|
-
|
|
71
|
-
} from "./chunk-
|
|
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-
|
|
94
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
42
|
+
//# sourceMappingURL=chunk-5GEC53G7.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
defaultIcons
|
|
3
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
27
|
-
import {
|
|
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 =
|
|
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
|
-
"
|
|
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(
|
|
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-
|
|
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":[]}
|