@flipdish/ui-library 0.34.2 → 0.35.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.
Files changed (62) hide show
  1. package/dist/components/__internal__/popover/ScrollClosingPopover.cjs +26 -0
  2. package/dist/components/__internal__/popover/ScrollClosingPopover.cjs.map +1 -0
  3. package/dist/components/__internal__/popover/ScrollClosingPopover.d.ts +7 -0
  4. package/dist/components/__internal__/popover/ScrollClosingPopover.d.ts.map +1 -0
  5. package/dist/components/__internal__/popover/ScrollClosingPopover.js +24 -0
  6. package/dist/components/__internal__/popover/ScrollClosingPopover.js.map +1 -0
  7. package/dist/components/__internal__/popover/hooks/useCloseOnTriggerScroll.cjs +33 -0
  8. package/dist/components/__internal__/popover/hooks/useCloseOnTriggerScroll.cjs.map +1 -0
  9. package/dist/components/__internal__/popover/hooks/useCloseOnTriggerScroll.d.ts +22 -0
  10. package/dist/components/__internal__/popover/hooks/useCloseOnTriggerScroll.d.ts.map +1 -0
  11. package/dist/components/__internal__/popover/hooks/useCloseOnTriggerScroll.js +31 -0
  12. package/dist/components/__internal__/popover/hooks/useCloseOnTriggerScroll.js.map +1 -0
  13. package/dist/components/molecules/Dropdown/index.cjs +2 -1
  14. package/dist/components/molecules/Dropdown/index.cjs.map +1 -1
  15. package/dist/components/molecules/Dropdown/index.js +3 -2
  16. package/dist/components/molecules/Dropdown/index.js.map +1 -1
  17. package/dist/components/molecules/RadioGroup/components/RadioGroupAvatarCard.cjs +6 -10
  18. package/dist/components/molecules/RadioGroup/components/RadioGroupAvatarCard.cjs.map +1 -1
  19. package/dist/components/molecules/RadioGroup/components/RadioGroupAvatarCard.d.ts +13 -5
  20. package/dist/components/molecules/RadioGroup/components/RadioGroupAvatarCard.d.ts.map +1 -1
  21. package/dist/components/molecules/RadioGroup/components/RadioGroupAvatarCard.js +6 -10
  22. package/dist/components/molecules/RadioGroup/components/RadioGroupAvatarCard.js.map +1 -1
  23. package/dist/components/molecules/RadioGroup/hooks/useCommitOnPress.cjs +128 -0
  24. package/dist/components/molecules/RadioGroup/hooks/useCommitOnPress.cjs.map +1 -0
  25. package/dist/components/molecules/RadioGroup/hooks/useCommitOnPress.d.ts +70 -0
  26. package/dist/components/molecules/RadioGroup/hooks/useCommitOnPress.d.ts.map +1 -0
  27. package/dist/components/molecules/RadioGroup/hooks/useCommitOnPress.js +123 -0
  28. package/dist/components/molecules/RadioGroup/hooks/useCommitOnPress.js.map +1 -0
  29. package/dist/components/molecules/RadioGroup/index.d.ts +1 -1
  30. package/dist/components/molecules/RadioGroup/index.d.ts.map +1 -1
  31. package/dist/components/molecules/RadioGroup/radioGroup.types.d.ts +9 -0
  32. package/dist/components/molecules/RadioGroup/radioGroup.types.d.ts.map +1 -1
  33. package/dist/components/molecules/Select/components/MultiSelect.cjs +2 -1
  34. package/dist/components/molecules/Select/components/MultiSelect.cjs.map +1 -1
  35. package/dist/components/molecules/Select/components/MultiSelect.js +3 -2
  36. package/dist/components/molecules/Select/components/MultiSelect.js.map +1 -1
  37. package/dist/components/molecules/Select/components/Popover.cjs +2 -2
  38. package/dist/components/molecules/Select/components/Popover.cjs.map +1 -1
  39. package/dist/components/molecules/Select/components/Popover.js +2 -2
  40. package/dist/components/molecules/Select/components/Popover.js.map +1 -1
  41. package/dist/components/organisms/DatePicker/components/DateRangePicker.cjs +2 -1
  42. package/dist/components/organisms/DatePicker/components/DateRangePicker.cjs.map +1 -1
  43. package/dist/components/organisms/DatePicker/components/DateRangePicker.d.ts.map +1 -1
  44. package/dist/components/organisms/DatePicker/components/DateRangePicker.js +3 -2
  45. package/dist/components/organisms/DatePicker/components/DateRangePicker.js.map +1 -1
  46. package/dist/components/organisms/DatePicker/index.cjs +2 -1
  47. package/dist/components/organisms/DatePicker/index.cjs.map +1 -1
  48. package/dist/components/organisms/DatePicker/index.d.ts.map +1 -1
  49. package/dist/components/organisms/DatePicker/index.js +3 -2
  50. package/dist/components/organisms/DatePicker/index.js.map +1 -1
  51. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.cjs +2 -1
  52. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.cjs.map +1 -1
  53. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.d.ts.map +1 -1
  54. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.js +3 -2
  55. package/dist/components/organisms/FilterBar/components/FilterDropdownMenu.js.map +1 -1
  56. package/dist/utilities/__internal__/scrollUtils/scroll.utils.cjs +23 -0
  57. package/dist/utilities/__internal__/scrollUtils/scroll.utils.cjs.map +1 -0
  58. package/dist/utilities/__internal__/scrollUtils/scroll.utils.d.ts +11 -0
  59. package/dist/utilities/__internal__/scrollUtils/scroll.utils.d.ts.map +1 -0
  60. package/dist/utilities/__internal__/scrollUtils/scroll.utils.js +21 -0
  61. package/dist/utilities/__internal__/scrollUtils/scroll.utils.js.map +1 -0
  62. package/package.json +4 -4
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var utils = require('@react-stately/utils');
5
+ var React = require('react');
6
+ var reactAriaComponents = require('react-aria-components');
7
+ var useCloseOnTriggerScroll = require('./hooks/useCloseOnTriggerScroll.cjs');
8
+
9
+ /**
10
+ * `AriaPopover` that also closes when a scroll container around its trigger scrolls. Every popover
11
+ * this library renders inside a React Aria trigger uses it, so a nested scroller never strands one.
12
+ */
13
+ const ScrollClosingPopover = (props) => {
14
+ // React Aria swaps to local state when `isOpen` or `defaultOpen` is set, which the trigger context cannot close; own that state instead so the scroll close reaches it.
15
+ const ownsState = props.isOpen != null || props.defaultOpen != null;
16
+ const [isOpen, setOpen] = utils.useControlledState(props.isOpen, props.defaultOpen ?? false, props.onOpenChange);
17
+ const close = React.useCallback(() => setOpen(false), [setOpen]);
18
+ const ownState = React.useMemo(() => ({ isOpen, close }), [isOpen, close]);
19
+ useCloseOnTriggerScroll.useCloseOnTriggerScroll({ triggerRef: props.triggerRef, state: ownsState ? ownState : undefined, slot: props.slot });
20
+ if (!ownsState)
21
+ return jsxRuntime.jsx(reactAriaComponents.Popover, { ...props });
22
+ return jsxRuntime.jsx(reactAriaComponents.Popover, { ...props, isOpen: isOpen, onOpenChange: setOpen });
23
+ };
24
+
25
+ exports.ScrollClosingPopover = ScrollClosingPopover;
26
+ //# sourceMappingURL=ScrollClosingPopover.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollClosingPopover.cjs","sources":["../../../../src/components/__internal__/popover/ScrollClosingPopover.tsx"],"sourcesContent":[null],"names":["useControlledState","useCallback","useMemo","useCloseOnTriggerScroll","_jsx","AriaPopover"],"mappings":";;;;;;;;AAQA;;;AAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,KAAuB,KAAI;;AAE9D,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI;IACnE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAGA,wBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;AAC1G,IAAA,MAAM,KAAK,GAAGC,iBAAW,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAGC,aAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEpEC,+CAAuB,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAEpH,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAOC,cAAA,CAACC,2BAAW,EAAA,EAAA,GAAK,KAAK,GAAI;AACjD,IAAA,OAAOD,cAAA,CAACC,2BAAW,EAAA,EAAA,GAAK,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAI;AAC1E;;"}
@@ -0,0 +1,7 @@
1
+ import type { PopoverProps as AriaPopoverProps } from 'react-aria-components';
2
+ /**
3
+ * `AriaPopover` that also closes when a scroll container around its trigger scrolls. Every popover
4
+ * this library renders inside a React Aria trigger uses it, so a nested scroller never strands one.
5
+ */
6
+ export declare const ScrollClosingPopover: (props: AriaPopoverProps) => import("react").JSX.Element;
7
+ //# sourceMappingURL=ScrollClosingPopover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollClosingPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/__internal__/popover/ScrollClosingPopover.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9E;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,gBAAgB,gCAW3D,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useControlledState } from '@react-stately/utils';
3
+ import { useCallback, useMemo } from 'react';
4
+ import { Popover } from 'react-aria-components';
5
+ import { useCloseOnTriggerScroll } from './hooks/useCloseOnTriggerScroll.js';
6
+
7
+ /**
8
+ * `AriaPopover` that also closes when a scroll container around its trigger scrolls. Every popover
9
+ * this library renders inside a React Aria trigger uses it, so a nested scroller never strands one.
10
+ */
11
+ const ScrollClosingPopover = (props) => {
12
+ // React Aria swaps to local state when `isOpen` or `defaultOpen` is set, which the trigger context cannot close; own that state instead so the scroll close reaches it.
13
+ const ownsState = props.isOpen != null || props.defaultOpen != null;
14
+ const [isOpen, setOpen] = useControlledState(props.isOpen, props.defaultOpen ?? false, props.onOpenChange);
15
+ const close = useCallback(() => setOpen(false), [setOpen]);
16
+ const ownState = useMemo(() => ({ isOpen, close }), [isOpen, close]);
17
+ useCloseOnTriggerScroll({ triggerRef: props.triggerRef, state: ownsState ? ownState : undefined, slot: props.slot });
18
+ if (!ownsState)
19
+ return jsx(Popover, { ...props });
20
+ return jsx(Popover, { ...props, isOpen: isOpen, onOpenChange: setOpen });
21
+ };
22
+
23
+ export { ScrollClosingPopover };
24
+ //# sourceMappingURL=ScrollClosingPopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollClosingPopover.js","sources":["../../../../src/components/__internal__/popover/ScrollClosingPopover.tsx"],"sourcesContent":[null],"names":["_jsx","AriaPopover"],"mappings":";;;;;;AAQA;;;AAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,KAAuB,KAAI;;AAE9D,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI;IACnE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;AAC1G,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEpE,uBAAuB,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAEpH,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAOA,GAAA,CAACC,OAAW,EAAA,EAAA,GAAK,KAAK,GAAI;AACjD,IAAA,OAAOD,GAAA,CAACC,OAAW,EAAA,EAAA,GAAK,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAI;AAC1E;;"}
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var reactAriaComponents = require('react-aria-components');
5
+ var scroll_utils = require('../../../../utilities/__internal__/scrollUtils/scroll.utils.cjs');
6
+
7
+ /**
8
+ * Closes the enclosing React Aria popover when a scroll container holding its trigger scrolls,
9
+ * the document included. A modal popover only locks the document, so inside a nested scroller it
10
+ * would otherwise stay put while its trigger moves away. Scrolls inside the popover are ignored.
11
+ *
12
+ * Call it from a component rendered inside the trigger (`MenuTrigger`, `Select`, `DatePicker`,
13
+ * `DialogTrigger`), which is where both contexts are provided.
14
+ *
15
+ * @param options Trigger, state and slot overrides, described on `UseCloseOnTriggerScrollOptions`.
16
+ */
17
+ const useCloseOnTriggerScroll = (options = {}) => {
18
+ const contextState = React.useContext(reactAriaComponents.OverlayTriggerStateContext);
19
+ const popoverContext = reactAriaComponents.useSlottedContext(reactAriaComponents.PopoverContext, options.slot);
20
+ const state = options.state ?? contextState;
21
+ const resolvedTriggerRef = options.triggerRef ?? popoverContext?.triggerRef;
22
+ const isOpen = state?.isOpen ?? false;
23
+ const close = state?.close;
24
+ React.useEffect(() => {
25
+ const trigger = resolvedTriggerRef?.current;
26
+ if (!isOpen || !close || !trigger)
27
+ return;
28
+ return scroll_utils.subscribeToAncestorScroll(trigger, close);
29
+ }, [isOpen, close, resolvedTriggerRef]);
30
+ };
31
+
32
+ exports.useCloseOnTriggerScroll = useCloseOnTriggerScroll;
33
+ //# sourceMappingURL=useCloseOnTriggerScroll.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCloseOnTriggerScroll.cjs","sources":["../../../../../src/components/__internal__/popover/hooks/useCloseOnTriggerScroll.ts"],"sourcesContent":[null],"names":["useContext","OverlayTriggerStateContext","useSlottedContext","PopoverContext","useEffect","subscribeToAncestorScroll"],"mappings":";;;;;;AAeA;;;;;;;;;AASG;MACU,uBAAuB,GAAG,CAAC,OAAA,GAA0C,EAAE,KAAI;AACtF,IAAA,MAAM,YAAY,GAAGA,gBAAU,CAACC,8CAA0B,CAAC;IAC3D,MAAM,cAAc,GAAGC,qCAAiB,CAACC,kCAAc,EAAE,OAAO,CAAC,IAAI,CAAC;AACtE,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY;IAC3C,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,IAAI,cAAc,EAAE,UAAU;AAC3E,IAAA,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,KAAK;AACrC,IAAA,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK;IAE1BC,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,GAAG,kBAAkB,EAAE,OAAO;AAC3C,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE;AACnC,QAAA,OAAOC,sCAAyB,CAAC,OAAO,EAAE,KAAK,CAAC;IAClD,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACzC;;"}
@@ -0,0 +1,22 @@
1
+ import { type RefObject } from 'react';
2
+ import { type OverlayTriggerState } from 'react-aria-components';
3
+ export interface UseCloseOnTriggerScrollOptions {
4
+ /** Overrides the trigger from `PopoverContext`, for popovers given their own `triggerRef`. */
5
+ triggerRef?: RefObject<Element | null>;
6
+ /** Overrides the state from `OverlayTriggerStateContext`, for popovers that own their open state via `isOpen` or `defaultOpen`. */
7
+ state?: Pick<OverlayTriggerState, 'isOpen' | 'close'>;
8
+ /** The popover's `slot`, so a `PopoverContext` that only defines named slots resolves instead of throwing. */
9
+ slot?: string | null;
10
+ }
11
+ /**
12
+ * Closes the enclosing React Aria popover when a scroll container holding its trigger scrolls,
13
+ * the document included. A modal popover only locks the document, so inside a nested scroller it
14
+ * would otherwise stay put while its trigger moves away. Scrolls inside the popover are ignored.
15
+ *
16
+ * Call it from a component rendered inside the trigger (`MenuTrigger`, `Select`, `DatePicker`,
17
+ * `DialogTrigger`), which is where both contexts are provided.
18
+ *
19
+ * @param options Trigger, state and slot overrides, described on `UseCloseOnTriggerScrollOptions`.
20
+ */
21
+ export declare const useCloseOnTriggerScroll: (options?: UseCloseOnTriggerScrollOptions) => void;
22
+ //# sourceMappingURL=useCloseOnTriggerScroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCloseOnTriggerScroll.d.ts","sourceRoot":"","sources":["../../../../../src/components/__internal__/popover/hooks/useCloseOnTriggerScroll.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,KAAK,mBAAmB,EAAiE,MAAM,uBAAuB,CAAC;AAGhI,MAAM,WAAW,8BAA8B;IAC7C,8FAA8F;IAC9F,UAAU,CAAC,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACvC,mIAAmI;IACnI,KAAK,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;IACtD,8GAA8G;IAC9G,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAS,8BAAmC,SAanF,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { useContext, useEffect } from 'react';
2
+ import { OverlayTriggerStateContext, useSlottedContext, PopoverContext } from 'react-aria-components';
3
+ import { subscribeToAncestorScroll } from '../../../../utilities/__internal__/scrollUtils/scroll.utils.js';
4
+
5
+ /**
6
+ * Closes the enclosing React Aria popover when a scroll container holding its trigger scrolls,
7
+ * the document included. A modal popover only locks the document, so inside a nested scroller it
8
+ * would otherwise stay put while its trigger moves away. Scrolls inside the popover are ignored.
9
+ *
10
+ * Call it from a component rendered inside the trigger (`MenuTrigger`, `Select`, `DatePicker`,
11
+ * `DialogTrigger`), which is where both contexts are provided.
12
+ *
13
+ * @param options Trigger, state and slot overrides, described on `UseCloseOnTriggerScrollOptions`.
14
+ */
15
+ const useCloseOnTriggerScroll = (options = {}) => {
16
+ const contextState = useContext(OverlayTriggerStateContext);
17
+ const popoverContext = useSlottedContext(PopoverContext, options.slot);
18
+ const state = options.state ?? contextState;
19
+ const resolvedTriggerRef = options.triggerRef ?? popoverContext?.triggerRef;
20
+ const isOpen = state?.isOpen ?? false;
21
+ const close = state?.close;
22
+ useEffect(() => {
23
+ const trigger = resolvedTriggerRef?.current;
24
+ if (!isOpen || !close || !trigger)
25
+ return;
26
+ return subscribeToAncestorScroll(trigger, close);
27
+ }, [isOpen, close, resolvedTriggerRef]);
28
+ };
29
+
30
+ export { useCloseOnTriggerScroll };
31
+ //# sourceMappingURL=useCloseOnTriggerScroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCloseOnTriggerScroll.js","sources":["../../../../../src/components/__internal__/popover/hooks/useCloseOnTriggerScroll.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAeA;;;;;;;;;AASG;MACU,uBAAuB,GAAG,CAAC,OAAA,GAA0C,EAAE,KAAI;AACtF,IAAA,MAAM,YAAY,GAAG,UAAU,CAAC,0BAA0B,CAAC;IAC3D,MAAM,cAAc,GAAG,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC;AACtE,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY;IAC3C,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,IAAI,cAAc,EAAE,UAAU;AAC3E,IAAA,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,KAAK;AACrC,IAAA,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK;IAE1B,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,GAAG,kBAAkB,EAAE,OAAO;AAC3C,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE;AACnC,QAAA,OAAO,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC;IAClD,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AACzC;;"}
@@ -11,6 +11,7 @@ var cx = require('@flipdish/ui-library/utilities/cx');
11
11
  var testIdUtils = require('@flipdish/ui-library/utilities/testIdUtils');
