@vuu-ui/vuu-ui-controls 2.3.0 → 3.0.0-beta.1
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/cjs/prompt/Prompt.js +2 -0
- package/cjs/prompt/Prompt.js.map +1 -1
- package/esm/prompt/Prompt.js +2 -0
- package/esm/prompt/Prompt.js.map +1 -1
- package/package.json +10 -10
- package/types/prompt/Prompt.d.ts +2 -2
package/cjs/prompt/Prompt.js
CHANGED
|
@@ -39,6 +39,7 @@ const Prompt = ({
|
|
|
39
39
|
confirmButtonLabel = "Confirm",
|
|
40
40
|
confirmButtonProps,
|
|
41
41
|
customAction = null,
|
|
42
|
+
disableDismiss,
|
|
42
43
|
disableAccent,
|
|
43
44
|
headerTag,
|
|
44
45
|
icon,
|
|
@@ -110,6 +111,7 @@ const Prompt = ({
|
|
|
110
111
|
{
|
|
111
112
|
...htmlAttributes,
|
|
112
113
|
className: cx(classBase, className),
|
|
114
|
+
disableDismiss,
|
|
113
115
|
onOpenChange,
|
|
114
116
|
open,
|
|
115
117
|
ref: callbackRef,
|
package/cjs/prompt/Prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Prompt.js","sources":["../../../../packages/vuu-ui-controls/src/prompt/Prompt.tsx"],"sourcesContent":["import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogHeader,\n DialogHeaderProps,\n DialogProps,\n} from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n ReactNode,\n RefCallback,\n RefObject,\n useCallback,\n} from \"react\";\nimport { Icon, IconButton } from \"../icon-button\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport promptCss from \"./Prompt.css\";\n\nconst classBase = \"vuuPrompt\";\n\n/**\n * Allow fine grained configuration of Prompt buttons\n * The ref is provided to facilitate programmatic focus.\n */\nexport interface PromptButtonProps {\n disabled?: boolean;\n label?: string;\n ref?: RefObject<HTMLButtonElement | null>;\n}\n\nconst getHeader = (\n title: string,\n icon?: string,\n headerTag?: ReactNode,\n): ReactNode => {\n if (icon && headerTag) {\n return (\n <>\n <Icon name={icon} />\n <span>{title}</span>\n {headerTag}\n </>\n );\n } else if (icon) {\n return (\n <>\n <Icon name={icon} />\n <span>{title}</span>\n </>\n );\n } else if (headerTag) {\n return (\n <>\n <span>{title}</span>\n {headerTag}\n </>\n );\n }\n\n return title;\n};\n\nexport interface PromptProps\n extends Pick<DialogProps, \"onOpenChange\" | \"open\" | \"status\">,\n Pick<DialogHeaderProps, \"disableAccent\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"content\" | \"title\"> {\n /**\n * For simple configuration, where just a cancel button label is required.\n */\n cancelButtonLabel?: string;\n /**\n * Allow fine grained configuration of cancel button\n */\n cancelButtonProps?: PromptButtonProps;\n /**\n * For simple configuration, where just a confirm button label is required.\n */\n confirmButtonLabel?: string;\n /**\n * Allow fine grained configuration of confirm button\n */\n confirmButtonProps?: PromptButtonProps;\n\n /**\n * A custom action will be displayed in Prompt button bar, before cancel/confirm buttons.\n */\n customAction?: ReactNode;\n\n /**\n * Intended to allow for the display of a status tag or badge in the header. It will be displayed inline\n * after the title. A small component is expected.\n */\n headerTag?: ReactNode;\n\n icon?: string;\n /**\n * Set this prop if one of the three built-in buttons should receive initial focus.\n * Allows user to quickly dismiss/confirm prompt from keyboard. If the prompt content\n * contains focusable item(s), focus should be controlled by caller.\n */\n initialFocusedItem?: \"confirm\" | \"cancel\" | \"close\";\n onCancel?: () => void;\n onConfirm?: () => void | false;\n onClose?: () => void;\n showCancelButton?: boolean;\n showCloseButton?: boolean;\n showConfirmButton?: boolean;\n title: string;\n}\n\nexport const Prompt = ({\n children,\n className,\n cancelButtonLabel = \"Cancel\",\n cancelButtonProps,\n confirmButtonLabel = \"Confirm\",\n confirmButtonProps,\n customAction = null,\n disableAccent,\n headerTag,\n icon,\n initialFocusedItem,\n onCancel,\n onClose,\n onConfirm,\n onOpenChange,\n open,\n showCancelButton = true,\n showCloseButton = true,\n showConfirmButton = true,\n status,\n title,\n\n ...htmlAttributes\n}: PromptProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-prompt-next\",\n css: promptCss,\n window: targetWindow,\n });\n\n const close = useCallback(() => {\n onClose?.();\n onOpenChange?.(false);\n }, [onClose, onOpenChange]);\n\n const callbackRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n if (el) {\n let target: HTMLButtonElement | null = null;\n if (initialFocusedItem === \"confirm\" && showConfirmButton) {\n target = el.querySelector(\".vuuPromptConfirmButton\");\n } else if (initialFocusedItem === \"cancel\" && showCancelButton) {\n target = el.querySelector(\".vuuPromptCancelButton\");\n } else if (initialFocusedItem === \"close\" && showCloseButton) {\n target = el.querySelector(\".vuuPromptCloseButton\");\n }\n\n if (target) {\n setTimeout(() => {\n target.focus();\n }, 200);\n }\n }\n },\n [initialFocusedItem, showCancelButton, showCloseButton, showConfirmButton],\n );\n\n const handleCancel = useCallback<MouseEventHandler<HTMLButtonElement>>(() => {\n onCancel?.();\n close();\n }, [close, onCancel]);\n\n const handleConfirm = useCallback<\n MouseEventHandler<HTMLButtonElement>\n >(() => {\n if (onConfirm?.() !== false) {\n close();\n }\n }, [close, onConfirm]);\n\n const actions = showCloseButton ? (\n <IconButton\n appearance=\"transparent\"\n className=\"vuuPromptCloseButton\"\n data-embedded\n icon=\"close\"\n onClick={close}\n />\n ) : null;\n\n const header = getHeader(title, icon, headerTag);\n\n return (\n <Dialog\n {...htmlAttributes}\n className={cx(classBase, className)}\n onOpenChange={onOpenChange}\n open={open}\n ref={callbackRef}\n status={status}\n >\n <DialogHeader\n disableAccent={disableAccent}\n header={header}\n actions={actions}\n />\n <DialogContent>{children}</DialogContent>\n <DialogActions>\n {customAction}\n {showCancelButton ? (\n <Button\n appearance=\"solid\"\n className=\"vuuPromptCancelButton\"\n disabled={cancelButtonProps?.disabled}\n onClick={handleCancel}\n ref={cancelButtonProps?.ref}\n sentiment=\"neutral\"\n >\n {cancelButtonProps?.label ?? cancelButtonLabel}\n </Button>\n ) : null}\n {showConfirmButton ? (\n <Button\n appearance=\"solid\"\n className=\"vuuPromptConfirmButton\"\n disabled={confirmButtonProps?.disabled}\n sentiment=\"accented\"\n onClick={handleConfirm}\n ref={confirmButtonProps?.ref}\n >\n {confirmButtonProps?.label ?? confirmButtonLabel}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":["jsxs","Fragment","jsx","Icon","useWindow","useComponentCssInjection","promptCss","useCallback","IconButton","Dialog","DialogHeader","DialogContent","DialogActions","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Prompt.js","sources":["../../../../packages/vuu-ui-controls/src/prompt/Prompt.tsx"],"sourcesContent":["import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogHeader,\n DialogHeaderProps,\n DialogProps,\n} from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n ReactNode,\n RefCallback,\n RefObject,\n useCallback,\n} from \"react\";\nimport { Icon, IconButton } from \"../icon-button\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport promptCss from \"./Prompt.css\";\n\nconst classBase = \"vuuPrompt\";\n\n/**\n * Allow fine grained configuration of Prompt buttons\n * The ref is provided to facilitate programmatic focus.\n */\nexport interface PromptButtonProps {\n disabled?: boolean;\n label?: string;\n ref?: RefObject<HTMLButtonElement | null>;\n}\n\nconst getHeader = (\n title: string,\n icon?: string,\n headerTag?: ReactNode,\n): ReactNode => {\n if (icon && headerTag) {\n return (\n <>\n <Icon name={icon} />\n <span>{title}</span>\n {headerTag}\n </>\n );\n } else if (icon) {\n return (\n <>\n <Icon name={icon} />\n <span>{title}</span>\n </>\n );\n } else if (headerTag) {\n return (\n <>\n <span>{title}</span>\n {headerTag}\n </>\n );\n }\n\n return title;\n};\n\nexport interface PromptProps\n extends Pick<DialogProps, \"disableDismiss\" | \"onOpenChange\" | \"open\" | \"status\">,\n Pick<DialogHeaderProps, \"disableAccent\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"content\" | \"title\"> {\n /**\n * For simple configuration, where just a cancel button label is required.\n */\n cancelButtonLabel?: string;\n /**\n * Allow fine grained configuration of cancel button\n */\n cancelButtonProps?: PromptButtonProps;\n /**\n * For simple configuration, where just a confirm button label is required.\n */\n confirmButtonLabel?: string;\n /**\n * Allow fine grained configuration of confirm button\n */\n confirmButtonProps?: PromptButtonProps;\n\n /**\n * A custom action will be displayed in Prompt button bar, before cancel/confirm buttons.\n */\n customAction?: ReactNode;\n\n /**\n * Intended to allow for the display of a status tag or badge in the header. It will be displayed inline\n * after the title. A small component is expected.\n */\n headerTag?: ReactNode;\n\n icon?: string;\n /**\n * Set this prop if one of the three built-in buttons should receive initial focus.\n * Allows user to quickly dismiss/confirm prompt from keyboard. If the prompt content\n * contains focusable item(s), focus should be controlled by caller.\n */\n initialFocusedItem?: \"confirm\" | \"cancel\" | \"close\";\n onCancel?: () => void;\n onConfirm?: () => void | false;\n onClose?: () => void;\n showCancelButton?: boolean;\n showCloseButton?: boolean;\n showConfirmButton?: boolean;\n title: string;\n}\n\nexport const Prompt = ({\n children,\n className,\n cancelButtonLabel = \"Cancel\",\n cancelButtonProps,\n confirmButtonLabel = \"Confirm\",\n confirmButtonProps,\n customAction = null,\n disableDismiss,\n disableAccent,\n headerTag,\n icon,\n initialFocusedItem,\n onCancel,\n onClose,\n onConfirm,\n onOpenChange,\n open,\n showCancelButton = true,\n showCloseButton = true,\n showConfirmButton = true,\n status,\n title,\n\n ...htmlAttributes\n}: PromptProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-prompt-next\",\n css: promptCss,\n window: targetWindow,\n });\n\n const close = useCallback(() => {\n onClose?.();\n onOpenChange?.(false);\n }, [onClose, onOpenChange]);\n\n const callbackRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n if (el) {\n let target: HTMLButtonElement | null = null;\n if (initialFocusedItem === \"confirm\" && showConfirmButton) {\n target = el.querySelector(\".vuuPromptConfirmButton\");\n } else if (initialFocusedItem === \"cancel\" && showCancelButton) {\n target = el.querySelector(\".vuuPromptCancelButton\");\n } else if (initialFocusedItem === \"close\" && showCloseButton) {\n target = el.querySelector(\".vuuPromptCloseButton\");\n }\n\n if (target) {\n setTimeout(() => {\n target.focus();\n }, 200);\n }\n }\n },\n [initialFocusedItem, showCancelButton, showCloseButton, showConfirmButton],\n );\n\n const handleCancel = useCallback<MouseEventHandler<HTMLButtonElement>>(() => {\n onCancel?.();\n close();\n }, [close, onCancel]);\n\n const handleConfirm = useCallback<\n MouseEventHandler<HTMLButtonElement>\n >(() => {\n if (onConfirm?.() !== false) {\n close();\n }\n }, [close, onConfirm]);\n\n const actions = showCloseButton ? (\n <IconButton\n appearance=\"transparent\"\n className=\"vuuPromptCloseButton\"\n data-embedded\n icon=\"close\"\n onClick={close}\n />\n ) : null;\n\n const header = getHeader(title, icon, headerTag);\n\n return (\n <Dialog\n {...htmlAttributes}\n className={cx(classBase, className)}\n disableDismiss={disableDismiss}\n onOpenChange={onOpenChange}\n open={open}\n ref={callbackRef}\n status={status}\n >\n <DialogHeader\n disableAccent={disableAccent}\n header={header}\n actions={actions}\n />\n <DialogContent>{children}</DialogContent>\n <DialogActions>\n {customAction}\n {showCancelButton ? (\n <Button\n appearance=\"solid\"\n className=\"vuuPromptCancelButton\"\n disabled={cancelButtonProps?.disabled}\n onClick={handleCancel}\n ref={cancelButtonProps?.ref}\n sentiment=\"neutral\"\n >\n {cancelButtonProps?.label ?? cancelButtonLabel}\n </Button>\n ) : null}\n {showConfirmButton ? (\n <Button\n appearance=\"solid\"\n className=\"vuuPromptConfirmButton\"\n disabled={confirmButtonProps?.disabled}\n sentiment=\"accented\"\n onClick={handleConfirm}\n ref={confirmButtonProps?.ref}\n >\n {confirmButtonProps?.label ?? confirmButtonLabel}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":["jsxs","Fragment","jsx","Icon","useWindow","useComponentCssInjection","promptCss","useCallback","IconButton","Dialog","DialogHeader","DialogContent","DialogActions","Button"],"mappings":"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"}
|
package/esm/prompt/Prompt.js
CHANGED
|
@@ -37,6 +37,7 @@ const Prompt = ({
|
|
|
37
37
|
confirmButtonLabel = "Confirm",
|
|
38
38
|
confirmButtonProps,
|
|
39
39
|
customAction = null,
|
|
40
|
+
disableDismiss,
|
|
40
41
|
disableAccent,
|
|
41
42
|
headerTag,
|
|
42
43
|
icon,
|
|
@@ -108,6 +109,7 @@ const Prompt = ({
|
|
|
108
109
|
{
|
|
109
110
|
...htmlAttributes,
|
|
110
111
|
className: cx(classBase, className),
|
|
112
|
+
disableDismiss,
|
|
111
113
|
onOpenChange,
|
|
112
114
|
open,
|
|
113
115
|
ref: callbackRef,
|
package/esm/prompt/Prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Prompt.js","sources":["../../../../packages/vuu-ui-controls/src/prompt/Prompt.tsx"],"sourcesContent":["import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogHeader,\n DialogHeaderProps,\n DialogProps,\n} from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n ReactNode,\n RefCallback,\n RefObject,\n useCallback,\n} from \"react\";\nimport { Icon, IconButton } from \"../icon-button\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport promptCss from \"./Prompt.css\";\n\nconst classBase = \"vuuPrompt\";\n\n/**\n * Allow fine grained configuration of Prompt buttons\n * The ref is provided to facilitate programmatic focus.\n */\nexport interface PromptButtonProps {\n disabled?: boolean;\n label?: string;\n ref?: RefObject<HTMLButtonElement | null>;\n}\n\nconst getHeader = (\n title: string,\n icon?: string,\n headerTag?: ReactNode,\n): ReactNode => {\n if (icon && headerTag) {\n return (\n <>\n <Icon name={icon} />\n <span>{title}</span>\n {headerTag}\n </>\n );\n } else if (icon) {\n return (\n <>\n <Icon name={icon} />\n <span>{title}</span>\n </>\n );\n } else if (headerTag) {\n return (\n <>\n <span>{title}</span>\n {headerTag}\n </>\n );\n }\n\n return title;\n};\n\nexport interface PromptProps\n extends Pick<DialogProps, \"onOpenChange\" | \"open\" | \"status\">,\n Pick<DialogHeaderProps, \"disableAccent\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"content\" | \"title\"> {\n /**\n * For simple configuration, where just a cancel button label is required.\n */\n cancelButtonLabel?: string;\n /**\n * Allow fine grained configuration of cancel button\n */\n cancelButtonProps?: PromptButtonProps;\n /**\n * For simple configuration, where just a confirm button label is required.\n */\n confirmButtonLabel?: string;\n /**\n * Allow fine grained configuration of confirm button\n */\n confirmButtonProps?: PromptButtonProps;\n\n /**\n * A custom action will be displayed in Prompt button bar, before cancel/confirm buttons.\n */\n customAction?: ReactNode;\n\n /**\n * Intended to allow for the display of a status tag or badge in the header. It will be displayed inline\n * after the title. A small component is expected.\n */\n headerTag?: ReactNode;\n\n icon?: string;\n /**\n * Set this prop if one of the three built-in buttons should receive initial focus.\n * Allows user to quickly dismiss/confirm prompt from keyboard. If the prompt content\n * contains focusable item(s), focus should be controlled by caller.\n */\n initialFocusedItem?: \"confirm\" | \"cancel\" | \"close\";\n onCancel?: () => void;\n onConfirm?: () => void | false;\n onClose?: () => void;\n showCancelButton?: boolean;\n showCloseButton?: boolean;\n showConfirmButton?: boolean;\n title: string;\n}\n\nexport const Prompt = ({\n children,\n className,\n cancelButtonLabel = \"Cancel\",\n cancelButtonProps,\n confirmButtonLabel = \"Confirm\",\n confirmButtonProps,\n customAction = null,\n disableAccent,\n headerTag,\n icon,\n initialFocusedItem,\n onCancel,\n onClose,\n onConfirm,\n onOpenChange,\n open,\n showCancelButton = true,\n showCloseButton = true,\n showConfirmButton = true,\n status,\n title,\n\n ...htmlAttributes\n}: PromptProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-prompt-next\",\n css: promptCss,\n window: targetWindow,\n });\n\n const close = useCallback(() => {\n onClose?.();\n onOpenChange?.(false);\n }, [onClose, onOpenChange]);\n\n const callbackRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n if (el) {\n let target: HTMLButtonElement | null = null;\n if (initialFocusedItem === \"confirm\" && showConfirmButton) {\n target = el.querySelector(\".vuuPromptConfirmButton\");\n } else if (initialFocusedItem === \"cancel\" && showCancelButton) {\n target = el.querySelector(\".vuuPromptCancelButton\");\n } else if (initialFocusedItem === \"close\" && showCloseButton) {\n target = el.querySelector(\".vuuPromptCloseButton\");\n }\n\n if (target) {\n setTimeout(() => {\n target.focus();\n }, 200);\n }\n }\n },\n [initialFocusedItem, showCancelButton, showCloseButton, showConfirmButton],\n );\n\n const handleCancel = useCallback<MouseEventHandler<HTMLButtonElement>>(() => {\n onCancel?.();\n close();\n }, [close, onCancel]);\n\n const handleConfirm = useCallback<\n MouseEventHandler<HTMLButtonElement>\n >(() => {\n if (onConfirm?.() !== false) {\n close();\n }\n }, [close, onConfirm]);\n\n const actions = showCloseButton ? (\n <IconButton\n appearance=\"transparent\"\n className=\"vuuPromptCloseButton\"\n data-embedded\n icon=\"close\"\n onClick={close}\n />\n ) : null;\n\n const header = getHeader(title, icon, headerTag);\n\n return (\n <Dialog\n {...htmlAttributes}\n className={cx(classBase, className)}\n onOpenChange={onOpenChange}\n open={open}\n ref={callbackRef}\n status={status}\n >\n <DialogHeader\n disableAccent={disableAccent}\n header={header}\n actions={actions}\n />\n <DialogContent>{children}</DialogContent>\n <DialogActions>\n {customAction}\n {showCancelButton ? (\n <Button\n appearance=\"solid\"\n className=\"vuuPromptCancelButton\"\n disabled={cancelButtonProps?.disabled}\n onClick={handleCancel}\n ref={cancelButtonProps?.ref}\n sentiment=\"neutral\"\n >\n {cancelButtonProps?.label ?? cancelButtonLabel}\n </Button>\n ) : null}\n {showConfirmButton ? (\n <Button\n appearance=\"solid\"\n className=\"vuuPromptConfirmButton\"\n disabled={confirmButtonProps?.disabled}\n sentiment=\"accented\"\n onClick={handleConfirm}\n ref={confirmButtonProps?.ref}\n >\n {confirmButtonProps?.label ?? confirmButtonLabel}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAwBA,MAAM,SAAY,GAAA,WAAA;AAYlB,MAAM,SAAY,GAAA,CAChB,KACA,EAAA,IAAA,EACA,SACc,KAAA;AACd,EAAA,IAAI,QAAQ,SAAW,EAAA;AACrB,IAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,MAAM,IAAM,EAAA,CAAA;AAAA,sBAClB,GAAA,CAAC,UAAM,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,MACZ;AAAA,KACH,EAAA,CAAA;AAAA,aAEO,IAAM,EAAA;AACf,IAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,MAAM,IAAM,EAAA,CAAA;AAAA,sBAClB,GAAA,CAAC,UAAM,QAAM,EAAA,KAAA,EAAA;AAAA,KACf,EAAA,CAAA;AAAA,aAEO,SAAW,EAAA;AACpB,IAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAM,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,MACZ;AAAA,KACH,EAAA,CAAA;AAAA;AAIJ,EAAO,OAAA,KAAA;AACT,CAAA;AAkDO,MAAM,SAAS,CAAC;AAAA,EACrB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAoB,GAAA,QAAA;AAAA,EACpB,iBAAA;AAAA,EACA,kBAAqB,GAAA,SAAA;AAAA,EACrB,kBAAA;AAAA,EACA,YAAe,GAAA,IAAA;AAAA,EACf,aAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA,EACA,gBAAmB,GAAA,IAAA;AAAA,EACnB,eAAkB,GAAA,IAAA;AAAA,EAClB,iBAAoB,GAAA,IAAA;AAAA,EACpB,MAAA;AAAA,EACA,KAAA;AAAA,EAEA,GAAG;AACL,CAAmB,KAAA;AACjB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,SAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAU,OAAA,IAAA;AACV,IAAA,YAAA,GAAe,KAAK,CAAA;AAAA,GACnB,EAAA,CAAC,OAAS,EAAA,YAAY,CAAC,CAAA;AAE1B,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,EAAO,KAAA;AACN,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,IAAI,MAAmC,GAAA,IAAA;AACvC,QAAI,IAAA,kBAAA,KAAuB,aAAa,iBAAmB,EAAA;AACzD,UAAS,MAAA,GAAA,EAAA,CAAG,cAAc,yBAAyB,CAAA;AAAA,SACrD,MAAA,IAAW,kBAAuB,KAAA,QAAA,IAAY,gBAAkB,EAAA;AAC9D,UAAS,MAAA,GAAA,EAAA,CAAG,cAAc,wBAAwB,CAAA;AAAA,SACpD,MAAA,IAAW,kBAAuB,KAAA,OAAA,IAAW,eAAiB,EAAA;AAC5D,UAAS,MAAA,GAAA,EAAA,CAAG,cAAc,uBAAuB,CAAA;AAAA;AAGnD,QAAA,IAAI,MAAQ,EAAA;AACV,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,MAAA,CAAO,KAAM,EAAA;AAAA,aACZ,GAAG,CAAA;AAAA;AACR;AACF,KACF;AAAA,IACA,CAAC,kBAAA,EAAoB,gBAAkB,EAAA,eAAA,EAAiB,iBAAiB;AAAA,GAC3E;AAEA,EAAM,MAAA,YAAA,GAAe,YAAkD,MAAM;AAC3E,IAAW,QAAA,IAAA;AACX,IAAM,KAAA,EAAA;AAAA,GACL,EAAA,CAAC,KAAO,EAAA,QAAQ,CAAC,CAAA;AAEpB,EAAM,MAAA,aAAA,GAAgB,YAEpB,MAAM;AACN,IAAI,IAAA,SAAA,SAAkB,KAAO,EAAA;AAC3B,MAAM,KAAA,EAAA;AAAA;AACR,GACC,EAAA,CAAC,KAAO,EAAA,SAAS,CAAC,CAAA;AAErB,EAAA,MAAM,UAAU,eACd,mBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,UAAW,EAAA,aAAA;AAAA,MACX,SAAU,EAAA,sBAAA;AAAA,MACV,eAAa,EAAA,IAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA;AAAA;AAAA,GAET,GAAA,IAAA;AAEJ,EAAA,MAAM,MAAS,GAAA,SAAA,CAAU,KAAO,EAAA,IAAA,EAAM,SAAS,CAAA;AAE/C,EACE,uBAAA,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,YAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAK,EAAA,WAAA;AAAA,MACL,MAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,aAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACA,GAAA,CAAC,iBAAe,QAAS,EAAA,CAAA;AAAA,6BACxB,aACE,EAAA,EAAA,QAAA,EAAA;AAAA,UAAA,YAAA;AAAA,UACA,gBACC,mBAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,UAAW,EAAA,OAAA;AAAA,cACX,SAAU,EAAA,uBAAA;AAAA,cACV,UAAU,iBAAmB,EAAA,QAAA;AAAA,cAC7B,OAAS,EAAA,YAAA;AAAA,cACT,KAAK,iBAAmB,EAAA,GAAA;AAAA,cACxB,SAAU,EAAA,SAAA;AAAA,cAET,6BAAmB,KAAS,IAAA;AAAA;AAAA,WAE7B,GAAA,IAAA;AAAA,UACH,iBACC,mBAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,UAAW,EAAA,OAAA;AAAA,cACX,SAAU,EAAA,wBAAA;AAAA,cACV,UAAU,kBAAoB,EAAA,QAAA;AAAA,cAC9B,SAAU,EAAA,UAAA;AAAA,cACV,OAAS,EAAA,aAAA;AAAA,cACT,KAAK,kBAAoB,EAAA,GAAA;AAAA,cAExB,8BAAoB,KAAS,IAAA;AAAA;AAAA,WAE9B,GAAA;AAAA,SACN,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"Prompt.js","sources":["../../../../packages/vuu-ui-controls/src/prompt/Prompt.tsx"],"sourcesContent":["import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogHeader,\n DialogHeaderProps,\n DialogProps,\n} from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n MouseEventHandler,\n ReactNode,\n RefCallback,\n RefObject,\n useCallback,\n} from \"react\";\nimport { Icon, IconButton } from \"../icon-button\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport promptCss from \"./Prompt.css\";\n\nconst classBase = \"vuuPrompt\";\n\n/**\n * Allow fine grained configuration of Prompt buttons\n * The ref is provided to facilitate programmatic focus.\n */\nexport interface PromptButtonProps {\n disabled?: boolean;\n label?: string;\n ref?: RefObject<HTMLButtonElement | null>;\n}\n\nconst getHeader = (\n title: string,\n icon?: string,\n headerTag?: ReactNode,\n): ReactNode => {\n if (icon && headerTag) {\n return (\n <>\n <Icon name={icon} />\n <span>{title}</span>\n {headerTag}\n </>\n );\n } else if (icon) {\n return (\n <>\n <Icon name={icon} />\n <span>{title}</span>\n </>\n );\n } else if (headerTag) {\n return (\n <>\n <span>{title}</span>\n {headerTag}\n </>\n );\n }\n\n return title;\n};\n\nexport interface PromptProps\n extends Pick<DialogProps, \"disableDismiss\" | \"onOpenChange\" | \"open\" | \"status\">,\n Pick<DialogHeaderProps, \"disableAccent\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"content\" | \"title\"> {\n /**\n * For simple configuration, where just a cancel button label is required.\n */\n cancelButtonLabel?: string;\n /**\n * Allow fine grained configuration of cancel button\n */\n cancelButtonProps?: PromptButtonProps;\n /**\n * For simple configuration, where just a confirm button label is required.\n */\n confirmButtonLabel?: string;\n /**\n * Allow fine grained configuration of confirm button\n */\n confirmButtonProps?: PromptButtonProps;\n\n /**\n * A custom action will be displayed in Prompt button bar, before cancel/confirm buttons.\n */\n customAction?: ReactNode;\n\n /**\n * Intended to allow for the display of a status tag or badge in the header. It will be displayed inline\n * after the title. A small component is expected.\n */\n headerTag?: ReactNode;\n\n icon?: string;\n /**\n * Set this prop if one of the three built-in buttons should receive initial focus.\n * Allows user to quickly dismiss/confirm prompt from keyboard. If the prompt content\n * contains focusable item(s), focus should be controlled by caller.\n */\n initialFocusedItem?: \"confirm\" | \"cancel\" | \"close\";\n onCancel?: () => void;\n onConfirm?: () => void | false;\n onClose?: () => void;\n showCancelButton?: boolean;\n showCloseButton?: boolean;\n showConfirmButton?: boolean;\n title: string;\n}\n\nexport const Prompt = ({\n children,\n className,\n cancelButtonLabel = \"Cancel\",\n cancelButtonProps,\n confirmButtonLabel = \"Confirm\",\n confirmButtonProps,\n customAction = null,\n disableDismiss,\n disableAccent,\n headerTag,\n icon,\n initialFocusedItem,\n onCancel,\n onClose,\n onConfirm,\n onOpenChange,\n open,\n showCancelButton = true,\n showCloseButton = true,\n showConfirmButton = true,\n status,\n title,\n\n ...htmlAttributes\n}: PromptProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-prompt-next\",\n css: promptCss,\n window: targetWindow,\n });\n\n const close = useCallback(() => {\n onClose?.();\n onOpenChange?.(false);\n }, [onClose, onOpenChange]);\n\n const callbackRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n if (el) {\n let target: HTMLButtonElement | null = null;\n if (initialFocusedItem === \"confirm\" && showConfirmButton) {\n target = el.querySelector(\".vuuPromptConfirmButton\");\n } else if (initialFocusedItem === \"cancel\" && showCancelButton) {\n target = el.querySelector(\".vuuPromptCancelButton\");\n } else if (initialFocusedItem === \"close\" && showCloseButton) {\n target = el.querySelector(\".vuuPromptCloseButton\");\n }\n\n if (target) {\n setTimeout(() => {\n target.focus();\n }, 200);\n }\n }\n },\n [initialFocusedItem, showCancelButton, showCloseButton, showConfirmButton],\n );\n\n const handleCancel = useCallback<MouseEventHandler<HTMLButtonElement>>(() => {\n onCancel?.();\n close();\n }, [close, onCancel]);\n\n const handleConfirm = useCallback<\n MouseEventHandler<HTMLButtonElement>\n >(() => {\n if (onConfirm?.() !== false) {\n close();\n }\n }, [close, onConfirm]);\n\n const actions = showCloseButton ? (\n <IconButton\n appearance=\"transparent\"\n className=\"vuuPromptCloseButton\"\n data-embedded\n icon=\"close\"\n onClick={close}\n />\n ) : null;\n\n const header = getHeader(title, icon, headerTag);\n\n return (\n <Dialog\n {...htmlAttributes}\n className={cx(classBase, className)}\n disableDismiss={disableDismiss}\n onOpenChange={onOpenChange}\n open={open}\n ref={callbackRef}\n status={status}\n >\n <DialogHeader\n disableAccent={disableAccent}\n header={header}\n actions={actions}\n />\n <DialogContent>{children}</DialogContent>\n <DialogActions>\n {customAction}\n {showCancelButton ? (\n <Button\n appearance=\"solid\"\n className=\"vuuPromptCancelButton\"\n disabled={cancelButtonProps?.disabled}\n onClick={handleCancel}\n ref={cancelButtonProps?.ref}\n sentiment=\"neutral\"\n >\n {cancelButtonProps?.label ?? cancelButtonLabel}\n </Button>\n ) : null}\n {showConfirmButton ? (\n <Button\n appearance=\"solid\"\n className=\"vuuPromptConfirmButton\"\n disabled={confirmButtonProps?.disabled}\n sentiment=\"accented\"\n onClick={handleConfirm}\n ref={confirmButtonProps?.ref}\n >\n {confirmButtonProps?.label ?? confirmButtonLabel}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "3.0.0-beta.1",
|
|
3
3
|
"description": "VUU UI Controls",
|
|
4
4
|
"author": "heswell",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@vuu-ui/vuu-data-types": "
|
|
8
|
-
"@vuu-ui/vuu-protocol-types": "
|
|
9
|
-
"@vuu-ui/vuu-table-types": "
|
|
7
|
+
"@vuu-ui/vuu-data-types": "3.0.0-beta.1",
|
|
8
|
+
"@vuu-ui/vuu-protocol-types": "3.0.0-beta.1",
|
|
9
|
+
"@vuu-ui/vuu-table-types": "3.0.0-beta.1"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@vuu-ui/vuu-context-menu": "
|
|
13
|
-
"@vuu-ui/vuu-data-react": "
|
|
14
|
-
"@vuu-ui/vuu-layout": "
|
|
15
|
-
"@vuu-ui/vuu-popups": "
|
|
16
|
-
"@vuu-ui/vuu-table": "
|
|
17
|
-
"@vuu-ui/vuu-utils": "
|
|
12
|
+
"@vuu-ui/vuu-context-menu": "3.0.0-beta.1",
|
|
13
|
+
"@vuu-ui/vuu-data-react": "3.0.0-beta.1",
|
|
14
|
+
"@vuu-ui/vuu-layout": "3.0.0-beta.1",
|
|
15
|
+
"@vuu-ui/vuu-popups": "3.0.0-beta.1",
|
|
16
|
+
"@vuu-ui/vuu-table": "3.0.0-beta.1",
|
|
17
|
+
"@vuu-ui/vuu-utils": "3.0.0-beta.1",
|
|
18
18
|
"@salt-ds/core": "1.54.1",
|
|
19
19
|
"@salt-ds/icons": "1.16.0",
|
|
20
20
|
"@salt-ds/styles": "0.2.1",
|
package/types/prompt/Prompt.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface PromptButtonProps {
|
|
|
9
9
|
label?: string;
|
|
10
10
|
ref?: RefObject<HTMLButtonElement | null>;
|
|
11
11
|
}
|
|
12
|
-
export interface PromptProps extends Pick<DialogProps, "onOpenChange" | "open" | "status">, Pick<DialogHeaderProps, "disableAccent">, Omit<HTMLAttributes<HTMLDivElement>, "content" | "title"> {
|
|
12
|
+
export interface PromptProps extends Pick<DialogProps, "disableDismiss" | "onOpenChange" | "open" | "status">, Pick<DialogHeaderProps, "disableAccent">, Omit<HTMLAttributes<HTMLDivElement>, "content" | "title"> {
|
|
13
13
|
/**
|
|
14
14
|
* For simple configuration, where just a cancel button label is required.
|
|
15
15
|
*/
|
|
@@ -50,4 +50,4 @@ export interface PromptProps extends Pick<DialogProps, "onOpenChange" | "open" |
|
|
|
50
50
|
showConfirmButton?: boolean;
|
|
51
51
|
title: string;
|
|
52
52
|
}
|
|
53
|
-
export declare const Prompt: ({ children, className, cancelButtonLabel, cancelButtonProps, confirmButtonLabel, confirmButtonProps, customAction, disableAccent, headerTag, icon, initialFocusedItem, onCancel, onClose, onConfirm, onOpenChange, open, showCancelButton, showCloseButton, showConfirmButton, status, title, ...htmlAttributes }: PromptProps) => import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
export declare const Prompt: ({ children, className, cancelButtonLabel, cancelButtonProps, confirmButtonLabel, confirmButtonProps, customAction, disableDismiss, disableAccent, headerTag, icon, initialFocusedItem, onCancel, onClose, onConfirm, onOpenChange, open, showCancelButton, showCloseButton, showConfirmButton, status, title, ...htmlAttributes }: PromptProps) => import("react/jsx-runtime").JSX.Element;
|