@simplybusiness/mobius 9.3.0 → 9.3.2
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/CHANGELOG.md +12 -0
- package/dist/cjs/components/AddressLookup/AddressLookup.js.map +2 -2
- package/dist/cjs/components/AddressLookup/index.js.map +2 -2
- package/dist/cjs/components/Checkbox/Checkbox.js.map +2 -2
- package/dist/cjs/components/Checkbox/CheckboxGroup.js.map +2 -2
- package/dist/cjs/components/Checkbox/index.js.map +2 -2
- package/dist/cjs/components/Combobox/Combobox.js.map +2 -2
- package/dist/cjs/components/Combobox/index.js.map +2 -2
- package/dist/cjs/components/DateField/DateField.js.map +2 -2
- package/dist/cjs/components/DateField/index.js.map +2 -2
- package/dist/cjs/components/ErrorMessage/ErrorMessage.js.map +2 -2
- package/dist/cjs/components/ErrorMessage/index.js.map +2 -2
- package/dist/cjs/components/ExpandableText/ExpandableText.js.map +2 -2
- package/dist/cjs/components/ExpandableText/index.js.map +2 -2
- package/dist/cjs/components/MaskedField/MaskedField.js.map +2 -2
- package/dist/cjs/components/MaskedField/index.js.map +2 -2
- package/dist/cjs/components/NumberField/NumberField.js.map +2 -2
- package/dist/cjs/components/NumberField/index.js.map +2 -2
- package/dist/cjs/components/PasswordField/PasswordField.js.map +2 -2
- package/dist/cjs/components/PasswordField/ShowHideButton.js.map +2 -2
- package/dist/cjs/components/PasswordField/index.js.map +2 -2
- package/dist/cjs/components/Popover/Popover.js +21 -1
- package/dist/cjs/components/Popover/Popover.js.map +2 -2
- package/dist/cjs/components/Popover/index.js +21 -1
- package/dist/cjs/components/Popover/index.js.map +2 -2
- package/dist/cjs/components/Radio/Radio.js.map +2 -2
- package/dist/cjs/components/Radio/RadioGroup.js.map +2 -2
- package/dist/cjs/components/Radio/index.js.map +2 -2
- package/dist/cjs/components/Select/Select.js.map +2 -2
- package/dist/cjs/components/Select/index.js.map +2 -2
- package/dist/cjs/components/TextArea/TextArea.js.map +2 -2
- package/dist/cjs/components/TextArea/index.js.map +2 -2
- package/dist/cjs/components/TextField/TextField.js.map +2 -2
- package/dist/cjs/components/TextField/index.js.map +2 -2
- package/dist/cjs/components/index.js +21 -1
- package/dist/cjs/components/index.js.map +2 -2
- package/dist/cjs/index.js +21 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/meta.json +42 -42
- package/dist/esm/{chunk-ASLEVOVU.js → chunk-MXQ4PJF4.js} +1 -1
- package/dist/esm/{chunk-IS74FB4O.js → chunk-O5YEU5TG.js} +23 -3
- package/dist/esm/chunk-O5YEU5TG.js.map +7 -0
- package/dist/esm/components/AddressLookup/AddressLookup.js +2 -2
- package/dist/esm/components/AddressLookup/index.js +2 -2
- package/dist/esm/components/Checkbox/Checkbox.js +2 -2
- package/dist/esm/components/Checkbox/CheckboxGroup.js +2 -2
- package/dist/esm/components/Checkbox/index.js +2 -2
- package/dist/esm/components/Combobox/Combobox.js +2 -2
- package/dist/esm/components/Combobox/index.js +2 -2
- package/dist/esm/components/DateField/DateField.js +2 -2
- package/dist/esm/components/DateField/index.js +2 -2
- package/dist/esm/components/ErrorMessage/ErrorMessage.js +2 -2
- package/dist/esm/components/ErrorMessage/index.js +2 -2
- package/dist/esm/components/ExpandableText/ExpandableText.js +2 -2
- package/dist/esm/components/ExpandableText/index.js +2 -2
- package/dist/esm/components/MaskedField/MaskedField.js +2 -2
- package/dist/esm/components/MaskedField/index.js +2 -2
- package/dist/esm/components/NumberField/NumberField.js +2 -2
- package/dist/esm/components/NumberField/index.js +2 -2
- package/dist/esm/components/PasswordField/PasswordField.js +2 -2
- package/dist/esm/components/PasswordField/ShowHideButton.js +2 -2
- package/dist/esm/components/PasswordField/index.js +2 -2
- package/dist/esm/components/Popover/Popover.js +1 -1
- package/dist/esm/components/Popover/index.js +1 -1
- package/dist/esm/components/Radio/Radio.js +2 -2
- package/dist/esm/components/Radio/RadioGroup.js +2 -2
- package/dist/esm/components/Radio/index.js +2 -2
- package/dist/esm/components/Select/Select.js +2 -2
- package/dist/esm/components/Select/index.js +2 -2
- package/dist/esm/components/TextArea/TextArea.js +2 -2
- package/dist/esm/components/TextArea/index.js +2 -2
- package/dist/esm/components/TextField/TextField.js +2 -2
- package/dist/esm/components/TextField/index.js +2 -2
- package/dist/esm/components/index.js +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/meta.json +72 -72
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/src/components/Combobox/Combobox.mdx +50 -6
- package/src/components/ErrorMessage/ErrorMessage.css +4 -4
- package/src/components/Modal/Modal.css +1 -1
- package/src/components/Popover/Popover.css +2 -2
- package/src/components/Popover/Popover.test.tsx +94 -0
- package/src/components/Popover/Popover.tsx +30 -2
- package/dist/esm/chunk-IS74FB4O.js.map +0 -7
- /package/dist/esm/{chunk-ASLEVOVU.js.map → chunk-MXQ4PJF4.js.map} +0 -0
|
@@ -248,6 +248,7 @@ var OFFSET_FROM_CONTENT_DEFAULT = 10;
|
|
|
248
248
|
var Popover = (props) => {
|
|
249
249
|
const { trigger, children, onOpen, onClose, className } = props;
|
|
250
250
|
const arrowRef = (0, import_react3.useRef)(null);
|
|
251
|
+
const floatingContainerRef = (0, import_react3.useRef)(null);
|
|
251
252
|
const [isOpen, setIsOpen] = (0, import_react3.useState)(false);
|
|
252
253
|
const { refs, floatingStyles, context } = (0, import_react2.useFloating)({
|
|
253
254
|
open: isOpen,
|
|
@@ -279,6 +280,25 @@ var Popover = (props) => {
|
|
|
279
280
|
"mobius-popover__container",
|
|
280
281
|
className
|
|
281
282
|
);
|
|
283
|
+
const setFloatingRef = (0, import_react3.useCallback)(
|
|
284
|
+
(node) => {
|
|
285
|
+
refs.setFloating(node);
|
|
286
|
+
floatingContainerRef.current = node;
|
|
287
|
+
},
|
|
288
|
+
[refs]
|
|
289
|
+
);
|
|
290
|
+
(0, import_react3.useEffect)(() => {
|
|
291
|
+
const el = floatingContainerRef.current;
|
|
292
|
+
if (!el) return;
|
|
293
|
+
const preventLabelActivation = (e) => {
|
|
294
|
+
const target = e.target;
|
|
295
|
+
if (!target.closest("a[href], input, select, textarea")) {
|
|
296
|
+
e.preventDefault();
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
el.addEventListener("click", preventLabelActivation);
|
|
300
|
+
return () => el.removeEventListener("click", preventLabelActivation);
|
|
301
|
+
}, [isOpen]);
|
|
282
302
|
const toggleVisibility = () => {
|
|
283
303
|
if (isOpen) {
|
|
284
304
|
setIsOpen(false);
|
|
@@ -310,7 +330,7 @@ var Popover = (props) => {
|
|
|
310
330
|
"div",
|
|
311
331
|
{
|
|
312
332
|
className: containerClasses,
|
|
313
|
-
ref:
|
|
333
|
+
ref: setFloatingRef,
|
|
314
334
|
style: floatingStyles,
|
|
315
335
|
...getFloatingProps(),
|
|
316
336
|
children: [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/Popover/Popover.tsx", "../../../../src/components/Button/Button.tsx", "../../../../src/components/Button/Loading.tsx", "../../../../src/components/Icon/Icon.tsx", "../../../../src/components/VisuallyHidden/VisuallyHidden.tsx", "../../../../src/hooks/useButton/useButton.tsx", "../../../../src/components/Button/Success.tsx"],
|
|
4
|
-
"sourcesContent": ["import {\n FloatingArrow,\n arrow,\n autoUpdate,\n flip,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { cross } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { cloneElement, useRef, useState } from \"react\";\nimport { useWindowEvent } from \"@simplybusiness/mobius-hooks\";\nimport type { DOMProps } from \"../../types\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport \"./Popover.css\";\n\nexport type PopoverElementType = HTMLDivElement;\n\nexport interface PopoverProps\n extends DOMProps, RefAttributes<PopoverElementType> {\n children?: ReactNode;\n trigger: ReactElement;\n /** Callback that fires each time the accordion is opened */\n onOpen?: () => void;\n /** Callback that fires each time the accordion is closed */\n onClose?: () => void;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nconst OFFSET_FROM_CONTENT_DEFAULT = 10;\n\nexport const Popover = (props: PopoverProps) => {\n const { trigger, children, onOpen, onClose, className } = props;\n const arrowRef = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n arrow({\n element: arrowRef,\n }),\n offset(OFFSET_FROM_CONTENT_DEFAULT),\n shift(),\n flip(),\n ],\n });\n const dismiss = useDismiss(context, {\n bubbles: true,\n outsidePress: (event: MouseEvent) => {\n // Prevent 'onClose' from firing when clicking the toggle to close\n const toggle = refs.reference.current as HTMLElement;\n const isToggleClick = !toggle?.contains(event.target as HTMLElement);\n if (isToggleClick) {\n onClose?.();\n }\n return true;\n },\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-popover__container\",\n className,\n );\n\n const toggleVisibility = () => {\n if (isOpen) {\n setIsOpen(false);\n onClose?.();\n return;\n }\n\n setIsOpen(true);\n onOpen?.();\n };\n\n const triggerComponent = cloneElement(trigger, {\n ref: refs.setReference,\n className: classNames(\n (trigger.props as { className?: string }).className,\n \"mobius-popover__toggle\",\n ),\n onClick: toggleVisibility,\n ...getReferenceProps(),\n } as Record<string, unknown>);\n\n useWindowEvent(\"keydown\", e => {\n if (e.key === \"Escape\") {\n onClose?.();\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n return (\n <>\n {triggerComponent}\n {isOpen && (\n <div\n className={containerClasses}\n ref={refs.setFloating}\n style={floatingStyles}\n {...getFloatingProps()}\n >\n <div className=\"mobius-popover\">\n <header className=\"mobius-popover__header\">\n <Button\n type=\"button\"\n className=\"mobius-popover__close-button\"\n onClick={toggleVisibility}\n aria-label=\"Close\"\n variant=\"ghost\"\n >\n <Icon\n icon={cross}\n size=\"md\"\n className=\"mobius-popover__close-icon\"\n />\n </Button>\n </header>\n <div className=\"mobius-popover__body\">{children}</div>\n </div>\n <FloatingArrow\n ref={arrowRef}\n context={context}\n width={20}\n className=\"mobius-popover__arrow-icon\"\n />\n </div>\n )}\n </>\n );\n};\n", "\"use client\";\n\nimport type { MouseEvent, ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Loading } from \"./Loading\";\nimport type { UseButtonProps } from \"../../hooks/useButton\";\nimport { useButton } from \"../../hooks/useButton\";\nimport { Success } from \"./Success\";\nimport \"./Button.css\";\n\nexport type ButtonElementType = HTMLButtonElement;\n\nexport type Variant = \"primary\" | \"secondary\" | \"ghost\" | \"basic\" | \"link\";\n\nexport type Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends UseButtonProps, DOMProps, RefAttributes<ButtonElementType> {\n /** The name of the button when submitted in a form */\n name?: string | undefined;\n /** The value of the button when submitted in a form */\n value?: string | undefined;\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Shortlist of styles */\n variant?: Variant;\n size?: Size;\n /** Display loading spinner */\n isLoading?: boolean;\n /** Display success style */\n isSuccess?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n children?: ReactNode;\n}\n\nconst Button = ({ ref, ...props }: ButtonProps) => {\n const {\n children,\n elementType: Component = \"button\" as React.ElementType,\n isDisabled,\n isLoading,\n isSuccess,\n variant = \"primary\",\n size = \"md\",\n\n onPress,\n\n onClick,\n ...otherProps\n } = props;\n const { buttonProps } = useButton(props);\n\n // Reshape class name and apply to outer element\n otherProps.className = classNames(\n \"mobius\",\n \"mobius-button\",\n `--variant-${variant}`,\n `--size-${size}`,\n {\n \"--is-disabled\": isDisabled,\n \"--is-loading\": isLoading,\n \"--is-success\": isSuccess && !isLoading,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...buttonProps} {...otherProps}>\n {isLoading ? <Loading>{children}</Loading> : children}\n {isSuccess && !isLoading && <Success />}\n </Component>\n );\n};\n\nButton.displayName = \"Button\";\nexport { Button };\n", "import type { ReactNode } from \"react\";\nimport { loading } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\ntype LoadingProps = {\n children: ReactNode;\n};\n\nconst Loading = (props: LoadingProps) => {\n const { children } = props;\n\n return (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={loading} spin size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__loading-text\">\n Loading\n </VisuallyHidden>\n {children}\n </>\n );\n};\n\nexport { Loading };\n", "import classNames from \"classnames/dedupe\";\nimport type { IconProps } from \"./types\";\nimport \"./Icon.css\";\n\nconst ICON_PREFIX = \"mobius-icon\";\n\nconst capitaliseFirstLetter = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\nexport function Icon({\n ref,\n icon,\n className,\n size = \"xs\",\n color,\n fixedWidth,\n spin,\n spinReverse,\n title,\n ...otherProps\n}: IconProps) {\n if (!icon) {\n throw new Error(\"Must specify icon object\");\n }\n\n const classes = classNames(\n \"mobius\",\n \"mobius-icon\",\n `svg-inline--${ICON_PREFIX}`,\n `--size-${size}`,\n className,\n {\n [`${ICON_PREFIX}-fw`]: fixedWidth,\n [`${ICON_PREFIX}-spin`]: spin || spinReverse,\n [`${ICON_PREFIX}-spin-reverse`]: spinReverse,\n },\n );\n\n const { iconName, width, height, svgPathData } = icon;\n const formattedIconName = iconName.split(\"-\").join(\" \");\n\n const defaultTitle = `${capitaliseFirstLetter(formattedIconName)} icon`;\n const titleText = title || defaultTitle;\n\n return (\n <svg\n ref={ref}\n focusable=\"false\"\n data-icon={iconName}\n className={classes}\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${width} ${height}`}\n style={{ color }}\n {...otherProps}\n >\n <title>{titleText}</title>\n <path fill=\"currentColor\" d={svgPathData} />\n </svg>\n );\n}\n", "import type { AriaRole, JSXElementConstructor, ReactNode } from \"react\";\n\nexport interface VisuallyHiddenProps {\n /** The content to visually hide. */\n children?: ReactNode;\n id?: string;\n role?: AriaRole;\n\n className?: string;\n\n /**\n * The element type for the container. Defaults to 'div'\n */\n elementType?: string | JSXElementConstructor<any>;\n}\n\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n const {\n className,\n children,\n elementType: Component = \"div\",\n ...otherProps\n } = props;\n\n return (\n <Component\n className={className}\n style={{\n border: 0,\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n }}\n {...otherProps}\n >\n {children}\n </Component>\n );\n}\n", "import type { JSXElementConstructor } from \"react\";\nimport { useCallback } from \"react\";\n\nexport interface UseButtonProps {\n elementType?:\n | \"button\"\n | \"a\"\n | \"span\"\n | \"input\"\n | JSXElementConstructor<unknown>\n | undefined;\n type?: \"button\" | \"submit\" | \"reset\";\n isDisabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onPress?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n href?: string;\n target?: string;\n rel?: string;\n role?: string;\n name?: string | undefined;\n value?: string | undefined;\n}\n\nexport function useButton({\n elementType = \"button\",\n type = \"button\",\n isDisabled = false,\n href,\n target,\n rel,\n role,\n name,\n value,\n onClick,\n onPress,\n}: UseButtonProps) {\n const realOnClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n onClick?.(event);\n onPress?.(event);\n },\n [isDisabled, onClick, onPress],\n );\n\n function getRole() {\n if (role) {\n return role;\n }\n\n if (elementType === \"a\") {\n return undefined;\n }\n\n return \"button\";\n }\n\n const extraProps =\n elementType === \"button\"\n ? { type }\n : {\n role: getRole(),\n };\n\n return {\n buttonProps: {\n href: elementType === \"a\" ? href : undefined,\n target: elementType === \"a\" ? target : undefined,\n rel: elementType === \"a\" ? rel : undefined,\n tabIndex: isDisabled ? -1 : 0,\n disabled: isDisabled || undefined,\n \"aria-disabled\": isDisabled || undefined,\n name:\n elementType === \"input\" || elementType === \"button\" ? name : undefined,\n value:\n elementType === \"input\" || elementType === \"button\" ? value : undefined,\n ...extraProps,\n onClick: realOnClick,\n },\n };\n}\n", "import { tick } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\nconst Success = () => (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={tick} size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__success-text\">\n Success\n </VisuallyHidden>\n </>\n);\n\nexport { Success };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,gBAUO;AACP,IAAAC,gBAAsB;AACtB,IAAAC,iBAAuB;AAEvB,IAAAF,
|
|
4
|
+
"sourcesContent": ["import {\n FloatingArrow,\n arrow,\n autoUpdate,\n flip,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { cross } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { cloneElement, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useWindowEvent } from \"@simplybusiness/mobius-hooks\";\nimport type { DOMProps } from \"../../types\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport \"./Popover.css\";\n\nexport type PopoverElementType = HTMLDivElement;\n\nexport interface PopoverProps\n extends DOMProps, RefAttributes<PopoverElementType> {\n children?: ReactNode;\n trigger: ReactElement;\n /** Callback that fires each time the accordion is opened */\n onOpen?: () => void;\n /** Callback that fires each time the accordion is closed */\n onClose?: () => void;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nconst OFFSET_FROM_CONTENT_DEFAULT = 10;\n\nexport const Popover = (props: PopoverProps) => {\n const { trigger, children, onOpen, onClose, className } = props;\n const arrowRef = useRef(null);\n const floatingContainerRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n arrow({\n element: arrowRef,\n }),\n offset(OFFSET_FROM_CONTENT_DEFAULT),\n shift(),\n flip(),\n ],\n });\n const dismiss = useDismiss(context, {\n bubbles: true,\n outsidePress: (event: MouseEvent) => {\n // Prevent 'onClose' from firing when clicking the toggle to close\n const toggle = refs.reference.current as HTMLElement;\n const isToggleClick = !toggle?.contains(event.target as HTMLElement);\n if (isToggleClick) {\n onClose?.();\n }\n return true;\n },\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-popover__container\",\n className,\n );\n\n const setFloatingRef = useCallback(\n (node: HTMLDivElement | null) => {\n refs.setFloating(node);\n floatingContainerRef.current = node;\n },\n [refs],\n );\n\n // Native listener to prevent clicks inside the popover from activating\n // interactive ancestors. Must be native because React's onClick fires\n // too late via delegation.\n useEffect(() => {\n const el = floatingContainerRef.current;\n if (!el) return;\n\n const preventLabelActivation = (e: Event) => {\n const target = e.target as HTMLElement;\n // Allow default behavior for interactive elements (links, inputs, etc.)\n // so they remain functional inside the popover.\n if (!target.closest(\"a[href], input, select, textarea\")) {\n e.preventDefault();\n }\n };\n el.addEventListener(\"click\", preventLabelActivation);\n return () => el.removeEventListener(\"click\", preventLabelActivation);\n }, [isOpen]);\n\n const toggleVisibility = () => {\n if (isOpen) {\n setIsOpen(false);\n onClose?.();\n return;\n }\n\n setIsOpen(true);\n onOpen?.();\n };\n\n const triggerComponent = cloneElement(trigger, {\n ref: refs.setReference,\n className: classNames(\n (trigger.props as { className?: string }).className,\n \"mobius-popover__toggle\",\n ),\n onClick: toggleVisibility,\n ...getReferenceProps(),\n } as Record<string, unknown>);\n\n useWindowEvent(\"keydown\", e => {\n if (e.key === \"Escape\") {\n onClose?.();\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n return (\n <>\n {triggerComponent}\n {isOpen && (\n <div\n className={containerClasses}\n ref={setFloatingRef}\n style={floatingStyles}\n {...getFloatingProps()}\n >\n <div className=\"mobius-popover\">\n <header className=\"mobius-popover__header\">\n <Button\n type=\"button\"\n className=\"mobius-popover__close-button\"\n onClick={toggleVisibility}\n aria-label=\"Close\"\n variant=\"ghost\"\n >\n <Icon\n icon={cross}\n size=\"md\"\n className=\"mobius-popover__close-icon\"\n />\n </Button>\n </header>\n <div className=\"mobius-popover__body\">{children}</div>\n </div>\n <FloatingArrow\n ref={arrowRef}\n context={context}\n width={20}\n className=\"mobius-popover__arrow-icon\"\n />\n </div>\n )}\n </>\n );\n};\n", "\"use client\";\n\nimport type { MouseEvent, ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Loading } from \"./Loading\";\nimport type { UseButtonProps } from \"../../hooks/useButton\";\nimport { useButton } from \"../../hooks/useButton\";\nimport { Success } from \"./Success\";\nimport \"./Button.css\";\n\nexport type ButtonElementType = HTMLButtonElement;\n\nexport type Variant = \"primary\" | \"secondary\" | \"ghost\" | \"basic\" | \"link\";\n\nexport type Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends UseButtonProps, DOMProps, RefAttributes<ButtonElementType> {\n /** The name of the button when submitted in a form */\n name?: string | undefined;\n /** The value of the button when submitted in a form */\n value?: string | undefined;\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Shortlist of styles */\n variant?: Variant;\n size?: Size;\n /** Display loading spinner */\n isLoading?: boolean;\n /** Display success style */\n isSuccess?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n children?: ReactNode;\n}\n\nconst Button = ({ ref, ...props }: ButtonProps) => {\n const {\n children,\n elementType: Component = \"button\" as React.ElementType,\n isDisabled,\n isLoading,\n isSuccess,\n variant = \"primary\",\n size = \"md\",\n\n onPress,\n\n onClick,\n ...otherProps\n } = props;\n const { buttonProps } = useButton(props);\n\n // Reshape class name and apply to outer element\n otherProps.className = classNames(\n \"mobius\",\n \"mobius-button\",\n `--variant-${variant}`,\n `--size-${size}`,\n {\n \"--is-disabled\": isDisabled,\n \"--is-loading\": isLoading,\n \"--is-success\": isSuccess && !isLoading,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...buttonProps} {...otherProps}>\n {isLoading ? <Loading>{children}</Loading> : children}\n {isSuccess && !isLoading && <Success />}\n </Component>\n );\n};\n\nButton.displayName = \"Button\";\nexport { Button };\n", "import type { ReactNode } from \"react\";\nimport { loading } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\ntype LoadingProps = {\n children: ReactNode;\n};\n\nconst Loading = (props: LoadingProps) => {\n const { children } = props;\n\n return (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={loading} spin size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__loading-text\">\n Loading\n </VisuallyHidden>\n {children}\n </>\n );\n};\n\nexport { Loading };\n", "import classNames from \"classnames/dedupe\";\nimport type { IconProps } from \"./types\";\nimport \"./Icon.css\";\n\nconst ICON_PREFIX = \"mobius-icon\";\n\nconst capitaliseFirstLetter = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\nexport function Icon({\n ref,\n icon,\n className,\n size = \"xs\",\n color,\n fixedWidth,\n spin,\n spinReverse,\n title,\n ...otherProps\n}: IconProps) {\n if (!icon) {\n throw new Error(\"Must specify icon object\");\n }\n\n const classes = classNames(\n \"mobius\",\n \"mobius-icon\",\n `svg-inline--${ICON_PREFIX}`,\n `--size-${size}`,\n className,\n {\n [`${ICON_PREFIX}-fw`]: fixedWidth,\n [`${ICON_PREFIX}-spin`]: spin || spinReverse,\n [`${ICON_PREFIX}-spin-reverse`]: spinReverse,\n },\n );\n\n const { iconName, width, height, svgPathData } = icon;\n const formattedIconName = iconName.split(\"-\").join(\" \");\n\n const defaultTitle = `${capitaliseFirstLetter(formattedIconName)} icon`;\n const titleText = title || defaultTitle;\n\n return (\n <svg\n ref={ref}\n focusable=\"false\"\n data-icon={iconName}\n className={classes}\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${width} ${height}`}\n style={{ color }}\n {...otherProps}\n >\n <title>{titleText}</title>\n <path fill=\"currentColor\" d={svgPathData} />\n </svg>\n );\n}\n", "import type { AriaRole, JSXElementConstructor, ReactNode } from \"react\";\n\nexport interface VisuallyHiddenProps {\n /** The content to visually hide. */\n children?: ReactNode;\n id?: string;\n role?: AriaRole;\n\n className?: string;\n\n /**\n * The element type for the container. Defaults to 'div'\n */\n elementType?: string | JSXElementConstructor<any>;\n}\n\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n const {\n className,\n children,\n elementType: Component = \"div\",\n ...otherProps\n } = props;\n\n return (\n <Component\n className={className}\n style={{\n border: 0,\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n }}\n {...otherProps}\n >\n {children}\n </Component>\n );\n}\n", "import type { JSXElementConstructor } from \"react\";\nimport { useCallback } from \"react\";\n\nexport interface UseButtonProps {\n elementType?:\n | \"button\"\n | \"a\"\n | \"span\"\n | \"input\"\n | JSXElementConstructor<unknown>\n | undefined;\n type?: \"button\" | \"submit\" | \"reset\";\n isDisabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onPress?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n href?: string;\n target?: string;\n rel?: string;\n role?: string;\n name?: string | undefined;\n value?: string | undefined;\n}\n\nexport function useButton({\n elementType = \"button\",\n type = \"button\",\n isDisabled = false,\n href,\n target,\n rel,\n role,\n name,\n value,\n onClick,\n onPress,\n}: UseButtonProps) {\n const realOnClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n onClick?.(event);\n onPress?.(event);\n },\n [isDisabled, onClick, onPress],\n );\n\n function getRole() {\n if (role) {\n return role;\n }\n\n if (elementType === \"a\") {\n return undefined;\n }\n\n return \"button\";\n }\n\n const extraProps =\n elementType === \"button\"\n ? { type }\n : {\n role: getRole(),\n };\n\n return {\n buttonProps: {\n href: elementType === \"a\" ? href : undefined,\n target: elementType === \"a\" ? target : undefined,\n rel: elementType === \"a\" ? rel : undefined,\n tabIndex: isDisabled ? -1 : 0,\n disabled: isDisabled || undefined,\n \"aria-disabled\": isDisabled || undefined,\n name:\n elementType === \"input\" || elementType === \"button\" ? name : undefined,\n value:\n elementType === \"input\" || elementType === \"button\" ? value : undefined,\n ...extraProps,\n onClick: realOnClick,\n },\n };\n}\n", "import { tick } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\nconst Success = () => (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={tick} size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__success-text\">\n Success\n </VisuallyHidden>\n </>\n);\n\nexport { Success };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_react", "import_icons", "import_dedupe", "import_dedupe", "classNames", "import_jsx_runtime", "import_jsx_runtime", "import_icons", "import_jsx_runtime", "import_jsx_runtime", "classNames", "import_jsx_runtime", "classNames"]
|
|
7
7
|
}
|
|
@@ -250,6 +250,7 @@ var OFFSET_FROM_CONTENT_DEFAULT = 10;
|
|
|
250
250
|
var Popover = (props) => {
|
|
251
251
|
const { trigger, children, onOpen, onClose, className } = props;
|
|
252
252
|
const arrowRef = (0, import_react3.useRef)(null);
|
|
253
|
+
const floatingContainerRef = (0, import_react3.useRef)(null);
|
|
253
254
|
const [isOpen, setIsOpen] = (0, import_react3.useState)(false);
|
|
254
255
|
const { refs, floatingStyles, context } = (0, import_react2.useFloating)({
|
|
255
256
|
open: isOpen,
|
|
@@ -281,6 +282,25 @@ var Popover = (props) => {
|
|
|
281
282
|
"mobius-popover__container",
|
|
282
283
|
className
|
|
283
284
|
);
|
|
285
|
+
const setFloatingRef = (0, import_react3.useCallback)(
|
|
286
|
+
(node) => {
|
|
287
|
+
refs.setFloating(node);
|
|
288
|
+
floatingContainerRef.current = node;
|
|
289
|
+
},
|
|
290
|
+
[refs]
|
|
291
|
+
);
|
|
292
|
+
(0, import_react3.useEffect)(() => {
|
|
293
|
+
const el = floatingContainerRef.current;
|
|
294
|
+
if (!el) return;
|
|
295
|
+
const preventLabelActivation = (e) => {
|
|
296
|
+
const target = e.target;
|
|
297
|
+
if (!target.closest("a[href], input, select, textarea")) {
|
|
298
|
+
e.preventDefault();
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
el.addEventListener("click", preventLabelActivation);
|
|
302
|
+
return () => el.removeEventListener("click", preventLabelActivation);
|
|
303
|
+
}, [isOpen]);
|
|
284
304
|
const toggleVisibility = () => {
|
|
285
305
|
if (isOpen) {
|
|
286
306
|
setIsOpen(false);
|
|
@@ -312,7 +332,7 @@ var Popover = (props) => {
|
|
|
312
332
|
"div",
|
|
313
333
|
{
|
|
314
334
|
className: containerClasses,
|
|
315
|
-
ref:
|
|
335
|
+
ref: setFloatingRef,
|
|
316
336
|
style: floatingStyles,
|
|
317
337
|
...getFloatingProps(),
|
|
318
338
|
children: [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/Popover/index.tsx", "../../../../src/components/Popover/Popover.tsx", "../../../../src/components/Button/Button.tsx", "../../../../src/components/Button/Loading.tsx", "../../../../src/components/Icon/Icon.tsx", "../../../../src/components/VisuallyHidden/VisuallyHidden.tsx", "../../../../src/hooks/useButton/useButton.tsx", "../../../../src/components/Button/Success.tsx"],
|
|
4
|
-
"sourcesContent": ["export * from \"./Popover\";\n", "import {\n FloatingArrow,\n arrow,\n autoUpdate,\n flip,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { cross } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { cloneElement, useRef, useState } from \"react\";\nimport { useWindowEvent } from \"@simplybusiness/mobius-hooks\";\nimport type { DOMProps } from \"../../types\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport \"./Popover.css\";\n\nexport type PopoverElementType = HTMLDivElement;\n\nexport interface PopoverProps\n extends DOMProps, RefAttributes<PopoverElementType> {\n children?: ReactNode;\n trigger: ReactElement;\n /** Callback that fires each time the accordion is opened */\n onOpen?: () => void;\n /** Callback that fires each time the accordion is closed */\n onClose?: () => void;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nconst OFFSET_FROM_CONTENT_DEFAULT = 10;\n\nexport const Popover = (props: PopoverProps) => {\n const { trigger, children, onOpen, onClose, className } = props;\n const arrowRef = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n arrow({\n element: arrowRef,\n }),\n offset(OFFSET_FROM_CONTENT_DEFAULT),\n shift(),\n flip(),\n ],\n });\n const dismiss = useDismiss(context, {\n bubbles: true,\n outsidePress: (event: MouseEvent) => {\n // Prevent 'onClose' from firing when clicking the toggle to close\n const toggle = refs.reference.current as HTMLElement;\n const isToggleClick = !toggle?.contains(event.target as HTMLElement);\n if (isToggleClick) {\n onClose?.();\n }\n return true;\n },\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-popover__container\",\n className,\n );\n\n const toggleVisibility = () => {\n if (isOpen) {\n setIsOpen(false);\n onClose?.();\n return;\n }\n\n setIsOpen(true);\n onOpen?.();\n };\n\n const triggerComponent = cloneElement(trigger, {\n ref: refs.setReference,\n className: classNames(\n (trigger.props as { className?: string }).className,\n \"mobius-popover__toggle\",\n ),\n onClick: toggleVisibility,\n ...getReferenceProps(),\n } as Record<string, unknown>);\n\n useWindowEvent(\"keydown\", e => {\n if (e.key === \"Escape\") {\n onClose?.();\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n return (\n <>\n {triggerComponent}\n {isOpen && (\n <div\n className={containerClasses}\n ref={refs.setFloating}\n style={floatingStyles}\n {...getFloatingProps()}\n >\n <div className=\"mobius-popover\">\n <header className=\"mobius-popover__header\">\n <Button\n type=\"button\"\n className=\"mobius-popover__close-button\"\n onClick={toggleVisibility}\n aria-label=\"Close\"\n variant=\"ghost\"\n >\n <Icon\n icon={cross}\n size=\"md\"\n className=\"mobius-popover__close-icon\"\n />\n </Button>\n </header>\n <div className=\"mobius-popover__body\">{children}</div>\n </div>\n <FloatingArrow\n ref={arrowRef}\n context={context}\n width={20}\n className=\"mobius-popover__arrow-icon\"\n />\n </div>\n )}\n </>\n );\n};\n", "\"use client\";\n\nimport type { MouseEvent, ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Loading } from \"./Loading\";\nimport type { UseButtonProps } from \"../../hooks/useButton\";\nimport { useButton } from \"../../hooks/useButton\";\nimport { Success } from \"./Success\";\nimport \"./Button.css\";\n\nexport type ButtonElementType = HTMLButtonElement;\n\nexport type Variant = \"primary\" | \"secondary\" | \"ghost\" | \"basic\" | \"link\";\n\nexport type Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends UseButtonProps, DOMProps, RefAttributes<ButtonElementType> {\n /** The name of the button when submitted in a form */\n name?: string | undefined;\n /** The value of the button when submitted in a form */\n value?: string | undefined;\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Shortlist of styles */\n variant?: Variant;\n size?: Size;\n /** Display loading spinner */\n isLoading?: boolean;\n /** Display success style */\n isSuccess?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n children?: ReactNode;\n}\n\nconst Button = ({ ref, ...props }: ButtonProps) => {\n const {\n children,\n elementType: Component = \"button\" as React.ElementType,\n isDisabled,\n isLoading,\n isSuccess,\n variant = \"primary\",\n size = \"md\",\n\n onPress,\n\n onClick,\n ...otherProps\n } = props;\n const { buttonProps } = useButton(props);\n\n // Reshape class name and apply to outer element\n otherProps.className = classNames(\n \"mobius\",\n \"mobius-button\",\n `--variant-${variant}`,\n `--size-${size}`,\n {\n \"--is-disabled\": isDisabled,\n \"--is-loading\": isLoading,\n \"--is-success\": isSuccess && !isLoading,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...buttonProps} {...otherProps}>\n {isLoading ? <Loading>{children}</Loading> : children}\n {isSuccess && !isLoading && <Success />}\n </Component>\n );\n};\n\nButton.displayName = \"Button\";\nexport { Button };\n", "import type { ReactNode } from \"react\";\nimport { loading } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\ntype LoadingProps = {\n children: ReactNode;\n};\n\nconst Loading = (props: LoadingProps) => {\n const { children } = props;\n\n return (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={loading} spin size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__loading-text\">\n Loading\n </VisuallyHidden>\n {children}\n </>\n );\n};\n\nexport { Loading };\n", "import classNames from \"classnames/dedupe\";\nimport type { IconProps } from \"./types\";\nimport \"./Icon.css\";\n\nconst ICON_PREFIX = \"mobius-icon\";\n\nconst capitaliseFirstLetter = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\nexport function Icon({\n ref,\n icon,\n className,\n size = \"xs\",\n color,\n fixedWidth,\n spin,\n spinReverse,\n title,\n ...otherProps\n}: IconProps) {\n if (!icon) {\n throw new Error(\"Must specify icon object\");\n }\n\n const classes = classNames(\n \"mobius\",\n \"mobius-icon\",\n `svg-inline--${ICON_PREFIX}`,\n `--size-${size}`,\n className,\n {\n [`${ICON_PREFIX}-fw`]: fixedWidth,\n [`${ICON_PREFIX}-spin`]: spin || spinReverse,\n [`${ICON_PREFIX}-spin-reverse`]: spinReverse,\n },\n );\n\n const { iconName, width, height, svgPathData } = icon;\n const formattedIconName = iconName.split(\"-\").join(\" \");\n\n const defaultTitle = `${capitaliseFirstLetter(formattedIconName)} icon`;\n const titleText = title || defaultTitle;\n\n return (\n <svg\n ref={ref}\n focusable=\"false\"\n data-icon={iconName}\n className={classes}\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${width} ${height}`}\n style={{ color }}\n {...otherProps}\n >\n <title>{titleText}</title>\n <path fill=\"currentColor\" d={svgPathData} />\n </svg>\n );\n}\n", "import type { AriaRole, JSXElementConstructor, ReactNode } from \"react\";\n\nexport interface VisuallyHiddenProps {\n /** The content to visually hide. */\n children?: ReactNode;\n id?: string;\n role?: AriaRole;\n\n className?: string;\n\n /**\n * The element type for the container. Defaults to 'div'\n */\n elementType?: string | JSXElementConstructor<any>;\n}\n\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n const {\n className,\n children,\n elementType: Component = \"div\",\n ...otherProps\n } = props;\n\n return (\n <Component\n className={className}\n style={{\n border: 0,\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n }}\n {...otherProps}\n >\n {children}\n </Component>\n );\n}\n", "import type { JSXElementConstructor } from \"react\";\nimport { useCallback } from \"react\";\n\nexport interface UseButtonProps {\n elementType?:\n | \"button\"\n | \"a\"\n | \"span\"\n | \"input\"\n | JSXElementConstructor<unknown>\n | undefined;\n type?: \"button\" | \"submit\" | \"reset\";\n isDisabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onPress?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n href?: string;\n target?: string;\n rel?: string;\n role?: string;\n name?: string | undefined;\n value?: string | undefined;\n}\n\nexport function useButton({\n elementType = \"button\",\n type = \"button\",\n isDisabled = false,\n href,\n target,\n rel,\n role,\n name,\n value,\n onClick,\n onPress,\n}: UseButtonProps) {\n const realOnClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n onClick?.(event);\n onPress?.(event);\n },\n [isDisabled, onClick, onPress],\n );\n\n function getRole() {\n if (role) {\n return role;\n }\n\n if (elementType === \"a\") {\n return undefined;\n }\n\n return \"button\";\n }\n\n const extraProps =\n elementType === \"button\"\n ? { type }\n : {\n role: getRole(),\n };\n\n return {\n buttonProps: {\n href: elementType === \"a\" ? href : undefined,\n target: elementType === \"a\" ? target : undefined,\n rel: elementType === \"a\" ? rel : undefined,\n tabIndex: isDisabled ? -1 : 0,\n disabled: isDisabled || undefined,\n \"aria-disabled\": isDisabled || undefined,\n name:\n elementType === \"input\" || elementType === \"button\" ? name : undefined,\n value:\n elementType === \"input\" || elementType === \"button\" ? value : undefined,\n ...extraProps,\n onClick: realOnClick,\n },\n };\n}\n", "import { tick } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\nconst Success = () => (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={tick} size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__success-text\">\n Success\n </VisuallyHidden>\n </>\n);\n\nexport { Success };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAUO;AACP,IAAAC,gBAAsB;AACtB,IAAAC,iBAAuB;AAEvB,IAAAF,
|
|
4
|
+
"sourcesContent": ["export * from \"./Popover\";\n", "import {\n FloatingArrow,\n arrow,\n autoUpdate,\n flip,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { cross } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { cloneElement, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useWindowEvent } from \"@simplybusiness/mobius-hooks\";\nimport type { DOMProps } from \"../../types\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport \"./Popover.css\";\n\nexport type PopoverElementType = HTMLDivElement;\n\nexport interface PopoverProps\n extends DOMProps, RefAttributes<PopoverElementType> {\n children?: ReactNode;\n trigger: ReactElement;\n /** Callback that fires each time the accordion is opened */\n onOpen?: () => void;\n /** Callback that fires each time the accordion is closed */\n onClose?: () => void;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nconst OFFSET_FROM_CONTENT_DEFAULT = 10;\n\nexport const Popover = (props: PopoverProps) => {\n const { trigger, children, onOpen, onClose, className } = props;\n const arrowRef = useRef(null);\n const floatingContainerRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n arrow({\n element: arrowRef,\n }),\n offset(OFFSET_FROM_CONTENT_DEFAULT),\n shift(),\n flip(),\n ],\n });\n const dismiss = useDismiss(context, {\n bubbles: true,\n outsidePress: (event: MouseEvent) => {\n // Prevent 'onClose' from firing when clicking the toggle to close\n const toggle = refs.reference.current as HTMLElement;\n const isToggleClick = !toggle?.contains(event.target as HTMLElement);\n if (isToggleClick) {\n onClose?.();\n }\n return true;\n },\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-popover__container\",\n className,\n );\n\n const setFloatingRef = useCallback(\n (node: HTMLDivElement | null) => {\n refs.setFloating(node);\n floatingContainerRef.current = node;\n },\n [refs],\n );\n\n // Native listener to prevent clicks inside the popover from activating\n // interactive ancestors. Must be native because React's onClick fires\n // too late via delegation.\n useEffect(() => {\n const el = floatingContainerRef.current;\n if (!el) return;\n\n const preventLabelActivation = (e: Event) => {\n const target = e.target as HTMLElement;\n // Allow default behavior for interactive elements (links, inputs, etc.)\n // so they remain functional inside the popover.\n if (!target.closest(\"a[href], input, select, textarea\")) {\n e.preventDefault();\n }\n };\n el.addEventListener(\"click\", preventLabelActivation);\n return () => el.removeEventListener(\"click\", preventLabelActivation);\n }, [isOpen]);\n\n const toggleVisibility = () => {\n if (isOpen) {\n setIsOpen(false);\n onClose?.();\n return;\n }\n\n setIsOpen(true);\n onOpen?.();\n };\n\n const triggerComponent = cloneElement(trigger, {\n ref: refs.setReference,\n className: classNames(\n (trigger.props as { className?: string }).className,\n \"mobius-popover__toggle\",\n ),\n onClick: toggleVisibility,\n ...getReferenceProps(),\n } as Record<string, unknown>);\n\n useWindowEvent(\"keydown\", e => {\n if (e.key === \"Escape\") {\n onClose?.();\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n return (\n <>\n {triggerComponent}\n {isOpen && (\n <div\n className={containerClasses}\n ref={setFloatingRef}\n style={floatingStyles}\n {...getFloatingProps()}\n >\n <div className=\"mobius-popover\">\n <header className=\"mobius-popover__header\">\n <Button\n type=\"button\"\n className=\"mobius-popover__close-button\"\n onClick={toggleVisibility}\n aria-label=\"Close\"\n variant=\"ghost\"\n >\n <Icon\n icon={cross}\n size=\"md\"\n className=\"mobius-popover__close-icon\"\n />\n </Button>\n </header>\n <div className=\"mobius-popover__body\">{children}</div>\n </div>\n <FloatingArrow\n ref={arrowRef}\n context={context}\n width={20}\n className=\"mobius-popover__arrow-icon\"\n />\n </div>\n )}\n </>\n );\n};\n", "\"use client\";\n\nimport type { MouseEvent, ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Loading } from \"./Loading\";\nimport type { UseButtonProps } from \"../../hooks/useButton\";\nimport { useButton } from \"../../hooks/useButton\";\nimport { Success } from \"./Success\";\nimport \"./Button.css\";\n\nexport type ButtonElementType = HTMLButtonElement;\n\nexport type Variant = \"primary\" | \"secondary\" | \"ghost\" | \"basic\" | \"link\";\n\nexport type Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends UseButtonProps, DOMProps, RefAttributes<ButtonElementType> {\n /** The name of the button when submitted in a form */\n name?: string | undefined;\n /** The value of the button when submitted in a form */\n value?: string | undefined;\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Shortlist of styles */\n variant?: Variant;\n size?: Size;\n /** Display loading spinner */\n isLoading?: boolean;\n /** Display success style */\n isSuccess?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n children?: ReactNode;\n}\n\nconst Button = ({ ref, ...props }: ButtonProps) => {\n const {\n children,\n elementType: Component = \"button\" as React.ElementType,\n isDisabled,\n isLoading,\n isSuccess,\n variant = \"primary\",\n size = \"md\",\n\n onPress,\n\n onClick,\n ...otherProps\n } = props;\n const { buttonProps } = useButton(props);\n\n // Reshape class name and apply to outer element\n otherProps.className = classNames(\n \"mobius\",\n \"mobius-button\",\n `--variant-${variant}`,\n `--size-${size}`,\n {\n \"--is-disabled\": isDisabled,\n \"--is-loading\": isLoading,\n \"--is-success\": isSuccess && !isLoading,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...buttonProps} {...otherProps}>\n {isLoading ? <Loading>{children}</Loading> : children}\n {isSuccess && !isLoading && <Success />}\n </Component>\n );\n};\n\nButton.displayName = \"Button\";\nexport { Button };\n", "import type { ReactNode } from \"react\";\nimport { loading } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\ntype LoadingProps = {\n children: ReactNode;\n};\n\nconst Loading = (props: LoadingProps) => {\n const { children } = props;\n\n return (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={loading} spin size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__loading-text\">\n Loading\n </VisuallyHidden>\n {children}\n </>\n );\n};\n\nexport { Loading };\n", "import classNames from \"classnames/dedupe\";\nimport type { IconProps } from \"./types\";\nimport \"./Icon.css\";\n\nconst ICON_PREFIX = \"mobius-icon\";\n\nconst capitaliseFirstLetter = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\nexport function Icon({\n ref,\n icon,\n className,\n size = \"xs\",\n color,\n fixedWidth,\n spin,\n spinReverse,\n title,\n ...otherProps\n}: IconProps) {\n if (!icon) {\n throw new Error(\"Must specify icon object\");\n }\n\n const classes = classNames(\n \"mobius\",\n \"mobius-icon\",\n `svg-inline--${ICON_PREFIX}`,\n `--size-${size}`,\n className,\n {\n [`${ICON_PREFIX}-fw`]: fixedWidth,\n [`${ICON_PREFIX}-spin`]: spin || spinReverse,\n [`${ICON_PREFIX}-spin-reverse`]: spinReverse,\n },\n );\n\n const { iconName, width, height, svgPathData } = icon;\n const formattedIconName = iconName.split(\"-\").join(\" \");\n\n const defaultTitle = `${capitaliseFirstLetter(formattedIconName)} icon`;\n const titleText = title || defaultTitle;\n\n return (\n <svg\n ref={ref}\n focusable=\"false\"\n data-icon={iconName}\n className={classes}\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${width} ${height}`}\n style={{ color }}\n {...otherProps}\n >\n <title>{titleText}</title>\n <path fill=\"currentColor\" d={svgPathData} />\n </svg>\n );\n}\n", "import type { AriaRole, JSXElementConstructor, ReactNode } from \"react\";\n\nexport interface VisuallyHiddenProps {\n /** The content to visually hide. */\n children?: ReactNode;\n id?: string;\n role?: AriaRole;\n\n className?: string;\n\n /**\n * The element type for the container. Defaults to 'div'\n */\n elementType?: string | JSXElementConstructor<any>;\n}\n\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n const {\n className,\n children,\n elementType: Component = \"div\",\n ...otherProps\n } = props;\n\n return (\n <Component\n className={className}\n style={{\n border: 0,\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n }}\n {...otherProps}\n >\n {children}\n </Component>\n );\n}\n", "import type { JSXElementConstructor } from \"react\";\nimport { useCallback } from \"react\";\n\nexport interface UseButtonProps {\n elementType?:\n | \"button\"\n | \"a\"\n | \"span\"\n | \"input\"\n | JSXElementConstructor<unknown>\n | undefined;\n type?: \"button\" | \"submit\" | \"reset\";\n isDisabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onPress?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n href?: string;\n target?: string;\n rel?: string;\n role?: string;\n name?: string | undefined;\n value?: string | undefined;\n}\n\nexport function useButton({\n elementType = \"button\",\n type = \"button\",\n isDisabled = false,\n href,\n target,\n rel,\n role,\n name,\n value,\n onClick,\n onPress,\n}: UseButtonProps) {\n const realOnClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n onClick?.(event);\n onPress?.(event);\n },\n [isDisabled, onClick, onPress],\n );\n\n function getRole() {\n if (role) {\n return role;\n }\n\n if (elementType === \"a\") {\n return undefined;\n }\n\n return \"button\";\n }\n\n const extraProps =\n elementType === \"button\"\n ? { type }\n : {\n role: getRole(),\n };\n\n return {\n buttonProps: {\n href: elementType === \"a\" ? href : undefined,\n target: elementType === \"a\" ? target : undefined,\n rel: elementType === \"a\" ? rel : undefined,\n tabIndex: isDisabled ? -1 : 0,\n disabled: isDisabled || undefined,\n \"aria-disabled\": isDisabled || undefined,\n name:\n elementType === \"input\" || elementType === \"button\" ? name : undefined,\n value:\n elementType === \"input\" || elementType === \"button\" ? value : undefined,\n ...extraProps,\n onClick: realOnClick,\n },\n };\n}\n", "import { tick } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\nconst Success = () => (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={tick} size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__success-text\">\n Success\n </VisuallyHidden>\n </>\n);\n\nexport { Success };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_react", "import_icons", "import_dedupe", "import_dedupe", "classNames", "import_jsx_runtime", "import_jsx_runtime", "import_icons", "import_jsx_runtime", "import_jsx_runtime", "classNames", "import_jsx_runtime", "classNames"]
|
|
7
7
|
}
|