12
12
  var React = require('react');
13
13
  var reactAriaComponents = require('react-aria-components');
14
+ var ScrollClosingPopover = require('../../__internal__/popover/ScrollClosingPopover.cjs');
14
15
 
15
16
  const DropdownItem = ({ label, children, addon, icon: Icon, avatarUrl, unstyled, selectionIndicator = 'checkmark', 'data-testid': dataTestId, ...props }) => {
16
17
  const prefix = testIdUtils.useTestIdPrefix();
@@ -48,7 +49,7 @@ const DropdownMenu = ({ 'data-testid': dataTestId, ...props }) => {
48
49
  return (jsxRuntime.jsx(reactAriaComponents.Menu, { ...props, "data-testid": menuTestId, className: (state) => cx.cx('h-min overflow-y-auto py-1 outline-hidden select-none', typeof props.className === 'function' ? props.className(state) : props.className) }));
49
50
  };
50
51
  const DropdownPopover = (props) => {
51
- return (jsxRuntime.jsx(reactAriaComponents.Popover, { placement: "bottom right", ...props, className: (state) => cx.cx('w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform', state.isEntering &&
52
+ return (jsxRuntime.jsx(ScrollClosingPopover.ScrollClosingPopover, { placement: "bottom right", ...props, className: (state) => cx.cx('w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform', state.isEntering &&
52
53
  'duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5', state.isExiting &&
53
54
  'duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5', typeof props.className === 'function' ? props.className(state) : props.className), children: props.children }));
54
55
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/molecules/Dropdown/index.tsx"],"sourcesContent":[null],"names":["useTestIdPrefix","slugifyTestId","joinTestId","useCallback","_jsx","Check","cx","CheckboxBase","RadioButtonBase","ToggleBase","AriaMenuItem","_jsxs","Avatar","ChevronRight","AriaMenu","AriaPopover","AriaSeparator","useResolvedTestId","Button","DotsVertical","TestIdProvider","AriaMenuTrigger","AriaMenuSection","AriaHeader"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/molecules/Dropdown/index.tsx"],"sourcesContent":[null],"names":["useTestIdPrefix","slugifyTestId","joinTestId","useCallback","_jsx","Check","cx","CheckboxBase","RadioButtonBase","ToggleBase","AriaMenuItem","_jsxs","Avatar","ChevronRight","AriaMenu","ScrollClosingPopover","AriaSeparator","useResolvedTestId","Button","DotsVertical","TestIdProvider","AriaMenuTrigger","AriaMenuSection","AriaHeader"],"mappings":"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"}
@@ -8,7 +8,8 @@ import { ToggleBase } from '@flipdish/ui-library/components/atoms/Toggle';
8
8
  import { cx } from '@flipdish/ui-library/utilities/cx';
9
9
  import { useResolvedTestId, useTestIdPrefix, slugifyTestId, joinTestId, TestIdProvider } from '@flipdish/ui-library/utilities/testIdUtils';
10
10
  import { useCallback } from 'react';
11
- import { Header, MenuSection, Separator, MenuItem, Menu, Popover, MenuTrigger } from 'react-aria-components';
11
+ import { Header, MenuSection, Separator, MenuItem, Menu, MenuTrigger } from 'react-aria-components';
12
+ import { ScrollClosingPopover } from '../../__internal__/popover/ScrollClosingPopover.js';
12
13
 
13
14
  const DropdownItem = ({ label, children, addon, icon: Icon, avatarUrl, unstyled, selectionIndicator = 'checkmark', 'data-testid': dataTestId, ...props }) => {
14
15
  const prefix = useTestIdPrefix();
@@ -46,7 +47,7 @@ const DropdownMenu = ({ 'data-testid': dataTestId, ...props }) => {
46
47
  return (jsx(Menu, { ...props, "data-testid": menuTestId, className: (state) => cx('h-min overflow-y-auto py-1 outline-hidden select-none', typeof props.className === 'function' ? props.className(state) : props.className) }));
47
48
  };
48
49
  const DropdownPopover = (props) => {
49
- return (jsx(Popover, { placement: "bottom right", ...props, className: (state) => cx('w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform', state.isEntering &&
50
+ return (jsx(ScrollClosingPopover, { placement: "bottom right", ...props, className: (state) => cx('w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform', state.isEntering &&
50
51
  'duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5', state.isExiting &&
51
52
  'duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5', typeof props.className === 'function' ? props.className(state) : props.className), children: props.children }));
52
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/molecules/Dropdown/index.tsx"],"sourcesContent":[null],"names":["_jsx","AriaMenuItem","_jsxs","AriaMenu","AriaPopover","AriaSeparator","AriaMenuTrigger","AriaMenuSection","AriaHeader"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/molecules/Dropdown/index.tsx"],"sourcesContent":[null],"names":["_jsx","AriaMenuItem","_jsxs","AriaMenu","AriaSeparator","AriaMenuTrigger","AriaMenuSection","AriaHeader"],"mappings":"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"}
@@ -8,6 +8,7 @@ var cx = require('@flipdish/ui-library/utilities/cx');
8
8
  var testIdUtils = require('@flipdish/ui-library/utilities/testIdUtils');
9
9
  var React = require('react');
10
10
  var reactAriaComponents = require('react-aria-components');
11
+ var useCommitOnPress = require('../hooks/useCommitOnPress.cjs');
11
12
 
12
13
  /**
13
14
  * Radio group where each option is a card with a square logo, title, ID-style subtitle and
@@ -16,26 +17,21 @@ var reactAriaComponents = require('react-aria-components');
16
17
  *
17
18
  * @summary pick one entity from logo-led cards
18
19
  */
19
- const RadioGroupAvatarCard = ({ items, size = 'sm', indicator = 'radio', onOptionPress, className, 'data-testid': dataTestId, ...props }) => {
20
+ const RadioGroupAvatarCard = ({ items, size = 'sm', indicator = 'radio', commitOn = 'change', value, defaultValue, onChange, onOptionPress, className, 'data-testid': dataTestId, ...props }) => {
20
21
  const rootTestId = testIdUtils.useResolvedTestId({ testId: dataTestId, segment: 'radio-group', rootName: 'radio-group' });
21
22
  const Indicator = indicator === 'checkbox' ? Checkbox.CheckboxBase : RadioButton.RadioButtonBase;
22
23
  // Ids, not test ids: two groups with the same values on one page must not describe each other's options.
23
24
  const groupId = React.useId();
24
- return (jsxRuntime.jsx(reactAriaComponents.RadioGroup, { ...props, "data-testid": rootTestId, className: (state) => cx.cx('flex flex-col gap-3', typeof className === 'function' ? className(state) : className), children: ({ state, isDisabled: isGroupDisabled }) => items.map((item) => {
25
+ const { selectionProps, optionHandlers } = useCommitOnPress.useCommitOnPress({ commitOn, value, defaultValue, onChange, onOptionPress });
26
+ return (jsxRuntime.jsx(reactAriaComponents.RadioGroup, { ...props, ...selectionProps, "data-testid": rootTestId, className: (state) => cx.cx('flex flex-col gap-3', typeof className === 'function' ? className(state) : className), children: ({ state, isDisabled: isGroupDisabled, isReadOnly }) => items.map((item) => {
25
27
  const isSelected = state.selectedValue === item.value;
26
28
  const isDisabled = isGroupDisabled || Boolean(item.disabled);
27
29
  const optionTestId = testIdUtils.joinTestId(rootTestId, `option-${item.value}`);
28
30
  // Slugged: a value with spaces would split `aria-describedby` into several ids.
29
31
  const subtitleId = item.subtitle ? `${groupId}-${testIdUtils.slugifyTestId(item.value)}-subtitle` : undefined;
30
- // The radio is the card's `<label>`; a press in the footer is the footer's own and not an option press. Capture phase,
31
- // because react-aria stops the radio's click from bubbling. Space on the focused radio fires a native click, so keyboard is covered.
32
- const handleClickCapture = (event) => {
33
- if (!isDisabled && event.target instanceof Element && event.target.closest('label'))
34
- onOptionPress?.(item.value);
35
- };
36
32
  return (
37
- // The card, not the radio, carries the selected ring so the footer sits inside the same outline.
38
- jsxRuntime.jsxs("div", { onClickCapture: handleClickCapture, className: cx.cx('flex flex-col rounded-xl bg-primary ring-inset', isSelected ? 'ring-2 ring-brand' : 'ring-1 ring-secondary', isDisabled && 'bg-disabled_subtle ring-disabled_subtle'), children: [jsxRuntime.jsx(reactAriaComponents.Radio, { isDisabled: item.disabled, value: item.value, "aria-label": item.title, "aria-describedby": subtitleId, "data-testid": optionTestId, className: ({ isDisabled, isFocusVisible }) => cx.cx('flex cursor-pointer items-center outline-focus-ring', size === 'md' ? 'gap-4 p-5' : 'gap-3 px-4 py-5', item.footer ? 'rounded-t-xl' : 'rounded-xl', isDisabled && 'cursor-not-allowed', isFocusVisible && 'outline-2 outline-offset-2'), children: ({ isDisabled, isSelected, isFocusVisible }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Avatar.Avatar, { size: size === 'md' ? 'xl' : 'lg', rounded: false, border: true, src: item.src, alt: "", initials: item.initials, placeholderIcon: item.placeholderIcon }), jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [jsxRuntime.jsx("span", { className: cx.cx('truncate font-semibold text-primary', size === 'md' ? 'text-lg' : 'text-md'), children: item.title }), item.subtitle && (jsxRuntime.jsx("span", { id: subtitleId, className: cx.cx('truncate text-tertiary', size === 'md' ? 'text-md' : 'text-sm'), children: item.subtitle }))] }), jsxRuntime.jsx(Indicator, { size: size, isDisabled: isDisabled, isSelected: isSelected, isFocusVisible: isFocusVisible })] })) }), item.footer && jsxRuntime.jsx("div", { className: "flex justify-end border-t border-secondary px-4 py-3", children: item.footer })] }, item.value));
33
+ // The card, not the radio, carries the selected ring and the focus outline so the footer sits inside both.
34
+ jsxRuntime.jsxs("div", { ...optionHandlers(item.value, { isDisabled, isReadOnly }), className: cx.cx('flex flex-col rounded-xl bg-primary outline-focus-ring ring-inset has-[>label[data-focus-visible]]:outline-2 has-[>label[data-focus-visible]]:outline-offset-2', isSelected ? 'ring-2 ring-brand' : 'ring-1 ring-secondary', isDisabled && 'bg-disabled_subtle ring-disabled_subtle'), children: [jsxRuntime.jsx(reactAriaComponents.Radio, { isDisabled: item.disabled, value: item.value, "aria-label": item.title, "aria-describedby": subtitleId, "data-testid": optionTestId, className: ({ isDisabled }) => cx.cx('flex cursor-pointer items-center', size === 'md' ? 'gap-4 p-5' : 'gap-3 px-4 py-5', isDisabled && 'cursor-not-allowed'), children: ({ isDisabled, isSelected, isFocusVisible }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Avatar.Avatar, { size: size === 'md' ? 'xl' : 'lg', rounded: false, border: true, src: item.src, alt: "", initials: item.initials, placeholderIcon: item.placeholderIcon }), jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [jsxRuntime.jsx("span", { className: cx.cx('truncate font-semibold text-primary', size === 'md' ? 'text-lg' : 'text-md'), children: item.title }), item.subtitle && (jsxRuntime.jsx("span", { id: subtitleId, className: cx.cx('truncate text-tertiary', size === 'md' ? 'text-md' : 'text-sm'), children: item.subtitle }))] }), jsxRuntime.jsx(Indicator, { size: size, isDisabled: isDisabled, isSelected: isSelected, isFocusVisible: isFocusVisible })] })) }), item.footer && jsxRuntime.jsx("div", { className: "flex justify-end border-t border-secondary px-4 py-3", children: item.footer })] }, item.value));
39
35
  }) }));
40
36
  };
41
37
 
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroupAvatarCard.cjs","sources":["../../../../../src/components/molecules/RadioGroup/components/RadioGroupAvatarCard.tsx"],"sourcesContent":[null],"names":["useResolvedTestId","CheckboxBase","RadioButtonBase","useId","_jsx","AriaRadioGroup","cx","joinTestId","slugifyTestId","_jsxs","AriaRadio","_Fragment","Avatar"],"mappings":"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"}
1
+ {"version":3,"file":"RadioGroupAvatarCard.cjs","sources":["../../../../../src/components/molecules/RadioGroup/components/RadioGroupAvatarCard.tsx"],"sourcesContent":[null],"names":["useResolvedTestId","CheckboxBase","RadioButtonBase","useId","useCommitOnPress","_jsx","AriaRadioGroup","cx","joinTestId","slugifyTestId","_jsxs","AriaRadio","_Fragment","Avatar"],"mappings":"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"}
@@ -1,14 +1,22 @@
1
1
  import type { RadioGroupProps } from 'react-aria-components';
2
- import type { AvatarCardItemType } from '../radioGroup.types';
3
- interface RadioGroupAvatarCardProps extends RadioGroupProps {
2
+ import type { AvatarCardItemType, OptionPressType } from '../radioGroup.types';
3
+ interface RadioGroupAvatarCardProps extends Omit<RadioGroupProps, 'onChange'> {
4
4
  /** Avatar, text and indicator size of every option. */
5
5
  size?: 'sm' | 'md';
6
6
  /** Entities to choose from; each `value` is the option value. */
7
7
  items: AvatarCardItemType[];
8
8
  /** The selection mark: a radio dot, or the check tile the other flavours use. */
9
9
  indicator?: 'radio' | 'checkbox';
10
- /** Called with the option's value on every press of it, selected or not; `onChange` stays silent for the one already selected. */
11
- onOptionPress?: (value: string) => void;
10
+ /**
11
+ * When `onChange` fires. `change` is the native radio: arrow keys move the check and change the value.
12
+ * `press` is for a choice that navigates: arrow keys only move the check, a press (click, Space, Enter)
13
+ * changes the value, and leaving the group puts the check back on the value.
14
+ */
15
+ commitOn?: 'change' | 'press';
16
+ /** Called with the new value. With `commitOn="press"` the second argument carries the press's modifier keys; otherwise it is absent. */
17
+ onChange?: (value: string, press?: OptionPressType) => void;
18
+ /** Called with the option's value and the press's modifier keys on every press of it, selected or not; `onChange` stays silent for the one already selected. */
19
+ onOptionPress?: (value: string, press: OptionPressType) => void;
12
20
  /** Overrides the root `data-testid`. Options derive from it (e.g. `<root>--option-<value>`). */
13
21
  'data-testid'?: string;
14
22
  }
@@ -19,6 +27,6 @@ interface RadioGroupAvatarCardProps extends RadioGroupProps {
19
27
  *
20
28
  * @summary pick one entity from logo-led cards
21
29
  */
22
- export declare const RadioGroupAvatarCard: ({ items, size, indicator, onOptionPress, className, "data-testid": dataTestId, ...props }: RadioGroupAvatarCardProps) => import("react").JSX.Element;
30
+ export declare const RadioGroupAvatarCard: ({ items, size, indicator, commitOn, value, defaultValue, onChange, onOptionPress, className, "data-testid": dataTestId, ...props }: RadioGroupAvatarCardProps) => import("react").JSX.Element;
23
31
  export {};
24
32
  //# sourceMappingURL=RadioGroupAvatarCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroupAvatarCard.d.ts","sourceRoot":"","sources":["../../../../../src/components/molecules/RadioGroup/components/RadioGroupAvatarCard.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,UAAU,yBAA0B,SAAQ,eAAe;IACzD,uDAAuD;IACvD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,iEAAiE;IACjE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACjC,kIAAkI;IAClI,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gGAAgG;IAChG,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,2FAQlC,yBAAyB,gCAoF3B,CAAC"}
1
+ {"version":3,"file":"RadioGroupAvatarCard.d.ts","sourceRoot":"","sources":["../../../../../src/components/molecules/RadioGroup/components/RadioGroupAvatarCard.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE/E,UAAU,yBAA0B,SAAQ,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;IAC3E,uDAAuD;IACvD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,iEAAiE;IACjE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC9B,wIAAwI;IACxI,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5D,gKAAgK;IAChK,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAChE,gGAAgG;IAChG,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,oIAYlC,yBAAyB,gCA2E3B,CAAC"}
@@ -6,6 +6,7 @@ import { cx } from '@flipdish/ui-library/utilities/cx';
6
6
  import { useResolvedTestId, joinTestId, slugifyTestId } from '@flipdish/ui-library/utilities/testIdUtils';
7
7
  import { useId } from 'react';
8
8
  import { RadioGroup, Radio } from 'react-aria-components';
9
+ import { useCommitOnPress } from '../hooks/useCommitOnPress.js';
9
10
 
10
11
  /**
11
12
  * Radio group where each option is a card with a square logo, title, ID-style subtitle and
@@ -14,26 +15,21 @@ import { RadioGroup, Radio } from 'react-aria-components';
14
15
  *
15
16
  * @summary pick one entity from logo-led cards
16
17
  */
17
- const RadioGroupAvatarCard = ({ items, size = 'sm', indicator = 'radio', onOptionPress, className, 'data-testid': dataTestId, ...props }) => {
18
+ const RadioGroupAvatarCard = ({ items, size = 'sm', indicator = 'radio', commitOn = 'change', value, defaultValue, onChange, onOptionPress, className, 'data-testid': dataTestId, ...props }) => {
18
19
  const rootTestId = useResolvedTestId({ testId: dataTestId, segment: 'radio-group', rootName: 'radio-group' });
19
20
  const Indicator = indicator === 'checkbox' ? CheckboxBase : RadioButtonBase;
20
21
  // Ids, not test ids: two groups with the same values on one page must not describe each other's options.
21
22
  const groupId = useId();
22
- return (jsx(RadioGroup, { ...props, "data-testid": rootTestId, className: (state) => cx('flex flex-col gap-3', typeof className === 'function' ? className(state) : className), children: ({ state, isDisabled: isGroupDisabled }) => items.map((item) => {
23
+ const { selectionProps, optionHandlers } = useCommitOnPress({ commitOn, value, defaultValue, onChange, onOptionPress });
24
+ return (jsx(RadioGroup, { ...props, ...selectionProps, "data-testid": rootTestId, className: (state) => cx('flex flex-col gap-3', typeof className === 'function' ? className(state) : className), children: ({ state, isDisabled: isGroupDisabled, isReadOnly }) => items.map((item) => {
23
25
  const isSelected = state.selectedValue === item.value;
24
26
  const isDisabled = isGroupDisabled || Boolean(item.disabled);
25
27
  const optionTestId = joinTestId(rootTestId, `option-${item.value}`);
26
28
  // Slugged: a value with spaces would split `aria-describedby` into several ids.
27
29
  const subtitleId = item.subtitle ? `${groupId}-${slugifyTestId(item.value)}-subtitle` : undefined;
28
- // The radio is the card's `<label>`; a press in the footer is the footer's own and not an option press. Capture phase,
29
- // because react-aria stops the radio's click from bubbling. Space on the focused radio fires a native click, so keyboard is covered.
30
- const handleClickCapture = (event) => {
31
- if (!isDisabled && event.target instanceof Element && event.target.closest('label'))
32
- onOptionPress?.(item.value);
33
- };
34
30
  return (
35
- // The card, not the radio, carries the selected ring so the footer sits inside the same outline.
36
- jsxs("div", { onClickCapture: handleClickCapture, className: cx('flex flex-col rounded-xl bg-primary ring-inset', isSelected ? 'ring-2 ring-brand' : 'ring-1 ring-secondary', isDisabled && 'bg-disabled_subtle ring-disabled_subtle'), children: [jsx(Radio, { isDisabled: item.disabled, value: item.value, "aria-label": item.title, "aria-describedby": subtitleId, "data-testid": optionTestId, className: ({ isDisabled, isFocusVisible }) => cx('flex cursor-pointer items-center outline-focus-ring', size === 'md' ? 'gap-4 p-5' : 'gap-3 px-4 py-5', item.footer ? 'rounded-t-xl' : 'rounded-xl', isDisabled && 'cursor-not-allowed', isFocusVisible && 'outline-2 outline-offset-2'), children: ({ isDisabled, isSelected, isFocusVisible }) => (jsxs(Fragment, { children: [jsx(Avatar, { size: size === 'md' ? 'xl' : 'lg', rounded: false, border: true, src: item.src, alt: "", initials: item.initials, placeholderIcon: item.placeholderIcon }), jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [jsx("span", { className: cx('truncate font-semibold text-primary', size === 'md' ? 'text-lg' : 'text-md'), children: item.title }), item.subtitle && (jsx("span", { id: subtitleId, className: cx('truncate text-tertiary', size === 'md' ? 'text-md' : 'text-sm'), children: item.subtitle }))] }), jsx(Indicator, { size: size, isDisabled: isDisabled, isSelected: isSelected, isFocusVisible: isFocusVisible })] })) }), item.footer && jsx("div", { className: "flex justify-end border-t border-secondary px-4 py-3", children: item.footer })] }, item.value));
31
+ // The card, not the radio, carries the selected ring and the focus outline so the footer sits inside both.
32
+ jsxs("div", { ...optionHandlers(item.value, { isDisabled, isReadOnly }), className: cx('flex flex-col rounded-xl bg-primary outline-focus-ring ring-inset has-[>label[data-focus-visible]]:outline-2 has-[>label[data-focus-visible]]:outline-offset-2', isSelected ? 'ring-2 ring-brand' : 'ring-1 ring-secondary', isDisabled && 'bg-disabled_subtle ring-disabled_subtle'), children: [jsx(Radio, { isDisabled: item.disabled, value: item.value, "aria-label": item.title, "aria-describedby": subtitleId, "data-testid": optionTestId, className: ({ isDisabled }) => cx('flex cursor-pointer items-center', size === 'md' ? 'gap-4 p-5' : 'gap-3 px-4 py-5', isDisabled && 'cursor-not-allowed'), children: ({ isDisabled, isSelected, isFocusVisible }) => (jsxs(Fragment, { children: [jsx(Avatar, { size: size === 'md' ? 'xl' : 'lg', rounded: false, border: true, src: item.src, alt: "", initials: item.initials, placeholderIcon: item.placeholderIcon }), jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [jsx("span", { className: cx('truncate font-semibold text-primary', size === 'md' ? 'text-lg' : 'text-md'), children: item.title }), item.subtitle && (jsx("span", { id: subtitleId, className: cx('truncate text-tertiary', size === 'md' ? 'text-md' : 'text-sm'), children: item.subtitle }))] }), jsx(Indicator, { size: size, isDisabled: isDisabled, isSelected: isSelected, isFocusVisible: isFocusVisible })] })) }), item.footer && jsx("div", { className: "flex justify-end border-t border-secondary px-4 py-3", children: item.footer })] }, item.value));
37
33
  }) }));
38
34
  };
39
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroupAvatarCard.js","sources":["../../../../../src/components/molecules/RadioGroup/components/RadioGroupAvatarCard.tsx"],"sourcesContent":[null],"names":["_jsx","AriaRadioGroup","_jsxs","AriaRadio","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"RadioGroupAvatarCard.js","sources":["../../../../../src/components/molecules/RadioGroup/components/RadioGroupAvatarCard.tsx"],"sourcesContent":[null],"names":["_jsx","AriaRadioGroup","_jsxs","AriaRadio","_Fragment"],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ const isRadioInput = (target) => target instanceof HTMLInputElement && target.type === 'radio';
6
+ /**
7
+ * Reads the modifier keys off the event that pressed an option.
8
+ *
9
+ * @param event The click or keydown that counts as the press.
10
+ * @param source Whether the press came from the keyboard or a pointer.
11
+ * @returns The modifier keys and source a consumer needs to open the option's target in a new tab.
12
+ */
13
+ const toOptionPress = (event, source) => ({
14
+ metaKey: event.metaKey,
15
+ ctrlKey: event.ctrlKey,
16
+ shiftKey: event.shiftKey,
17
+ altKey: event.altKey,
18
+ source,
19
+ });
20
+ /**
21
+ * Whether a click came from the keyboard: Space on a focused radio fires a native click with no `detail`.
22
+ *
23
+ * @param event The click on an option.
24
+ * @returns `keyboard` for a click with no pointer behind it, otherwise `pointer`.
25
+ */
26
+ const pressSourceOf = (event) => (event.detail === 0 ? 'keyboard' : 'pointer');
27
+ /**
28
+ * Whether a keydown on a radio input is a press of its option. Enter always is, since a native radio ignores it.
29
+ * Space is only when the radio is already checked, where Chromium fires no click; on an unchecked radio the
30
+ * native click follows and is the press. An engine that does click a checked radio has that click swallowed.
31
+ *
32
+ * @param event The keydown on an option's radio input.
33
+ * @returns `true` when the key should be treated as a press of the option.
34
+ */
35
+ const isPressKey = (event) => {
36
+ if (!isRadioInput(event.target))
37
+ return false;
38
+ if (event.key === 'Enter')
39
+ return true;
40
+ return event.key === ' ' && event.target.checked;
41
+ };
42
+ /**
43
+ * Owns when an `AvatarCard` option's choice is committed. In `change` mode it passes the selection props through.
44
+ * In `press` mode it keeps the check the arrow keys moved to, commits only on a press, and puts the check back
45
+ * when `value` changes or focus leaves the group.
46
+ *
47
+ * @param options The group's `commitOn`, its controlled or default value and its two callbacks.
48
+ * @returns `selectionProps` for the group and `optionHandlers(value, state)` for each option's card.
49
+ */
50
+ const useCommitOnPress = ({ commitOn, value, defaultValue, onChange, onOptionPress }) => {
51
+ const commitsOnPress = commitOn === 'press';
52
+ // Press mode controls the group itself, so an uncontrolled consumer still gets the check put back on blur.
53
+ const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue ?? null);
54
+ const committedValue = value !== undefined ? value : uncontrolledValue;
55
+ const [pending, setPending] = React.useState(null);
56
+ // Dropped during render rather than hidden, so a value that later returns does not bring an old check back with it.
57
+ if (pending && pending.from !== committedValue)
58
+ setPending(null);
59
+ const pendingValue = pending?.from === committedValue ? pending.value : null;
60
+ const pressesKeys = commitsOnPress || Boolean(onOptionPress);
61
+ // Set while a Space press is in flight, so an engine that also clicks a checked radio does not press it twice.
62
+ const spaceInFlightRef = React.useRef(false);
63
+ const movePending = (next) => setPending({ from: committedValue, value: next });
64
+ const selectionProps = commitsOnPress
65
+ ? { value: pendingValue ?? committedValue, onChange: movePending }
66
+ : { value, defaultValue, onChange };
67
+ const pressOption = (optionValue, press, isReadOnly) => {
68
+ onOptionPress?.(optionValue, press);
69
+ if (!commitsOnPress)
70
+ return;
71
+ setPending(null);
72
+ // react-stately ignores a read-only change too, so the group and the consumer stay in step.
73
+ if (isReadOnly || optionValue === committedValue)
74
+ return;
75
+ if (value === undefined)
76
+ setUncontrolledValue(optionValue);
77
+ onChange?.(optionValue, press);
78
+ };
79
+ const optionHandlers = (optionValue, { isDisabled, isReadOnly }) => ({
80
+ // The radio is the card's own `<label>`, a direct child; a press in the footer, even on a labelled control there, is the
81
+ // footer's own and not an option press. Capture phase, because react-aria stops the radio's click from bubbling.
82
+ onClickCapture: (event) => {
83
+ if (spaceInFlightRef.current && pressSourceOf(event) === 'keyboard') {
84
+ spaceInFlightRef.current = false;
85
+ return;
86
+ }
87
+ if (isDisabled || !(event.target instanceof Element))
88
+ return;
89
+ if (event.target.closest('label')?.parentElement !== event.currentTarget)
90
+ return;
91
+ pressOption(optionValue, toOptionPress(event, pressSourceOf(event)), isReadOnly);
92
+ },
93
+ onKeyDownCapture: (event) => {
94
+ // A held key repeats the keydown, and a repeat is not another press.
95
+ if (!pressesKeys || isDisabled || event.repeat || !isPressKey(event))
96
+ return;
97
+ // Enter would submit a surrounding form.
98
+ if (event.key === 'Enter')
99
+ event.preventDefault();
100
+ else
101
+ spaceInFlightRef.current = true;
102
+ pressOption(optionValue, toOptionPress(event, 'keyboard'), isReadOnly);
103
+ },
104
+ // The click an engine may fire for Space arrives during the keyup's default action, after this runs, so the
105
+ // flag outlives the event by one task and then clears for the next keyboard click.
106
+ onKeyUpCapture: (event) => {
107
+ if (event.key !== ' ' || !spaceInFlightRef.current)
108
+ return;
109
+ setTimeout(() => {
110
+ spaceInFlightRef.current = false;
111
+ }, 0);
112
+ },
113
+ // Leaving the group without a press puts the check back; the card's parent is the group, so a move between cards is not leaving.
114
+ // A press that moved focus away takes its keyup with it, so the Space flag clears here instead.
115
+ onBlur: (event) => {
116
+ spaceInFlightRef.current = false;
117
+ if (commitsOnPress && !event.currentTarget.parentElement?.contains(event.relatedTarget))
118
+ setPending(null);
119
+ },
120
+ });
121
+ return { selectionProps, optionHandlers };
122
+ };
123
+
124
+ exports.isPressKey = isPressKey;
125
+ exports.pressSourceOf = pressSourceOf;
126
+ exports.toOptionPress = toOptionPress;
127
+ exports.useCommitOnPress = useCommitOnPress;
128
+ //# sourceMappingURL=useCommitOnPress.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCommitOnPress.cjs","sources":["../../../../../src/components/molecules/RadioGroup/hooks/useCommitOnPress.ts"],"sourcesContent":[null],"names":["useState","useRef"],"mappings":";;;;AA4CA,MAAM,YAAY,GAAG,CAAC,MAAmB,KAAiC,MAAM,YAAY,gBAAgB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;AAEvI;;;;;;AAMG;AACI,MAAM,aAAa,GAAG,CAAC,KAAiC,EAAE,MAAiC,MAAuB;IACvH,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,MAAM,EAAE,KAAK,CAAC,MAAM;IACpB,MAAM;AACP,CAAA;AAED;;;;;AAKG;AACI,MAAM,aAAa,GAAG,CAAC,KAAiB,MAAiC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,SAAS;AAE3H;;;;;;;AAOG;AACI,MAAM,UAAU,GAAG,CAAC,KAAoB,KAAa;AAC1D,IAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,KAAK;AAC7C,IAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;AAAE,QAAA,OAAO,IAAI;IACtC,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;AAClD;AAEA;;;;;;;AAOG;AACI,MAAM,gBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAA2B,KAAI;AACtH,IAAA,MAAM,cAAc,GAAG,QAAQ,KAAK,OAAO;;AAE3C,IAAA,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAGA,cAAQ,CAAgB,YAAY,IAAI,IAAI,CAAC;AAC/F,IAAA,MAAM,cAAc,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,iBAAiB;IACtE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAsB,IAAI,CAAC;;AAEjE,IAAA,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc;QAAE,UAAU,CAAC,IAAI,CAAC;AAChE,IAAA,MAAM,YAAY,GAAG,OAAO,EAAE,IAAI,KAAK,cAAc,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI;IAC5E,MAAM,WAAW,GAAG,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;;AAE5D,IAAA,MAAM,gBAAgB,GAAGC,YAAM,CAAC,KAAK,CAAC;AAEtC,IAAA,MAAM,WAAW,GAAG,CAAC,IAAmB,KAAK,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9F,MAAM,cAAc,GAAmB;UACnC,EAAE,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,QAAQ,EAAE,WAAW;UAC9D,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE;IAErC,MAAM,WAAW,GAAG,CAAC,WAAmB,EAAE,KAAsB,EAAE,UAAmB,KAAI;AACvF,QAAA,aAAa,GAAG,WAAW,EAAE,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc;YAAE;QACrB,UAAU,CAAC,IAAI,CAAC;;AAEhB,QAAA,IAAI,UAAU,IAAI,WAAW,KAAK,cAAc;YAAE;QAClD,IAAI,KAAK,KAAK,SAAS;YAAE,oBAAoB,CAAC,WAAW,CAAC;AAC1D,QAAA,QAAQ,GAAG,WAAW,EAAE,KAAK,CAAC;AAChC,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,WAAmB,EAAE,EAAE,UAAU,EAAE,UAAU,EAAe,MAAsB;;;AAGxG,QAAA,cAAc,EAAE,CAAC,KAAK,KAAI;YACxB,IAAI,gBAAgB,CAAC,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,UAAU,EAAE;AACnE,gBAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK;gBAChC;YACF;YACA,IAAI,UAAU,IAAI,EAAE,KAAK,CAAC,MAAM,YAAY,OAAO,CAAC;gBAAE;AACtD,YAAA,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,KAAK,CAAC,aAAa;gBAAE;AAC1E,YAAA,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;QAClF,CAAC;AACD,QAAA,gBAAgB,EAAE,CAAC,KAAK,KAAI;;AAE1B,YAAA,IAAI,CAAC,WAAW,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE;;AAEtE,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;gBAAE,KAAK,CAAC,cAAc,EAAE;;AAC5C,gBAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;AACpC,YAAA,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QACxE,CAAC;;;AAGD,QAAA,cAAc,EAAE,CAAC,KAAK,KAAI;YACxB,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO;gBAAE;YACpD,UAAU,CAAC,MAAK;AACd,gBAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK;YAClC,CAAC,EAAE,CAAC,CAAC;QACP,CAAC;;;AAGD,QAAA,MAAM,EAAE,CAAC,KAAK,KAAI;AAChB,YAAA,gBAAgB,CAAC,OAAO,GAAG,KAAK;AAChC,YAAA,IAAI,cAAc,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC;QAC3G,CAAC;AACF,KAAA,CAAC;AAEF,IAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE;AAC3C;;;;;"}