@godxjp/ui 19.5.0 → 20.0.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/dist/components/data-display/card.d.ts +2 -2
- package/dist/components/data-display/collapsible.d.ts +23 -4
- package/dist/components/data-display/collapsible.js +119 -4
- package/dist/components/data-display/index.d.ts +3 -1
- package/dist/components/data-display/index.js +2 -0
- package/dist/components/data-display/legend.d.ts +15 -0
- package/dist/components/data-display/legend.js +11 -0
- package/dist/components/data-display/list-row.js +1 -1
- package/dist/components/data-display/popover.d.ts +58 -5
- package/dist/components/data-display/popover.js +206 -27
- package/dist/components/data-display/progress.d.ts +50 -2
- package/dist/components/data-display/progress.js +57 -9
- package/dist/components/data-entry/calendar.d.ts +1 -1
- package/dist/components/data-entry/calendar.js +67 -32
- package/dist/components/data-entry/checkbox.d.ts +19 -6
- package/dist/components/data-entry/checkbox.js +55 -16
- package/dist/components/data-entry/choice-option.d.ts +1 -1
- package/dist/components/data-entry/date-range-picker.d.ts +1 -1
- package/dist/components/data-entry/field.js +0 -1
- package/dist/components/data-entry/form.js +1 -1
- package/dist/components/data-entry/label.d.ts +3 -2
- package/dist/components/data-entry/label.js +23 -10
- package/dist/components/data-entry/month-picker.d.ts +1 -1
- package/dist/components/data-entry/month-range-picker.d.ts +1 -1
- package/dist/components/data-entry/transfer.js +16 -6
- package/dist/components/data-entry/tree-select-strategy.d.ts +1 -1
- package/dist/components/data-entry/tree-select.js +29 -12
- package/dist/components/data-entry/tree-utils.d.ts +1 -1
- package/dist/components/data-entry/upload.js +7 -2
- package/dist/components/feedback/dialog.d.ts +105 -38
- package/dist/components/feedback/dialog.js +272 -194
- package/dist/components/feedback/overlay-close-focus.d.ts +31 -0
- package/dist/components/feedback/overlay-close-focus.js +31 -0
- package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
- package/dist/components/feedback/sheet.d.ts +53 -11
- package/dist/components/feedback/sheet.js +150 -81
- package/dist/components/feedback/tooltip.d.ts +51 -7
- package/dist/components/feedback/tooltip.js +107 -25
- package/dist/components/general/button.js +2 -2
- package/dist/components/general/logo.d.ts +17 -0
- package/dist/components/general/logo.js +22 -16
- package/dist/components/general/typography.d.ts +7 -1
- package/dist/components/general/typography.js +20 -5
- package/dist/components/layout/app-shell.d.ts +1 -1
- package/dist/components/layout/app-shell.js +52 -8
- package/dist/components/layout/aspect-ratio.js +0 -1
- package/dist/components/layout/auth-divider.js +0 -1
- package/dist/components/layout/flex.d.ts +1 -1
- package/dist/components/layout/flex.js +19 -2
- package/dist/components/layout/nav-surface.d.ts +26 -0
- package/dist/components/layout/nav-surface.js +17 -0
- package/dist/components/layout/org-switcher.d.ts +5 -1
- package/dist/components/layout/org-switcher.js +5 -3
- package/dist/components/layout/separator.js +0 -1
- package/dist/components/layout/sidebar.js +4 -1
- package/dist/components/layout/split-pane.d.ts +14 -1
- package/dist/components/layout/split-pane.js +26 -13
- package/dist/components/layout/topbar-item.js +1 -2
- package/dist/components/navigation/app-setting-picker.js +21 -2
- package/dist/components/navigation/app-setting-toggle.d.ts +16 -0
- package/dist/components/navigation/app-setting-toggle.js +96 -0
- package/dist/components/navigation/dropdown-menu.d.ts +199 -18
- package/dist/components/navigation/dropdown-menu.js +344 -117
- package/dist/components/navigation/index.d.ts +2 -0
- package/dist/components/navigation/index.js +2 -0
- package/dist/components/navigation/pagination-utils.d.ts +2 -1
- package/dist/components/navigation/tabs.d.ts +47 -6
- package/dist/components/navigation/tabs.js +152 -90
- package/dist/components/ui/accordion.d.ts +50 -5
- package/dist/components/ui/accordion.js +239 -33
- package/dist/components/ui/aspect-ratio.d.ts +23 -2
- package/dist/components/ui/aspect-ratio.js +15 -13
- package/dist/components/ui/avatar.d.ts +29 -4
- package/dist/components/ui/avatar.js +111 -25
- package/dist/components/ui/hover-card.d.ts +42 -4
- package/dist/components/ui/hover-card.js +183 -27
- package/dist/components/ui/label.js +0 -1
- package/dist/components/ui/segmented.d.ts +3 -3
- package/dist/components/ui/separator.d.ts +8 -2
- package/dist/components/ui/separator.js +17 -9
- package/dist/components/ui/toggle-group.d.ts +50 -5
- package/dist/components/ui/toggle-group.js +79 -20
- package/dist/components/ui/toggle.d.ts +31 -5
- package/dist/components/ui/toggle.js +42 -3
- package/dist/i18n/messages/en.json +8 -0
- package/dist/i18n/messages/ja.json +8 -0
- package/dist/i18n/messages/vi.json +8 -0
- package/dist/lib/control-styles.d.ts +1 -1
- package/dist/lib/control-styles.js +1 -1
- package/dist/lib/slot.d.ts +32 -0
- package/dist/lib/slot.js +22 -0
- package/dist/lib/variants.d.ts +22 -3
- package/dist/lib/variants.js +56 -1
- package/dist/props/components/app.prop.d.ts +25 -1
- package/dist/props/components/data-display.prop.d.ts +17 -0
- package/dist/props/components/data-entry.prop.d.ts +32 -4
- package/dist/props/components/general.prop.d.ts +31 -1
- package/dist/props/components/index.d.ts +1 -1
- package/dist/props/components/layout.prop.d.ts +118 -5
- package/dist/props/components/navigation.prop.d.ts +1 -1
- package/dist/props/registry.d.ts +22 -2
- package/dist/props/registry.js +33 -2
- package/dist/props/vocabulary/content.prop.d.ts +1 -1
- package/dist/props/vocabulary/index.d.ts +2 -2
- package/dist/props/vocabulary/interaction.prop.d.ts +17 -1
- package/dist/props/vocabulary/layout.prop.d.ts +57 -1
- package/dist/styles/control.css +142 -1
- package/dist/styles/core.css +5 -2
- package/dist/styles/data-display-layout.css +72 -0
- package/dist/styles/focus-ring.css +13 -1
- package/dist/styles/index.css +5 -2
- package/dist/styles/layout.css +106 -0
- package/dist/styles/shell-layout.css +140 -8
- package/dist/styles/text-layout.css +16 -4
- package/dist/tokens/base.css +2 -1
- package/dist/tokens/components/data-display.css +11 -0
- package/dist/tokens/components/shell.css +3 -1
- package/dist/tokens/components/text.css +7 -0
- package/dist/tokens/foundation.css +2 -0
- package/docs/COMPONENTS.md +9 -3
- package/docs/DESIGN-AUTHORITY.md +96 -71
- package/docs/FRAME-COVERAGE-REPORT.md +5 -3
- package/docs/README.md +14 -14
- package/docs/WHAT-BELONGS-HERE.md +179 -0
- package/docs/data-display/legend.tsx +145 -0
- package/docs/data-display/progress.tsx +32 -0
- package/docs/data-entry/segmented.tsx +1 -1
- package/docs/data-entry/select.tsx +2 -2
- package/docs/feedback/sheet.tsx +1 -1
- package/docs/general/typography.tsx +84 -1
- package/docs/layout/app-shell-arrangements.tsx +225 -0
- package/docs/layout/aspect-ratio.tsx +1 -1
- package/docs/navigation/app-setting-picker.tsx +26 -1
- package/docs/navigation/app-setting-toggle.tsx +111 -0
- package/package.json +11 -8
- package/scripts/_agent-setup.mjs +165 -3
- package/scripts/consumer-rule.md +98 -0
- package/scripts/guinea-pig-skill.md +322 -0
- package/scripts/init-guinea-pig.mjs +62 -0
- package/scripts/postinstall.mjs +13 -2
- package/scripts/ui-audit.mjs +115 -14
- /package/dist/tokens/{antd.generated.css → derived.css} +0 -0
|
@@ -93,7 +93,11 @@ function Upload({
|
|
|
93
93
|
...ariaProps
|
|
94
94
|
}) {
|
|
95
95
|
const { t } = useTranslation();
|
|
96
|
-
const
|
|
96
|
+
const triggerOwnsAriaLabel = variant === "button";
|
|
97
|
+
const inputA11y = resolveFieldA11y(
|
|
98
|
+
triggerOwnsAriaLabel ? { ...ariaProps, "aria-label": void 0 } : ariaProps,
|
|
99
|
+
t("dataEntry.upload.inputLabel")
|
|
100
|
+
);
|
|
97
101
|
const accept = acceptProp ?? defaultAcceptForVariant(variant);
|
|
98
102
|
const maxCount = maxCountProp ?? defaultMaxCount(variant);
|
|
99
103
|
const multiple = multipleProp ?? (maxCount === 1 ? false : true);
|
|
@@ -214,6 +218,7 @@ function Upload({
|
|
|
214
218
|
if (variant === "button") {
|
|
215
219
|
const iconOnly = typeof triggerSize === "string" && triggerSize.startsWith("icon");
|
|
216
220
|
const label = children ?? t("dataEntry.upload.buttonLabel");
|
|
221
|
+
const triggerAriaLabel = ariaProps["aria-label"] ?? (iconOnly ? typeof label === "string" ? label : t("dataEntry.upload.buttonLabel") : void 0);
|
|
217
222
|
return /* @__PURE__ */ jsxs("div", { className: cn("ui-stack-sm", className), children: [
|
|
218
223
|
hiddenInput,
|
|
219
224
|
liveRegion,
|
|
@@ -225,7 +230,7 @@ function Upload({
|
|
|
225
230
|
size: triggerSize,
|
|
226
231
|
disabled,
|
|
227
232
|
onClick: openPicker,
|
|
228
|
-
"aria-label":
|
|
233
|
+
"aria-label": triggerAriaLabel,
|
|
229
234
|
children: [
|
|
230
235
|
/* @__PURE__ */ jsx(
|
|
231
236
|
UploadIcon,
|
|
@@ -1,20 +1,66 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
3
|
-
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
4
2
|
import type { ToneProp } from "../../props/vocabulary/index.js";
|
|
5
3
|
import type { AlertDialogProp } from "../../props/components/feedback.prop.js";
|
|
6
4
|
export type { AlertDialogProp, AlertDialogProp as AlertDialogProps, } from "../../props/components/feedback.prop.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
5
|
+
interface OverlayOpenProps {
|
|
6
|
+
/** Trạng thái mở, có kiểm soát. */
|
|
7
|
+
open?: boolean;
|
|
8
|
+
/** Trạng thái mở ban đầu khi không kiểm soát. */
|
|
9
|
+
defaultOpen?: boolean;
|
|
10
|
+
/** Gọi khi trạng thái mở đổi. */
|
|
11
|
+
onOpenChange?: (open: boolean) => void;
|
|
12
|
+
}
|
|
13
|
+
interface DialogRootProps extends OverlayOpenProps {
|
|
14
|
+
/**
|
|
15
|
+
* Giữ tên prop của Radix. RAC không có kiểu overlay không-modal: `Modal` LUÔN khoá cuộn và ẩn
|
|
16
|
+
* nền khỏi trình đọc màn hình, nên `modal={false}` không còn tắt được điều đó.
|
|
17
|
+
*/
|
|
18
|
+
modal?: boolean;
|
|
19
|
+
children?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
/** `data-slot="dialog"` cũ nằm trên Root của Radix, thứ không dựng thẻ nào — nó chưa từng ra DOM. */
|
|
22
|
+
declare function DialogRoot({ children, modal: _modal, ...openProps }: DialogRootProps): React.JSX.Element;
|
|
23
|
+
interface DialogTriggerProps extends React.ComponentPropsWithRef<"button"> {
|
|
24
|
+
/** Mượn thẻ của con thay vì dựng `<button>` riêng. */
|
|
25
|
+
asChild?: boolean;
|
|
26
|
+
}
|
|
27
|
+
declare function DialogTrigger({ asChild, onClick, ...props }: DialogTriggerProps): React.JSX.Element;
|
|
28
|
+
interface DialogPortalProps {
|
|
29
|
+
/** Giữ tên prop của Radix; RAC tự portal ra `document.body` từ `ModalOverlay`. */
|
|
30
|
+
forceMount?: true;
|
|
31
|
+
children?: React.ReactNode;
|
|
32
|
+
}
|
|
33
|
+
declare function DialogPortal({ children }: DialogPortalProps): React.JSX.Element;
|
|
34
|
+
interface DialogCloseProps extends React.ComponentPropsWithRef<"button"> {
|
|
35
|
+
/** Mượn thẻ của con thay vì dựng `<button>` riêng. */
|
|
36
|
+
asChild?: boolean;
|
|
37
|
+
}
|
|
38
|
+
declare function DialogClose({ asChild, onClick, ...props }: DialogCloseProps): React.JSX.Element;
|
|
39
|
+
interface DialogOverlayProps extends React.ComponentPropsWithRef<"div"> {
|
|
40
|
+
/** Giữ tên prop của Radix. */
|
|
41
|
+
forceMount?: true;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Không dựng gì — xem đầu tệp. Màn nền là `ModalOverlay` bên trong `DialogContent`, và nó vẫn mang
|
|
45
|
+
* `data-slot="dialog-overlay"` + `.ui-dialog-overlay` như trước.
|
|
46
|
+
*/
|
|
47
|
+
declare function DialogOverlay(_props: DialogOverlayProps): null;
|
|
48
|
+
declare namespace DialogOverlay {
|
|
49
|
+
var displayName: string;
|
|
50
|
+
}
|
|
51
|
+
interface DialogContentProps extends Omit<React.ComponentPropsWithRef<"section">, "role"> {
|
|
14
52
|
showClose?: boolean;
|
|
15
53
|
showCloseButton?: boolean;
|
|
16
54
|
overlayClassName?: string;
|
|
17
|
-
|
|
55
|
+
/** Giữ tên prop của Radix. */
|
|
56
|
+
forceMount?: true;
|
|
57
|
+
/** Giữ tên prop của Radix — xem `useCloseAutoFocus`. */
|
|
58
|
+
onCloseAutoFocus?: (event: Event) => void;
|
|
59
|
+
}
|
|
60
|
+
declare function DialogContent({ className, children, showClose, showCloseButton: showCloseButtonProp, overlayClassName, forceMount: _forceMount, ...props }: DialogContentProps): React.JSX.Element;
|
|
61
|
+
declare namespace DialogContent {
|
|
62
|
+
var displayName: string;
|
|
63
|
+
}
|
|
18
64
|
interface DialogHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
19
65
|
title?: React.ReactNode;
|
|
20
66
|
subtitle?: React.ReactNode;
|
|
@@ -33,23 +79,38 @@ declare function DialogFooter({ className, ...props }: React.HTMLAttributes<HTML
|
|
|
33
79
|
declare namespace DialogFooter {
|
|
34
80
|
var displayName: string;
|
|
35
81
|
}
|
|
36
|
-
declare const DialogTitle: React.ForwardRefExoticComponent<Omit<
|
|
37
|
-
declare const DialogDescription: React.ForwardRefExoticComponent<Omit<
|
|
38
|
-
type AlertDialogRootProps =
|
|
82
|
+
declare const DialogTitle: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
83
|
+
declare const DialogDescription: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
84
|
+
type AlertDialogRootProps = OverlayOpenProps & {
|
|
85
|
+
children?: React.ReactNode;
|
|
86
|
+
};
|
|
39
87
|
/**
|
|
40
88
|
* Compound alert-dialog Root — the `role="alertdialog"` mirror of {@link DialogRoot}. It supplies
|
|
41
|
-
* the
|
|
42
|
-
* `
|
|
43
|
-
*
|
|
89
|
+
* the open-state context that `AlertDialogTitle`, `AlertDialogDescription`, `AlertDialogAction` and
|
|
90
|
+
* `AlertDialogCancel` read, so the compound parts are assemblable from the public API alone (no
|
|
91
|
+
* direct `react-aria-components` import).
|
|
44
92
|
*/
|
|
45
|
-
declare function AlertDialogRoot(
|
|
46
|
-
|
|
47
|
-
declare
|
|
48
|
-
declare
|
|
49
|
-
|
|
93
|
+
declare function AlertDialogRoot({ children, ...openProps }: AlertDialogRootProps): React.JSX.Element;
|
|
94
|
+
/** Radix's alert-dialog trigger carries no `data-slot`; keeping it that way keeps the DOM identical. */
|
|
95
|
+
declare function AlertDialogTrigger({ asChild, onClick, ...props }: DialogTriggerProps): React.JSX.Element;
|
|
96
|
+
declare function AlertDialogPortal({ children }: DialogPortalProps): React.JSX.Element;
|
|
97
|
+
/** Không dựng gì — màn nền do `AlertDialogContent` phát ra. Xem đầu tệp. */
|
|
98
|
+
declare function AlertDialogOverlay(_props: DialogOverlayProps): null;
|
|
99
|
+
declare namespace AlertDialogOverlay {
|
|
100
|
+
var displayName: string;
|
|
101
|
+
}
|
|
102
|
+
interface AlertDialogContentProps extends Omit<React.ComponentPropsWithRef<"section">, "role"> {
|
|
50
103
|
showClose?: boolean;
|
|
51
104
|
showCloseButton?: boolean;
|
|
52
|
-
|
|
105
|
+
/** Giữ tên prop của Radix. */
|
|
106
|
+
forceMount?: true;
|
|
107
|
+
/** Giữ tên prop của Radix — xem `useCloseAutoFocus`. */
|
|
108
|
+
onCloseAutoFocus?: (event: Event) => void;
|
|
109
|
+
}
|
|
110
|
+
declare function AlertDialogContent({ className, children, showClose, showCloseButton: showCloseButtonProp, forceMount: _forceMount, ...props }: AlertDialogContentProps): React.JSX.Element;
|
|
111
|
+
declare namespace AlertDialogContent {
|
|
112
|
+
var displayName: string;
|
|
113
|
+
}
|
|
53
114
|
declare function AlertDialogHeader({ className, title, subtitle, extra, tone, children, ...props }: DialogHeaderProps): React.JSX.Element;
|
|
54
115
|
declare namespace AlertDialogHeader {
|
|
55
116
|
var displayName: string;
|
|
@@ -58,14 +119,24 @@ declare function AlertDialogFooter({ className, ...props }: React.HTMLAttributes
|
|
|
58
119
|
declare namespace AlertDialogFooter {
|
|
59
120
|
var displayName: string;
|
|
60
121
|
}
|
|
61
|
-
declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<
|
|
62
|
-
declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<
|
|
122
|
+
declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
123
|
+
declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
124
|
+
interface DialogActionProps extends React.ComponentPropsWithRef<"button"> {
|
|
125
|
+
/** Mượn thẻ của con thay vì dựng `<button>` riêng. */
|
|
126
|
+
asChild?: boolean;
|
|
127
|
+
}
|
|
63
128
|
/** Confirm mode — primary action (maps to Radix AlertDialogAction). */
|
|
64
|
-
declare
|
|
129
|
+
declare function DialogAction({ asChild, className, onClick, ...props }: DialogActionProps): React.JSX.Element;
|
|
130
|
+
declare namespace DialogAction {
|
|
131
|
+
var displayName: string;
|
|
132
|
+
}
|
|
65
133
|
/** Confirm mode — dismiss without action (maps to Radix AlertDialogCancel). */
|
|
66
|
-
declare
|
|
67
|
-
declare
|
|
68
|
-
|
|
134
|
+
declare function DialogCancel({ asChild, className, onClick, ...props }: DialogActionProps): React.JSX.Element;
|
|
135
|
+
declare namespace DialogCancel {
|
|
136
|
+
var displayName: string;
|
|
137
|
+
}
|
|
138
|
+
declare const AlertDialogAction: typeof DialogAction;
|
|
139
|
+
declare const AlertDialogCancel: typeof DialogCancel;
|
|
69
140
|
/**
|
|
70
141
|
* Preset: confirm / destructive / typed-challenge / step-up without compound markup. Both flows
|
|
71
142
|
* force the destructive tone (button + soft header band).
|
|
@@ -74,19 +145,15 @@ declare function AlertDialog({ open, onOpenChange, title, description, confirmLa
|
|
|
74
145
|
export declare const Dialog: typeof DialogRoot & {
|
|
75
146
|
Trigger: typeof DialogTrigger;
|
|
76
147
|
Portal: typeof DialogPortal;
|
|
77
|
-
Overlay:
|
|
78
|
-
Content:
|
|
79
|
-
showClose?: boolean;
|
|
80
|
-
showCloseButton?: boolean;
|
|
81
|
-
overlayClassName?: string;
|
|
82
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
148
|
+
Overlay: typeof DialogOverlay;
|
|
149
|
+
Content: typeof DialogContent;
|
|
83
150
|
Header: typeof DialogHeader;
|
|
84
151
|
Body: typeof DialogBody;
|
|
85
152
|
Footer: typeof DialogFooter;
|
|
86
|
-
Title: React.ForwardRefExoticComponent<Omit<
|
|
87
|
-
Description: React.ForwardRefExoticComponent<Omit<
|
|
153
|
+
Title: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
154
|
+
Description: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
88
155
|
Close: typeof DialogClose;
|
|
89
|
-
Action:
|
|
90
|
-
Cancel:
|
|
156
|
+
Action: typeof DialogAction;
|
|
157
|
+
Cancel: typeof DialogCancel;
|
|
91
158
|
};
|
|
92
159
|
export { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogHeader, DialogBody, DialogFooter, DialogTitle, DialogDescription, DialogClose, DialogAction, DialogCancel, AlertDialogRoot, AlertDialogTrigger, AlertDialogPortal, AlertDialogOverlay, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, AlertDialog, };
|