@plasmicpkgs/react-aria 0.0.108 → 0.0.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/react-aria.esm.js +13 -12
- package/dist/react-aria.esm.js.map +1 -1
- package/dist/react-aria.js +13 -12
- package/dist/react-aria.js.map +1 -1
- package/package.json +2 -2
- package/skinny/registerButton.cjs.js +0 -3
- package/skinny/registerButton.cjs.js.map +1 -1
- package/skinny/registerButton.esm.js +0 -3
- package/skinny/registerButton.esm.js.map +1 -1
- package/skinny/registerDialogTrigger.cjs.js +2 -2
- package/skinny/registerDialogTrigger.cjs.js.map +1 -1
- package/skinny/registerDialogTrigger.esm.js +2 -2
- package/skinny/registerDialogTrigger.esm.js.map +1 -1
- package/skinny/registerDialogTrigger.stories.cjs.js +2 -19
- package/skinny/registerDialogTrigger.stories.cjs.js.map +1 -1
- package/skinny/registerDialogTrigger.stories.esm.js +2 -19
- package/skinny/registerDialogTrigger.stories.esm.js.map +1 -1
- package/skinny/registerModal.cjs.js +1 -1
- package/skinny/registerModal.cjs.js.map +1 -1
- package/skinny/registerModal.esm.js +1 -1
- package/skinny/registerModal.esm.js.map +1 -1
- package/skinny/registerSelect.cjs.js +2 -0
- package/skinny/registerSelect.cjs.js.map +1 -1
- package/skinny/registerSelect.esm.js +2 -0
- package/skinny/registerSelect.esm.js.map +1 -1
- package/skinny/registerSelect.stories.cjs.js +39 -0
- package/skinny/registerSelect.stories.cjs.js.map +1 -1
- package/skinny/registerSelect.stories.esm.js +38 -1
- package/skinny/registerSelect.stories.esm.js.map +1 -1
- package/skinny/registerSlider.stories.cjs.js +16 -35
- package/skinny/registerSlider.stories.cjs.js.map +1 -1
- package/skinny/registerSlider.stories.esm.js +17 -37
- package/skinny/registerSlider.stories.esm.js.map +1 -1
- package/skinny/registerSliderTrack.cjs.js +6 -4
- package/skinny/registerSliderTrack.cjs.js.map +1 -1
- package/skinny/registerSliderTrack.esm.js +7 -5
- package/skinny/registerSliderTrack.esm.js.map +1 -1
- package/skinny/registerTooltip.cjs.js +2 -2
- package/skinny/registerTooltip.cjs.js.map +1 -1
- package/skinny/registerTooltip.esm.js +2 -2
- package/skinny/registerTooltip.esm.js.map +1 -1
- package/skinny/registerTooltip.stories.cjs.js +2 -18
- package/skinny/registerTooltip.stories.cjs.js.map +1 -1
- package/skinny/registerTooltip.stories.esm.js +2 -18
- package/skinny/registerTooltip.stories.esm.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerModal.esm.js","sources":["../src/registerModal.tsx"],"sourcesContent":["import {\n PlasmicElement,\n usePlasmicCanvasComponentInfo,\n usePlasmicCanvasContext,\n} from \"@plasmicapp/host\";\nimport React, { forwardRef, useImperativeHandle } from \"react\";\nimport { mergeProps } from \"react-aria\";\nimport { Modal, ModalOverlay, ModalOverlayProps } from \"react-aria-components\";\nimport { hasParent } from \"./common\";\nimport { PlasmicDialogTriggerContext } from \"./contexts\";\nimport {\n CodeComponentMetaOverrides,\n HasControlContextData,\n makeComponentName,\n Registerable,\n registerComponentHelper,\n WithPlasmicCanvasComponentInfo,\n} from \"./utils\";\n\nexport interface BaseModalProps\n extends ModalOverlayProps,\n WithPlasmicCanvasComponentInfo,\n HasControlContextData {\n modalOverlayClass?: string;\n resetClassName?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface BaseModalActions {\n close(): void;\n open(): void;\n}\n\nexport const BaseModal = forwardRef<BaseModalActions, BaseModalProps>(\n function BaseModalInner(props, ref) {\n const {\n children,\n modalOverlayClass,\n className,\n isOpen,\n resetClassName,\n setControlContextData,\n isDismissable,\n ...rest\n } = props;\n\n const canvasCtx = usePlasmicCanvasContext();\n const isEditMode = canvasCtx && canvasCtx.interactive === false;\n const isSelected =\n usePlasmicCanvasComponentInfo?.(props)?.isSelected ?? false;\n\n const contextProps = React.useContext(PlasmicDialogTriggerContext);\n const isStandalone = !contextProps;\n // TODO: React-aria does not like modal being passed defaultOpen while its inside a DialogTrigger.\n const mergedProps = mergeProps(contextProps, rest, {\n isOpen: isStandalone ? isSelected || isOpen : contextProps.isOpen,\n /*\n isDismissable on canvas (non-interactive mode) causes the following two issues:\n 1. Clicking anywhere inside the modal dismisses it\n 2. If the modal is auto-opened due to selection in outline tab, the modal stays open despite issue #1, but the text elements inside the modal are no longer selectable, and therefore the text or headings inside the modal are not editable.\n\n To fix the above issue, we set an interim isDismissable state to false in edit mode, because it only matters in interactive mode.\n */\n isDismissable: isEditMode ? false : isDismissable,\n });\n\n setControlContextData?.({\n parent: isStandalone ? undefined : {},\n });\n\n // Expose close operation using useImperativeHandle\n useImperativeHandle(ref, () => ({\n close: () => {\n mergedProps.onOpenChange?.(false);\n },\n open: () => {\n mergedProps.onOpenChange?.(true);\n },\n }));\n\n return (\n <ModalOverlay\n {...mergedProps}\n className={`${resetClassName} ${modalOverlayClass}`}\n >\n <Modal className={className}>{children}</Modal>\n </ModalOverlay>\n );\n }\n);\n\nexport const MODAL_COMPONENT_NAME = makeComponentName(\"modal\");\n\nexport const MODAL_DEFAULT_SLOT_CONTENT: PlasmicElement = {\n type: \"vbox\",\n styles: {\n width: \"stretch\",\n padding: 0,\n gap: \"10px\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n },\n children: [\n {\n type: \"text\",\n value: \"Heading\",\n tag: \"h2\",\n },\n {\n type: \"text\",\n value: \"This is a Modal!\",\n },\n {\n type: \"text\",\n value: \"You can put anything you can imagine here!\",\n styles: {\n fontWeight: 500,\n },\n },\n {\n type: \"text\",\n value:\n \"Use it in a `Aria Dialog Trigger` component to trigger it on a button click!\",\n },\n ],\n};\n\nexport function registerModal(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BaseModal>\n) {\n registerComponentHelper(\n loader,\n BaseModal,\n {\n name: MODAL_COMPONENT_NAME,\n displayName: \"Aria Modal\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerModal\",\n importName: \"BaseModal\",\n styleSections: true,\n defaultStyles: {\n // centering the modal on the page by default\n position: \"fixed\",\n top: \"10%\",\n left: \"50%\",\n width: \"50%\",\n transform: \"translateX(-50%)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"black\",\n padding: \"20px\",\n maxWidth: \"300px\",\n backgroundColor: \"#FDE3C3\",\n },\n refActions: {\n open: {\n description: \"Open the modal\",\n argTypes: [],\n },\n close: {\n description: \"Close the modal\",\n argTypes: [],\n },\n },\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: MODAL_DEFAULT_SLOT_CONTENT,\n },\n modalOverlayClass: {\n type: \"class\",\n displayName: \"Modal Overlay\",\n },\n isOpen: {\n type: \"boolean\",\n editOnly: true,\n uncontrolledProp: \"defaultOpen\",\n defaultValueHint: true,\n defaultValue: true,\n hidden: hasParent,\n },\n isDismissable: {\n type: \"boolean\",\n description:\n \"Whether to close the modal when the user interacts outside it.\",\n },\n isKeyboardDismissDisabled: {\n type: \"boolean\",\n description:\n \"Whether pressing the escape key to close the modal should be disabled.\",\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n resetClassName: {\n type: \"themeResetClass\",\n },\n },\n states: {\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n hidden: hasParent,\n },\n },\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerModal.esm.js","sources":["../src/registerModal.tsx"],"sourcesContent":["import {\n PlasmicElement,\n usePlasmicCanvasComponentInfo,\n usePlasmicCanvasContext,\n} from \"@plasmicapp/host\";\nimport React, { forwardRef, useImperativeHandle } from \"react\";\nimport { mergeProps } from \"react-aria\";\nimport { Modal, ModalOverlay, ModalOverlayProps } from \"react-aria-components\";\nimport { hasParent } from \"./common\";\nimport { PlasmicDialogTriggerContext } from \"./contexts\";\nimport {\n CodeComponentMetaOverrides,\n HasControlContextData,\n makeComponentName,\n Registerable,\n registerComponentHelper,\n WithPlasmicCanvasComponentInfo,\n} from \"./utils\";\n\nexport interface BaseModalProps\n extends ModalOverlayProps,\n WithPlasmicCanvasComponentInfo,\n HasControlContextData {\n modalOverlayClass?: string;\n resetClassName?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface BaseModalActions {\n close(): void;\n open(): void;\n}\n\nexport const BaseModal = forwardRef<BaseModalActions, BaseModalProps>(\n function BaseModalInner(props, ref) {\n const {\n children,\n modalOverlayClass,\n className,\n isOpen,\n resetClassName,\n setControlContextData,\n isDismissable,\n ...rest\n } = props;\n\n const canvasCtx = usePlasmicCanvasContext();\n const isEditMode = canvasCtx && canvasCtx.interactive === false;\n const isSelected =\n usePlasmicCanvasComponentInfo?.(props)?.isSelected ?? false;\n\n const contextProps = React.useContext(PlasmicDialogTriggerContext);\n const isStandalone = !contextProps;\n const mergedProps = mergeProps(rest, {\n isOpen: isStandalone ? isSelected || isOpen : contextProps.isOpen,\n /*\n isDismissable on canvas (non-interactive mode) causes the following two issues:\n 1. Clicking anywhere inside the modal dismisses it\n 2. If the modal is auto-opened due to selection in outline tab, the modal stays open despite issue #1, but the text elements inside the modal are no longer selectable, and therefore the text or headings inside the modal are not editable.\n\n To fix the above issue, we set an interim isDismissable state to false in edit mode, because it only matters in interactive mode.\n */\n isDismissable: isEditMode ? false : isDismissable,\n });\n\n setControlContextData?.({\n parent: isStandalone ? undefined : {},\n });\n\n // Expose close operation using useImperativeHandle\n useImperativeHandle(ref, () => ({\n close: () => {\n mergedProps.onOpenChange?.(false);\n },\n open: () => {\n mergedProps.onOpenChange?.(true);\n },\n }));\n\n return (\n <ModalOverlay\n {...mergedProps}\n className={`${resetClassName} ${modalOverlayClass}`}\n >\n <Modal className={className}>{children}</Modal>\n </ModalOverlay>\n );\n }\n);\n\nexport const MODAL_COMPONENT_NAME = makeComponentName(\"modal\");\n\nexport const MODAL_DEFAULT_SLOT_CONTENT: PlasmicElement = {\n type: \"vbox\",\n styles: {\n width: \"stretch\",\n padding: 0,\n gap: \"10px\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n },\n children: [\n {\n type: \"text\",\n value: \"Heading\",\n tag: \"h2\",\n },\n {\n type: \"text\",\n value: \"This is a Modal!\",\n },\n {\n type: \"text\",\n value: \"You can put anything you can imagine here!\",\n styles: {\n fontWeight: 500,\n },\n },\n {\n type: \"text\",\n value:\n \"Use it in a `Aria Dialog Trigger` component to trigger it on a button click!\",\n },\n ],\n};\n\nexport function registerModal(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BaseModal>\n) {\n registerComponentHelper(\n loader,\n BaseModal,\n {\n name: MODAL_COMPONENT_NAME,\n displayName: \"Aria Modal\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerModal\",\n importName: \"BaseModal\",\n styleSections: true,\n defaultStyles: {\n // centering the modal on the page by default\n position: \"fixed\",\n top: \"10%\",\n left: \"50%\",\n width: \"50%\",\n transform: \"translateX(-50%)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"black\",\n padding: \"20px\",\n maxWidth: \"300px\",\n backgroundColor: \"#FDE3C3\",\n },\n refActions: {\n open: {\n description: \"Open the modal\",\n argTypes: [],\n },\n close: {\n description: \"Close the modal\",\n argTypes: [],\n },\n },\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: MODAL_DEFAULT_SLOT_CONTENT,\n },\n modalOverlayClass: {\n type: \"class\",\n displayName: \"Modal Overlay\",\n },\n isOpen: {\n type: \"boolean\",\n editOnly: true,\n uncontrolledProp: \"defaultOpen\",\n defaultValueHint: true,\n defaultValue: true,\n hidden: hasParent,\n },\n isDismissable: {\n type: \"boolean\",\n description:\n \"Whether to close the modal when the user interacts outside it.\",\n },\n isKeyboardDismissDisabled: {\n type: \"boolean\",\n description:\n \"Whether pressing the escape key to close the modal should be disabled.\",\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n resetClassName: {\n type: \"themeResetClass\",\n },\n },\n states: {\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n hidden: hasParent,\n },\n },\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -81,6 +81,7 @@ function BaseSelect(props) {
|
|
|
81
81
|
name,
|
|
82
82
|
setControlContextData,
|
|
83
83
|
plasmicUpdateVariant,
|
|
84
|
+
defaultSelectedKey,
|
|
84
85
|
"aria-label": ariaLabel
|
|
85
86
|
} = props;
|
|
86
87
|
const idManager = React.useMemo(() => new OptionsItemIdManager.OptionsItemIdManager(), []);
|
|
@@ -109,6 +110,7 @@ function BaseSelect(props) {
|
|
|
109
110
|
return /* @__PURE__ */ React__default.default.createElement(
|
|
110
111
|
reactAriaComponents.Select,
|
|
111
112
|
__spreadValues({
|
|
113
|
+
defaultSelectedKey,
|
|
112
114
|
selectedKey,
|
|
113
115
|
onSelectionChange,
|
|
114
116
|
onOpenChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSelect.cjs.js","sources":["../src/registerSelect.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from \"react\";\nimport {\n Select,\n SelectProps,\n SelectRenderProps,\n SelectStateContext,\n SelectValue,\n} from \"react-aria-components\";\nimport { COMMON_STYLES, arrowDown, getCommonProps } from \"./common\";\nimport {\n PlasmicListBoxContext,\n PlasmicPopoverTriggerContext,\n} from \"./contexts\";\nimport { OptionsItemIdManager } from \"./OptionsItemIdManager\";\nimport { BUTTON_COMPONENT_NAME } from \"./registerButton\";\nimport { LABEL_COMPONENT_NAME } from \"./registerLabel\";\nimport { LIST_BOX_COMPONENT_NAME } from \"./registerListBox\";\nimport { POPOVER_COMPONENT_NAME } from \"./registerPopover\";\nimport {\n HasControlContextData,\n Registerable,\n WithPlasmicCanvasComponentInfo,\n extractPlasmicDataProps,\n makeComponentName,\n registerComponentHelper,\n useAutoOpen,\n} from \"./utils\";\nimport { WithVariants, pickAriaComponentVariants } from \"./variant-utils\";\n\n// It cannot be used as a hook like useAutoOpen() within the BaseSelect component\n// because it needs access to SelectStateContext, which is only created in the BaseSelect component's render function.\nfunction SelectAutoOpen(props: any) {\n const { open, close } = React.useContext(SelectStateContext) ?? {};\n useAutoOpen({\n props,\n open: () => {\n open?.();\n // using settimeout because the focus is not immediately available\n setTimeout(() => {\n /*\n When the select's popover is opened in the canvas, the listbox gains focus, trapping the keyboard focus within it. Pressing the up or down arrow keys navigates through the listbox items.\n However, there are three issues with this behavior:\n\n 1. Focus should not be triggered in canvas (non-interactive mode)\n 2. Canvas (non-interactive mode) should remain non-interactive: Navigation between listbox items or selection using the space key should not be possible.\n 3. Keyboard hotkeys (e.g., backspace, undo) stop working: Key presses are absorbed by the listbox, breaking the expected behavior for shortcuts like backspace or undo (reference).\n\n To resolve this, we need to call document.activeElement.blur() to remove focus from the listbox.\n\n However, since the select component is a code component embedded within the artboard iframe, the keyboard hotkeys (e.g., backspace, undo) will not work,\n because they only function in the parent iframe (__wab_studio-frame).\n To ensure hotkeys work properly, we need to shift focus from the active element in the child iframe (artboard iframe) to the parent iframe (__wab_studio-frame) by using window.parent.\n */\n (window.parent.document.activeElement as HTMLElement)?.blur?.();\n }, 1);\n },\n close,\n });\n\n return null;\n}\n\nexport interface BaseSelectValueProps\n extends React.ComponentProps<typeof SelectValue> {\n children: React.ReactNode;\n}\n\nexport const BaseSelectValue = (props: BaseSelectValueProps) => {\n const { children: placeholder, className } = props;\n return (\n <SelectValue className={className} style={COMMON_STYLES}>\n {({ isPlaceholder, selectedText }) => (\n <>{isPlaceholder ? placeholder : selectedText}</>\n )}\n </SelectValue>\n );\n};\n\nconst SELECT_NAME = makeComponentName(\"select\");\n\nexport interface BaseSelectControlContextData {\n itemIds: string[];\n}\n\nconst SELECT_VARIANTS = [\n \"focused\" as const,\n \"focusVisible\" as const,\n \"disabled\" as const,\n];\n\nconst { variants: SELECT_VARIANTS_DATA } =\n pickAriaComponentVariants(SELECT_VARIANTS);\n\nexport interface BaseSelectProps\n extends SelectProps<{}>, // NOTE: We don't need generic type here since we don't use items prop (that needs it). We just need to make the type checker happy\n WithVariants<typeof SELECT_VARIANTS>,\n WithPlasmicCanvasComponentInfo,\n HasControlContextData<BaseSelectControlContextData> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function BaseSelect(props: BaseSelectProps) {\n const {\n selectedKey,\n onSelectionChange,\n onOpenChange,\n isDisabled,\n className,\n children,\n disabledKeys,\n name,\n setControlContextData,\n plasmicUpdateVariant,\n \"aria-label\": ariaLabel,\n } = props;\n\n const idManager = useMemo(() => new OptionsItemIdManager(), []);\n\n useEffect(() => {\n idManager.subscribe((ids: string[]) => {\n setControlContextData?.({\n itemIds: ids,\n });\n });\n }, []);\n\n const classNameProp = useCallback(\n ({\n isDisabled: isDisabled2,\n isFocusVisible,\n isFocused,\n }: SelectRenderProps) => {\n plasmicUpdateVariant?.({\n disabled: isDisabled2,\n focused: isFocused,\n focusVisible: isFocusVisible,\n });\n return className ?? \"\";\n },\n [className, plasmicUpdateVariant]\n );\n\n return (\n <Select\n selectedKey={selectedKey}\n onSelectionChange={onSelectionChange}\n onOpenChange={onOpenChange}\n isDisabled={isDisabled}\n className={classNameProp}\n style={COMMON_STYLES}\n name={name}\n disabledKeys={disabledKeys}\n aria-label={ariaLabel}\n {...extractPlasmicDataProps(props)}\n >\n <SelectAutoOpen {...props} />\n <PlasmicPopoverTriggerContext.Provider value={true}>\n <PlasmicListBoxContext.Provider\n value={{\n idManager,\n }}\n >\n {children}\n </PlasmicListBoxContext.Provider>\n </PlasmicPopoverTriggerContext.Provider>\n </Select>\n );\n}\n\nexport function registerSelect(loader?: Registerable) {\n const selectValueMeta = registerComponentHelper(loader, BaseSelectValue, {\n name: makeComponentName(\"select-value\"),\n displayName: \"Aria Selected Value\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerSelect\",\n importName: \"BaseSelectValue\",\n parentComponentName: SELECT_NAME,\n props: {\n /** @deprecated use children (Placeholder) directly */\n customize: {\n type: \"boolean\",\n displayName: \"Customize placeholder\",\n defaultValue: true,\n description: \"Customize the placeholder text and styles\",\n /** Obsolete, but retained (permanently hidden) for backward compatibility. */\n hidden: () => true,\n },\n children: {\n type: \"slot\",\n displayName: \"Placeholder\",\n defaultValue: [\n {\n type: \"text\",\n value: \"Select an item\",\n },\n ],\n },\n },\n trapsFocus: true,\n });\n\n registerComponentHelper(loader, BaseSelect, {\n name: SELECT_NAME,\n displayName: \"Aria Select\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerSelect\",\n importName: \"BaseSelect\",\n variants: SELECT_VARIANTS_DATA,\n props: {\n ...getCommonProps<BaseSelectProps>(\"Select\", [\n \"name\",\n \"aria-label\",\n \"isDisabled\",\n \"autoFocus\",\n ]),\n selectedKey: {\n type: \"choice\",\n editOnly: true,\n uncontrolledProp: \"defaultSelectedKey\",\n displayName: \"Initial selected item\",\n options: (_props, ctx) => (ctx?.itemIds ? Array.from(ctx.itemIds) : []),\n // React Aria Select do not support multiple selections yet\n multiSelect: false,\n },\n onSelectionChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"selectedValue\", type: \"string\" }],\n },\n disabledKeys: {\n type: \"choice\",\n displayName: \"Disabled values\",\n description:\n \"The items that are disabled. These items cannot be selected, focused, or otherwise interacted with.\",\n options: (_props, ctx) => (ctx?.itemIds ? Array.from(ctx.itemIds) : []),\n multiSelect: true,\n advanced: true,\n },\n isOpen: {\n type: \"boolean\",\n defaultValue: false,\n // It doesn't make sense to make isOpen prop editable (it's controlled by user interaction and always closed by default), so we keep this prop hidden. We have listed the prop here in the meta only so we can expose a writeable state for it.\n hidden: () => true,\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: [\n {\n type: \"vbox\",\n styles: {\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n width: \"300px\",\n padding: 0,\n },\n children: [\n {\n type: \"component\",\n name: LABEL_COMPONENT_NAME,\n props: {\n children: {\n type: \"text\",\n value: \"Label\",\n },\n },\n },\n {\n type: \"component\",\n name: BUTTON_COMPONENT_NAME,\n styles: {\n width: \"100%\",\n padding: \"4px 10px\",\n background: \"white\",\n },\n props: {\n children: {\n type: \"hbox\",\n styles: {\n width: \"stretch\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: 0,\n },\n children: [\n {\n type: \"component\",\n name: selectValueMeta.name,\n },\n arrowDown,\n ],\n },\n },\n },\n {\n type: \"component\",\n name: POPOVER_COMPONENT_NAME,\n styles: {\n backgroundColor: \"white\",\n padding: \"10px\",\n overflow: \"scroll\",\n width: \"unset\",\n },\n props: {\n children: [\n {\n type: \"component\",\n name: LIST_BOX_COMPONENT_NAME,\n props: {\n selectionMode: \"single\",\n },\n styles: {\n borderWidth: 0,\n width: \"stretch\",\n },\n },\n ],\n },\n },\n ],\n },\n ],\n },\n },\n states: {\n selectedValue: {\n type: \"writable\",\n valueProp: \"selectedKey\",\n onChangeProp: \"onSelectionChange\",\n variableType: \"text\",\n },\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n },\n },\n trapsFocus: true,\n });\n}\n"],"names":["SelectStateContext","useAutoOpen","_a","React","SelectValue","COMMON_STYLES","makeComponentName","pickAriaComponentVariants","useMemo","OptionsItemIdManager","useEffect","useCallback","Select","extractPlasmicDataProps","PlasmicPopoverTriggerContext","PlasmicListBoxContext","registerComponentHelper","getCommonProps","LABEL_COMPONENT_NAME","BUTTON_COMPONENT_NAME","arrowDown","POPOVER_COMPONENT_NAME","LIST_BOX_COMPONENT_NAME"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerSelect.cjs.js","sources":["../src/registerSelect.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from \"react\";\nimport {\n Select,\n SelectProps,\n SelectRenderProps,\n SelectStateContext,\n SelectValue,\n} from \"react-aria-components\";\nimport { COMMON_STYLES, arrowDown, getCommonProps } from \"./common\";\nimport {\n PlasmicListBoxContext,\n PlasmicPopoverTriggerContext,\n} from \"./contexts\";\nimport { OptionsItemIdManager } from \"./OptionsItemIdManager\";\nimport { BUTTON_COMPONENT_NAME } from \"./registerButton\";\nimport { LABEL_COMPONENT_NAME } from \"./registerLabel\";\nimport { LIST_BOX_COMPONENT_NAME } from \"./registerListBox\";\nimport { POPOVER_COMPONENT_NAME } from \"./registerPopover\";\nimport {\n HasControlContextData,\n Registerable,\n WithPlasmicCanvasComponentInfo,\n extractPlasmicDataProps,\n makeComponentName,\n registerComponentHelper,\n useAutoOpen,\n} from \"./utils\";\nimport { WithVariants, pickAriaComponentVariants } from \"./variant-utils\";\n\n// It cannot be used as a hook like useAutoOpen() within the BaseSelect component\n// because it needs access to SelectStateContext, which is only created in the BaseSelect component's render function.\nfunction SelectAutoOpen(props: any) {\n const { open, close } = React.useContext(SelectStateContext) ?? {};\n useAutoOpen({\n props,\n open: () => {\n open?.();\n // using settimeout because the focus is not immediately available\n setTimeout(() => {\n /*\n When the select's popover is opened in the canvas, the listbox gains focus, trapping the keyboard focus within it. Pressing the up or down arrow keys navigates through the listbox items.\n However, there are three issues with this behavior:\n\n 1. Focus should not be triggered in canvas (non-interactive mode)\n 2. Canvas (non-interactive mode) should remain non-interactive: Navigation between listbox items or selection using the space key should not be possible.\n 3. Keyboard hotkeys (e.g., backspace, undo) stop working: Key presses are absorbed by the listbox, breaking the expected behavior for shortcuts like backspace or undo (reference).\n\n To resolve this, we need to call document.activeElement.blur() to remove focus from the listbox.\n\n However, since the select component is a code component embedded within the artboard iframe, the keyboard hotkeys (e.g., backspace, undo) will not work,\n because they only function in the parent iframe (__wab_studio-frame).\n To ensure hotkeys work properly, we need to shift focus from the active element in the child iframe (artboard iframe) to the parent iframe (__wab_studio-frame) by using window.parent.\n */\n (window.parent.document.activeElement as HTMLElement)?.blur?.();\n }, 1);\n },\n close,\n });\n\n return null;\n}\n\nexport interface BaseSelectValueProps\n extends React.ComponentProps<typeof SelectValue> {\n children: React.ReactNode;\n}\n\nexport const BaseSelectValue = (props: BaseSelectValueProps) => {\n const { children: placeholder, className } = props;\n return (\n <SelectValue className={className} style={COMMON_STYLES}>\n {({ isPlaceholder, selectedText }) => (\n <>{isPlaceholder ? placeholder : selectedText}</>\n )}\n </SelectValue>\n );\n};\n\nconst SELECT_NAME = makeComponentName(\"select\");\n\nexport interface BaseSelectControlContextData {\n itemIds: string[];\n}\n\nconst SELECT_VARIANTS = [\n \"focused\" as const,\n \"focusVisible\" as const,\n \"disabled\" as const,\n];\n\nconst { variants: SELECT_VARIANTS_DATA } =\n pickAriaComponentVariants(SELECT_VARIANTS);\n\nexport interface BaseSelectProps\n extends SelectProps<{}>, // NOTE: We don't need generic type here since we don't use items prop (that needs it). We just need to make the type checker happy\n WithVariants<typeof SELECT_VARIANTS>,\n WithPlasmicCanvasComponentInfo,\n HasControlContextData<BaseSelectControlContextData> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function BaseSelect(props: BaseSelectProps) {\n const {\n selectedKey,\n onSelectionChange,\n onOpenChange,\n isDisabled,\n className,\n children,\n disabledKeys,\n name,\n setControlContextData,\n plasmicUpdateVariant,\n defaultSelectedKey,\n \"aria-label\": ariaLabel,\n } = props;\n\n const idManager = useMemo(() => new OptionsItemIdManager(), []);\n\n useEffect(() => {\n idManager.subscribe((ids: string[]) => {\n setControlContextData?.({\n itemIds: ids,\n });\n });\n }, []);\n\n const classNameProp = useCallback(\n ({\n isDisabled: isDisabled2,\n isFocusVisible,\n isFocused,\n }: SelectRenderProps) => {\n plasmicUpdateVariant?.({\n disabled: isDisabled2,\n focused: isFocused,\n focusVisible: isFocusVisible,\n });\n return className ?? \"\";\n },\n [className, plasmicUpdateVariant]\n );\n\n return (\n <Select\n defaultSelectedKey={defaultSelectedKey}\n selectedKey={selectedKey}\n onSelectionChange={onSelectionChange}\n onOpenChange={onOpenChange}\n isDisabled={isDisabled}\n className={classNameProp}\n style={COMMON_STYLES}\n name={name}\n disabledKeys={disabledKeys}\n aria-label={ariaLabel}\n {...extractPlasmicDataProps(props)}\n >\n <SelectAutoOpen {...props} />\n <PlasmicPopoverTriggerContext.Provider value={true}>\n <PlasmicListBoxContext.Provider\n value={{\n idManager,\n }}\n >\n {children}\n </PlasmicListBoxContext.Provider>\n </PlasmicPopoverTriggerContext.Provider>\n </Select>\n );\n}\n\nexport function registerSelect(loader?: Registerable) {\n const selectValueMeta = registerComponentHelper(loader, BaseSelectValue, {\n name: makeComponentName(\"select-value\"),\n displayName: \"Aria Selected Value\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerSelect\",\n importName: \"BaseSelectValue\",\n parentComponentName: SELECT_NAME,\n props: {\n /** @deprecated use children (Placeholder) directly */\n customize: {\n type: \"boolean\",\n displayName: \"Customize placeholder\",\n defaultValue: true,\n description: \"Customize the placeholder text and styles\",\n /** Obsolete, but retained (permanently hidden) for backward compatibility. */\n hidden: () => true,\n },\n children: {\n type: \"slot\",\n displayName: \"Placeholder\",\n defaultValue: [\n {\n type: \"text\",\n value: \"Select an item\",\n },\n ],\n },\n },\n trapsFocus: true,\n });\n\n registerComponentHelper(loader, BaseSelect, {\n name: SELECT_NAME,\n displayName: \"Aria Select\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerSelect\",\n importName: \"BaseSelect\",\n variants: SELECT_VARIANTS_DATA,\n props: {\n ...getCommonProps<BaseSelectProps>(\"Select\", [\n \"name\",\n \"aria-label\",\n \"isDisabled\",\n \"autoFocus\",\n ]),\n selectedKey: {\n type: \"choice\",\n editOnly: true,\n uncontrolledProp: \"defaultSelectedKey\",\n displayName: \"Initial selected item\",\n options: (_props, ctx) => (ctx?.itemIds ? Array.from(ctx.itemIds) : []),\n // React Aria Select do not support multiple selections yet\n multiSelect: false,\n },\n onSelectionChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"selectedValue\", type: \"string\" }],\n },\n disabledKeys: {\n type: \"choice\",\n displayName: \"Disabled values\",\n description:\n \"The items that are disabled. These items cannot be selected, focused, or otherwise interacted with.\",\n options: (_props, ctx) => (ctx?.itemIds ? Array.from(ctx.itemIds) : []),\n multiSelect: true,\n advanced: true,\n },\n isOpen: {\n type: \"boolean\",\n defaultValue: false,\n // It doesn't make sense to make isOpen prop editable (it's controlled by user interaction and always closed by default), so we keep this prop hidden. We have listed the prop here in the meta only so we can expose a writeable state for it.\n hidden: () => true,\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: [\n {\n type: \"vbox\",\n styles: {\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n width: \"300px\",\n padding: 0,\n },\n children: [\n {\n type: \"component\",\n name: LABEL_COMPONENT_NAME,\n props: {\n children: {\n type: \"text\",\n value: \"Label\",\n },\n },\n },\n {\n type: \"component\",\n name: BUTTON_COMPONENT_NAME,\n styles: {\n width: \"100%\",\n padding: \"4px 10px\",\n background: \"white\",\n },\n props: {\n children: {\n type: \"hbox\",\n styles: {\n width: \"stretch\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: 0,\n },\n children: [\n {\n type: \"component\",\n name: selectValueMeta.name,\n },\n arrowDown,\n ],\n },\n },\n },\n {\n type: \"component\",\n name: POPOVER_COMPONENT_NAME,\n styles: {\n backgroundColor: \"white\",\n padding: \"10px\",\n overflow: \"scroll\",\n width: \"unset\",\n },\n props: {\n children: [\n {\n type: \"component\",\n name: LIST_BOX_COMPONENT_NAME,\n props: {\n selectionMode: \"single\",\n },\n styles: {\n borderWidth: 0,\n width: \"stretch\",\n },\n },\n ],\n },\n },\n ],\n },\n ],\n },\n },\n states: {\n selectedValue: {\n type: \"writable\",\n valueProp: \"selectedKey\",\n onChangeProp: \"onSelectionChange\",\n variableType: \"text\",\n },\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n },\n },\n trapsFocus: true,\n });\n}\n"],"names":["SelectStateContext","useAutoOpen","_a","React","SelectValue","COMMON_STYLES","makeComponentName","pickAriaComponentVariants","useMemo","OptionsItemIdManager","useEffect","useCallback","Select","extractPlasmicDataProps","PlasmicPopoverTriggerContext","PlasmicListBoxContext","registerComponentHelper","getCommonProps","LABEL_COMPONENT_NAME","BUTTON_COMPONENT_NAME","arrowDown","POPOVER_COMPONENT_NAME","LIST_BOX_COMPONENT_NAME"],"mappings":"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"}
|
|
@@ -75,6 +75,7 @@ function BaseSelect(props) {
|
|
|
75
75
|
name,
|
|
76
76
|
setControlContextData,
|
|
77
77
|
plasmicUpdateVariant,
|
|
78
|
+
defaultSelectedKey,
|
|
78
79
|
"aria-label": ariaLabel
|
|
79
80
|
} = props;
|
|
80
81
|
const idManager = useMemo(() => new OptionsItemIdManager(), []);
|
|
@@ -103,6 +104,7 @@ function BaseSelect(props) {
|
|
|
103
104
|
return /* @__PURE__ */ React.createElement(
|
|
104
105
|
Select,
|
|
105
106
|
__spreadValues({
|
|
107
|
+
defaultSelectedKey,
|
|
106
108
|
selectedKey,
|
|
107
109
|
onSelectionChange,
|
|
108
110
|
onOpenChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSelect.esm.js","sources":["../src/registerSelect.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from \"react\";\nimport {\n Select,\n SelectProps,\n SelectRenderProps,\n SelectStateContext,\n SelectValue,\n} from \"react-aria-components\";\nimport { COMMON_STYLES, arrowDown, getCommonProps } from \"./common\";\nimport {\n PlasmicListBoxContext,\n PlasmicPopoverTriggerContext,\n} from \"./contexts\";\nimport { OptionsItemIdManager } from \"./OptionsItemIdManager\";\nimport { BUTTON_COMPONENT_NAME } from \"./registerButton\";\nimport { LABEL_COMPONENT_NAME } from \"./registerLabel\";\nimport { LIST_BOX_COMPONENT_NAME } from \"./registerListBox\";\nimport { POPOVER_COMPONENT_NAME } from \"./registerPopover\";\nimport {\n HasControlContextData,\n Registerable,\n WithPlasmicCanvasComponentInfo,\n extractPlasmicDataProps,\n makeComponentName,\n registerComponentHelper,\n useAutoOpen,\n} from \"./utils\";\nimport { WithVariants, pickAriaComponentVariants } from \"./variant-utils\";\n\n// It cannot be used as a hook like useAutoOpen() within the BaseSelect component\n// because it needs access to SelectStateContext, which is only created in the BaseSelect component's render function.\nfunction SelectAutoOpen(props: any) {\n const { open, close } = React.useContext(SelectStateContext) ?? {};\n useAutoOpen({\n props,\n open: () => {\n open?.();\n // using settimeout because the focus is not immediately available\n setTimeout(() => {\n /*\n When the select's popover is opened in the canvas, the listbox gains focus, trapping the keyboard focus within it. Pressing the up or down arrow keys navigates through the listbox items.\n However, there are three issues with this behavior:\n\n 1. Focus should not be triggered in canvas (non-interactive mode)\n 2. Canvas (non-interactive mode) should remain non-interactive: Navigation between listbox items or selection using the space key should not be possible.\n 3. Keyboard hotkeys (e.g., backspace, undo) stop working: Key presses are absorbed by the listbox, breaking the expected behavior for shortcuts like backspace or undo (reference).\n\n To resolve this, we need to call document.activeElement.blur() to remove focus from the listbox.\n\n However, since the select component is a code component embedded within the artboard iframe, the keyboard hotkeys (e.g., backspace, undo) will not work,\n because they only function in the parent iframe (__wab_studio-frame).\n To ensure hotkeys work properly, we need to shift focus from the active element in the child iframe (artboard iframe) to the parent iframe (__wab_studio-frame) by using window.parent.\n */\n (window.parent.document.activeElement as HTMLElement)?.blur?.();\n }, 1);\n },\n close,\n });\n\n return null;\n}\n\nexport interface BaseSelectValueProps\n extends React.ComponentProps<typeof SelectValue> {\n children: React.ReactNode;\n}\n\nexport const BaseSelectValue = (props: BaseSelectValueProps) => {\n const { children: placeholder, className } = props;\n return (\n <SelectValue className={className} style={COMMON_STYLES}>\n {({ isPlaceholder, selectedText }) => (\n <>{isPlaceholder ? placeholder : selectedText}</>\n )}\n </SelectValue>\n );\n};\n\nconst SELECT_NAME = makeComponentName(\"select\");\n\nexport interface BaseSelectControlContextData {\n itemIds: string[];\n}\n\nconst SELECT_VARIANTS = [\n \"focused\" as const,\n \"focusVisible\" as const,\n \"disabled\" as const,\n];\n\nconst { variants: SELECT_VARIANTS_DATA } =\n pickAriaComponentVariants(SELECT_VARIANTS);\n\nexport interface BaseSelectProps\n extends SelectProps<{}>, // NOTE: We don't need generic type here since we don't use items prop (that needs it). We just need to make the type checker happy\n WithVariants<typeof SELECT_VARIANTS>,\n WithPlasmicCanvasComponentInfo,\n HasControlContextData<BaseSelectControlContextData> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function BaseSelect(props: BaseSelectProps) {\n const {\n selectedKey,\n onSelectionChange,\n onOpenChange,\n isDisabled,\n className,\n children,\n disabledKeys,\n name,\n setControlContextData,\n plasmicUpdateVariant,\n \"aria-label\": ariaLabel,\n } = props;\n\n const idManager = useMemo(() => new OptionsItemIdManager(), []);\n\n useEffect(() => {\n idManager.subscribe((ids: string[]) => {\n setControlContextData?.({\n itemIds: ids,\n });\n });\n }, []);\n\n const classNameProp = useCallback(\n ({\n isDisabled: isDisabled2,\n isFocusVisible,\n isFocused,\n }: SelectRenderProps) => {\n plasmicUpdateVariant?.({\n disabled: isDisabled2,\n focused: isFocused,\n focusVisible: isFocusVisible,\n });\n return className ?? \"\";\n },\n [className, plasmicUpdateVariant]\n );\n\n return (\n <Select\n selectedKey={selectedKey}\n onSelectionChange={onSelectionChange}\n onOpenChange={onOpenChange}\n isDisabled={isDisabled}\n className={classNameProp}\n style={COMMON_STYLES}\n name={name}\n disabledKeys={disabledKeys}\n aria-label={ariaLabel}\n {...extractPlasmicDataProps(props)}\n >\n <SelectAutoOpen {...props} />\n <PlasmicPopoverTriggerContext.Provider value={true}>\n <PlasmicListBoxContext.Provider\n value={{\n idManager,\n }}\n >\n {children}\n </PlasmicListBoxContext.Provider>\n </PlasmicPopoverTriggerContext.Provider>\n </Select>\n );\n}\n\nexport function registerSelect(loader?: Registerable) {\n const selectValueMeta = registerComponentHelper(loader, BaseSelectValue, {\n name: makeComponentName(\"select-value\"),\n displayName: \"Aria Selected Value\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerSelect\",\n importName: \"BaseSelectValue\",\n parentComponentName: SELECT_NAME,\n props: {\n /** @deprecated use children (Placeholder) directly */\n customize: {\n type: \"boolean\",\n displayName: \"Customize placeholder\",\n defaultValue: true,\n description: \"Customize the placeholder text and styles\",\n /** Obsolete, but retained (permanently hidden) for backward compatibility. */\n hidden: () => true,\n },\n children: {\n type: \"slot\",\n displayName: \"Placeholder\",\n defaultValue: [\n {\n type: \"text\",\n value: \"Select an item\",\n },\n ],\n },\n },\n trapsFocus: true,\n });\n\n registerComponentHelper(loader, BaseSelect, {\n name: SELECT_NAME,\n displayName: \"Aria Select\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerSelect\",\n importName: \"BaseSelect\",\n variants: SELECT_VARIANTS_DATA,\n props: {\n ...getCommonProps<BaseSelectProps>(\"Select\", [\n \"name\",\n \"aria-label\",\n \"isDisabled\",\n \"autoFocus\",\n ]),\n selectedKey: {\n type: \"choice\",\n editOnly: true,\n uncontrolledProp: \"defaultSelectedKey\",\n displayName: \"Initial selected item\",\n options: (_props, ctx) => (ctx?.itemIds ? Array.from(ctx.itemIds) : []),\n // React Aria Select do not support multiple selections yet\n multiSelect: false,\n },\n onSelectionChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"selectedValue\", type: \"string\" }],\n },\n disabledKeys: {\n type: \"choice\",\n displayName: \"Disabled values\",\n description:\n \"The items that are disabled. These items cannot be selected, focused, or otherwise interacted with.\",\n options: (_props, ctx) => (ctx?.itemIds ? Array.from(ctx.itemIds) : []),\n multiSelect: true,\n advanced: true,\n },\n isOpen: {\n type: \"boolean\",\n defaultValue: false,\n // It doesn't make sense to make isOpen prop editable (it's controlled by user interaction and always closed by default), so we keep this prop hidden. We have listed the prop here in the meta only so we can expose a writeable state for it.\n hidden: () => true,\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: [\n {\n type: \"vbox\",\n styles: {\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n width: \"300px\",\n padding: 0,\n },\n children: [\n {\n type: \"component\",\n name: LABEL_COMPONENT_NAME,\n props: {\n children: {\n type: \"text\",\n value: \"Label\",\n },\n },\n },\n {\n type: \"component\",\n name: BUTTON_COMPONENT_NAME,\n styles: {\n width: \"100%\",\n padding: \"4px 10px\",\n background: \"white\",\n },\n props: {\n children: {\n type: \"hbox\",\n styles: {\n width: \"stretch\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: 0,\n },\n children: [\n {\n type: \"component\",\n name: selectValueMeta.name,\n },\n arrowDown,\n ],\n },\n },\n },\n {\n type: \"component\",\n name: POPOVER_COMPONENT_NAME,\n styles: {\n backgroundColor: \"white\",\n padding: \"10px\",\n overflow: \"scroll\",\n width: \"unset\",\n },\n props: {\n children: [\n {\n type: \"component\",\n name: LIST_BOX_COMPONENT_NAME,\n props: {\n selectionMode: \"single\",\n },\n styles: {\n borderWidth: 0,\n width: \"stretch\",\n },\n },\n ],\n },\n },\n ],\n },\n ],\n },\n },\n states: {\n selectedValue: {\n type: \"writable\",\n valueProp: \"selectedKey\",\n onChangeProp: \"onSelectionChange\",\n variableType: \"text\",\n },\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n },\n },\n trapsFocus: true,\n });\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerSelect.esm.js","sources":["../src/registerSelect.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo } from \"react\";\nimport {\n Select,\n SelectProps,\n SelectRenderProps,\n SelectStateContext,\n SelectValue,\n} from \"react-aria-components\";\nimport { COMMON_STYLES, arrowDown, getCommonProps } from \"./common\";\nimport {\n PlasmicListBoxContext,\n PlasmicPopoverTriggerContext,\n} from \"./contexts\";\nimport { OptionsItemIdManager } from \"./OptionsItemIdManager\";\nimport { BUTTON_COMPONENT_NAME } from \"./registerButton\";\nimport { LABEL_COMPONENT_NAME } from \"./registerLabel\";\nimport { LIST_BOX_COMPONENT_NAME } from \"./registerListBox\";\nimport { POPOVER_COMPONENT_NAME } from \"./registerPopover\";\nimport {\n HasControlContextData,\n Registerable,\n WithPlasmicCanvasComponentInfo,\n extractPlasmicDataProps,\n makeComponentName,\n registerComponentHelper,\n useAutoOpen,\n} from \"./utils\";\nimport { WithVariants, pickAriaComponentVariants } from \"./variant-utils\";\n\n// It cannot be used as a hook like useAutoOpen() within the BaseSelect component\n// because it needs access to SelectStateContext, which is only created in the BaseSelect component's render function.\nfunction SelectAutoOpen(props: any) {\n const { open, close } = React.useContext(SelectStateContext) ?? {};\n useAutoOpen({\n props,\n open: () => {\n open?.();\n // using settimeout because the focus is not immediately available\n setTimeout(() => {\n /*\n When the select's popover is opened in the canvas, the listbox gains focus, trapping the keyboard focus within it. Pressing the up or down arrow keys navigates through the listbox items.\n However, there are three issues with this behavior:\n\n 1. Focus should not be triggered in canvas (non-interactive mode)\n 2. Canvas (non-interactive mode) should remain non-interactive: Navigation between listbox items or selection using the space key should not be possible.\n 3. Keyboard hotkeys (e.g., backspace, undo) stop working: Key presses are absorbed by the listbox, breaking the expected behavior for shortcuts like backspace or undo (reference).\n\n To resolve this, we need to call document.activeElement.blur() to remove focus from the listbox.\n\n However, since the select component is a code component embedded within the artboard iframe, the keyboard hotkeys (e.g., backspace, undo) will not work,\n because they only function in the parent iframe (__wab_studio-frame).\n To ensure hotkeys work properly, we need to shift focus from the active element in the child iframe (artboard iframe) to the parent iframe (__wab_studio-frame) by using window.parent.\n */\n (window.parent.document.activeElement as HTMLElement)?.blur?.();\n }, 1);\n },\n close,\n });\n\n return null;\n}\n\nexport interface BaseSelectValueProps\n extends React.ComponentProps<typeof SelectValue> {\n children: React.ReactNode;\n}\n\nexport const BaseSelectValue = (props: BaseSelectValueProps) => {\n const { children: placeholder, className } = props;\n return (\n <SelectValue className={className} style={COMMON_STYLES}>\n {({ isPlaceholder, selectedText }) => (\n <>{isPlaceholder ? placeholder : selectedText}</>\n )}\n </SelectValue>\n );\n};\n\nconst SELECT_NAME = makeComponentName(\"select\");\n\nexport interface BaseSelectControlContextData {\n itemIds: string[];\n}\n\nconst SELECT_VARIANTS = [\n \"focused\" as const,\n \"focusVisible\" as const,\n \"disabled\" as const,\n];\n\nconst { variants: SELECT_VARIANTS_DATA } =\n pickAriaComponentVariants(SELECT_VARIANTS);\n\nexport interface BaseSelectProps\n extends SelectProps<{}>, // NOTE: We don't need generic type here since we don't use items prop (that needs it). We just need to make the type checker happy\n WithVariants<typeof SELECT_VARIANTS>,\n WithPlasmicCanvasComponentInfo,\n HasControlContextData<BaseSelectControlContextData> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function BaseSelect(props: BaseSelectProps) {\n const {\n selectedKey,\n onSelectionChange,\n onOpenChange,\n isDisabled,\n className,\n children,\n disabledKeys,\n name,\n setControlContextData,\n plasmicUpdateVariant,\n defaultSelectedKey,\n \"aria-label\": ariaLabel,\n } = props;\n\n const idManager = useMemo(() => new OptionsItemIdManager(), []);\n\n useEffect(() => {\n idManager.subscribe((ids: string[]) => {\n setControlContextData?.({\n itemIds: ids,\n });\n });\n }, []);\n\n const classNameProp = useCallback(\n ({\n isDisabled: isDisabled2,\n isFocusVisible,\n isFocused,\n }: SelectRenderProps) => {\n plasmicUpdateVariant?.({\n disabled: isDisabled2,\n focused: isFocused,\n focusVisible: isFocusVisible,\n });\n return className ?? \"\";\n },\n [className, plasmicUpdateVariant]\n );\n\n return (\n <Select\n defaultSelectedKey={defaultSelectedKey}\n selectedKey={selectedKey}\n onSelectionChange={onSelectionChange}\n onOpenChange={onOpenChange}\n isDisabled={isDisabled}\n className={classNameProp}\n style={COMMON_STYLES}\n name={name}\n disabledKeys={disabledKeys}\n aria-label={ariaLabel}\n {...extractPlasmicDataProps(props)}\n >\n <SelectAutoOpen {...props} />\n <PlasmicPopoverTriggerContext.Provider value={true}>\n <PlasmicListBoxContext.Provider\n value={{\n idManager,\n }}\n >\n {children}\n </PlasmicListBoxContext.Provider>\n </PlasmicPopoverTriggerContext.Provider>\n </Select>\n );\n}\n\nexport function registerSelect(loader?: Registerable) {\n const selectValueMeta = registerComponentHelper(loader, BaseSelectValue, {\n name: makeComponentName(\"select-value\"),\n displayName: \"Aria Selected Value\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerSelect\",\n importName: \"BaseSelectValue\",\n parentComponentName: SELECT_NAME,\n props: {\n /** @deprecated use children (Placeholder) directly */\n customize: {\n type: \"boolean\",\n displayName: \"Customize placeholder\",\n defaultValue: true,\n description: \"Customize the placeholder text and styles\",\n /** Obsolete, but retained (permanently hidden) for backward compatibility. */\n hidden: () => true,\n },\n children: {\n type: \"slot\",\n displayName: \"Placeholder\",\n defaultValue: [\n {\n type: \"text\",\n value: \"Select an item\",\n },\n ],\n },\n },\n trapsFocus: true,\n });\n\n registerComponentHelper(loader, BaseSelect, {\n name: SELECT_NAME,\n displayName: \"Aria Select\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerSelect\",\n importName: \"BaseSelect\",\n variants: SELECT_VARIANTS_DATA,\n props: {\n ...getCommonProps<BaseSelectProps>(\"Select\", [\n \"name\",\n \"aria-label\",\n \"isDisabled\",\n \"autoFocus\",\n ]),\n selectedKey: {\n type: \"choice\",\n editOnly: true,\n uncontrolledProp: \"defaultSelectedKey\",\n displayName: \"Initial selected item\",\n options: (_props, ctx) => (ctx?.itemIds ? Array.from(ctx.itemIds) : []),\n // React Aria Select do not support multiple selections yet\n multiSelect: false,\n },\n onSelectionChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"selectedValue\", type: \"string\" }],\n },\n disabledKeys: {\n type: \"choice\",\n displayName: \"Disabled values\",\n description:\n \"The items that are disabled. These items cannot be selected, focused, or otherwise interacted with.\",\n options: (_props, ctx) => (ctx?.itemIds ? Array.from(ctx.itemIds) : []),\n multiSelect: true,\n advanced: true,\n },\n isOpen: {\n type: \"boolean\",\n defaultValue: false,\n // It doesn't make sense to make isOpen prop editable (it's controlled by user interaction and always closed by default), so we keep this prop hidden. We have listed the prop here in the meta only so we can expose a writeable state for it.\n hidden: () => true,\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: [\n {\n type: \"vbox\",\n styles: {\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n width: \"300px\",\n padding: 0,\n },\n children: [\n {\n type: \"component\",\n name: LABEL_COMPONENT_NAME,\n props: {\n children: {\n type: \"text\",\n value: \"Label\",\n },\n },\n },\n {\n type: \"component\",\n name: BUTTON_COMPONENT_NAME,\n styles: {\n width: \"100%\",\n padding: \"4px 10px\",\n background: \"white\",\n },\n props: {\n children: {\n type: \"hbox\",\n styles: {\n width: \"stretch\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: 0,\n },\n children: [\n {\n type: \"component\",\n name: selectValueMeta.name,\n },\n arrowDown,\n ],\n },\n },\n },\n {\n type: \"component\",\n name: POPOVER_COMPONENT_NAME,\n styles: {\n backgroundColor: \"white\",\n padding: \"10px\",\n overflow: \"scroll\",\n width: \"unset\",\n },\n props: {\n children: [\n {\n type: \"component\",\n name: LIST_BOX_COMPONENT_NAME,\n props: {\n selectionMode: \"single\",\n },\n styles: {\n borderWidth: 0,\n width: \"stretch\",\n },\n },\n ],\n },\n },\n ],\n },\n ],\n },\n },\n states: {\n selectedValue: {\n type: \"writable\",\n valueProp: \"selectedKey\",\n onChangeProp: \"onSelectionChange\",\n variableType: \"text\",\n },\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n },\n },\n trapsFocus: true,\n });\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -93,6 +93,43 @@ const Basic = {
|
|
|
93
93
|
test.expect(args.onSelectionChange).toHaveBeenCalledOnce();
|
|
94
94
|
}
|
|
95
95
|
};
|
|
96
|
+
const WithDefaultSelection = {
|
|
97
|
+
args: {
|
|
98
|
+
defaultSelectedKey: "3",
|
|
99
|
+
children: /* @__PURE__ */ React__default.default.createElement(BoilerplateSelect, null, createListItems(3).map((item) => /* @__PURE__ */ React__default.default.createElement(registerListBoxItem.BaseListBoxItem, { textValue: item.textValue, id: item.id }, item.children)))
|
|
100
|
+
},
|
|
101
|
+
play: async ({ canvasElement }) => {
|
|
102
|
+
const canvas = test.within(canvasElement);
|
|
103
|
+
const doc = test.within(document.body);
|
|
104
|
+
const button = canvas.getByRole("button");
|
|
105
|
+
test.expect(doc.queryByRole("listbox")).not.toBeInTheDocument();
|
|
106
|
+
await test.waitFor(() => test.expect(button).toHaveTextContent("Item 3"));
|
|
107
|
+
await test.userEvent.click(button);
|
|
108
|
+
const options = test.within(doc.getByRole("listbox")).getAllByRole("option");
|
|
109
|
+
await test.userEvent.click(options[1]);
|
|
110
|
+
test.expect(button).toHaveTextContent("Item 2");
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const Disabled = {
|
|
114
|
+
args: {
|
|
115
|
+
defaultSelectedKey: "3",
|
|
116
|
+
isDisabled: true,
|
|
117
|
+
children: /* @__PURE__ */ React__default.default.createElement(BoilerplateSelect, null, createListItems(3).map((item) => /* @__PURE__ */ React__default.default.createElement(registerListBoxItem.BaseListBoxItem, { textValue: item.textValue, id: item.id }, item.children)))
|
|
118
|
+
},
|
|
119
|
+
play: async ({ canvasElement, args }) => {
|
|
120
|
+
const canvas = test.within(canvasElement);
|
|
121
|
+
const doc = test.within(document.body);
|
|
122
|
+
const button = canvas.getByRole("button");
|
|
123
|
+
test.expect(button).toBeDisabled();
|
|
124
|
+
await test.userEvent.tab();
|
|
125
|
+
await test.waitFor(() => test.expect(button).toHaveTextContent("Item 3"));
|
|
126
|
+
await test.userEvent.click(button);
|
|
127
|
+
test.expect(doc.queryByRole("listbox")).not.toBeInTheDocument();
|
|
128
|
+
test.expect(button).toHaveTextContent("Item 3");
|
|
129
|
+
test.expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
130
|
+
test.expect(args.onSelectionChange).not.toHaveBeenCalled();
|
|
131
|
+
}
|
|
132
|
+
};
|
|
96
133
|
const WithDisabledOptions = {
|
|
97
134
|
args: {
|
|
98
135
|
disabledKeys: ["1"],
|
|
@@ -170,7 +207,9 @@ const SelectedInCanvas = {
|
|
|
170
207
|
};
|
|
171
208
|
|
|
172
209
|
exports.Basic = Basic;
|
|
210
|
+
exports.Disabled = Disabled;
|
|
173
211
|
exports.SelectedInCanvas = SelectedInCanvas;
|
|
212
|
+
exports.WithDefaultSelection = WithDefaultSelection;
|
|
174
213
|
exports.WithDisabledOptions = WithDisabledOptions;
|
|
175
214
|
exports.default = meta;
|
|
176
215
|
//# sourceMappingURL=registerSelect.stories.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSelect.stories.cjs.js","sources":["../src/registerSelect.stories.tsx"],"sourcesContent":["import { PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React, { useEffect, useState } from \"react\";\nimport { BaseButton } from \"./registerButton\";\nimport { BaseListBox } from \"./registerListBox\";\nimport { BaseListBoxItem } from \"./registerListBoxItem\";\nimport { BasePopover } from \"./registerPopover\";\nimport { BaseSelect, BaseSelectValue } from \"./registerSelect\";\n\nconst meta: Meta<typeof BaseSelect> = {\n title: \"Components/BaseSelect\",\n component: BaseSelect,\n args: {\n onSelectionChange: fn(),\n onOpenChange: fn(),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseSelect>;\n\n// Helper function to create list items\nconst createListItems = (count: number) => {\n return Array.from({ length: count }, (_, i) => ({\n id: `${i + 1}`,\n textValue: `Item ${i + 1}`,\n children: `Item ${i + 1}`,\n }));\n};\n\nconst BoilerplateSelect = ({ children }: { children: React.ReactNode }) => (\n <>\n <BaseButton>\n <BaseSelectValue>Select an option ▼</BaseSelectValue>\n </BaseButton>\n <BasePopover>\n <BaseListBox>{children}</BaseListBox>\n </BasePopover>\n </>\n);\n\nexport const Basic: Story = {\n args: {\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n expect(button).toHaveTextContent(\"Select an option ▼\");\n\n // Open the select\n await userEvent.click(button);\n\n // Ensure that clicking the button shows all available options, regardless of the input value\n const options = await within(doc.getByRole(\"listbox\")).findAllByRole(\n \"option\"\n );\n expect(options).toHaveLength(3);\n\n // Select an option\n await userEvent.click(options[1]);\n // Check that the input value is updated\n expect(button).toHaveTextContent(\"Item 2\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n // Check that the onOpenChange and onSelectionChange are called as expected\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n expect(args.onSelectionChange).toHaveBeenCalledOnce();\n },\n};\n\n// TODO: Currently, the BaseSelect does not pass defaultSelectedKey prop to <Select>, causing the below tests to fail.\n// Uncomment the test below in the PR that fixes the issue\n// export const WithDefaultSelection: Story = {\n// args: {\n// defaultSelectedKey: \"3\",\n// children: (\n// <BoilerplateSelect>\n// {createListItems(3).map((item) => (\n// <BaseListBoxItem textValue={item.textValue} id={item.id}>\n// {item.children}\n// </BaseListBoxItem>\n// ))}\n// </BoilerplateSelect>\n// ),\n// },\n// play: async ({ canvasElement }) => {\n// const canvas = within(canvasElement);\n// // popovers are rendered outside canvas, so we need to use document.body\n// const doc = within(document.body);\n\n// // Get the button and input\n// const button = canvas.getByRole(\"button\");\n\n// // Check that listbox is not in the document\n// expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n// await waitFor(() => expect(button).toHaveTextContent(\"Item 3\")); // via defaultSelectedKey\n\n// // Open the select\n// await userEvent.click(button);\n\n// const options = within(doc.getByRole(\"listbox\")).getAllByRole(\"option\");\n// await userEvent.click(options[1]);\n\n// expect(button).toHaveTextContent(\"Item 2\");\n// },\n// };\n\n// export const Disabled: Story = {\n// args: {\n// defaultSelectedKey: \"3\",\n// isDisabled: true,\n// children: (\n// <BoilerplateSelect>\n// {createListItems(3).map((item) => (\n// <BaseListBoxItem textValue={item.textValue} id={item.id}>\n// {item.children}\n// </BaseListBoxItem>\n// ))}\n// </BoilerplateSelect>\n// ),\n// },\n// play: async ({ canvasElement, args }) => {\n// const canvas = within(canvasElement);\n// // popovers are rendered outside canvas, so we need to use document.body\n// const doc = within(document.body);\n\n// // Get the button and input\n// const button = canvas.getByRole(\"button\");\n\n// // Verify disabled state\n// expect(button).toBeDisabled();\n\n// await userEvent.tab(); // NOTE: I'm not sure why, but without this, the test is very flaky at the next line.\n// await waitFor(() => expect(button).toHaveTextContent(\"Item 3\")); // via defaultSelectedKey\n\n// // Open the select\n// await userEvent.click(button);\n\n// // Check that listbox is not in the document\n// expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n// expect(button).toHaveTextContent(\"Item 3\"); // unchanged\n\n// expect(args.onOpenChange).not.toHaveBeenCalled();\n// expect(args.onSelectionChange).not.toHaveBeenCalled();\n// },\n// };\n\nexport const WithDisabledOptions: Story = {\n args: {\n disabledKeys: [\"1\"],\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n expect(button).toHaveTextContent(\"Select an option ▼\");\n\n // Open the select\n await userEvent.click(button);\n expect(args.onOpenChange).toHaveBeenCalledOnce();\n\n // Ensure that clicking the button shows all available options, regardless of the input value\n const listbox = await doc.findByRole(\"listbox\");\n const options = await within(listbox).findAllByRole(\"option\");\n expect(options).toHaveLength(3);\n\n // click the disabled option\n await userEvent.click(options[0]);\n expect(args.onOpenChange).toHaveBeenCalledOnce(); // the popover does not close when selecting a disabled option\n expect(args.onSelectionChange).not.toHaveBeenCalled(); // the select state does not change when selecting a disabled option\n expect(button).toHaveTextContent(\"Select an option ▼\"); // unchanged\n\n await userEvent.click(options[1]); // Other items stay selectable\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n expect(args.onSelectionChange).toHaveBeenCalledOnce();\n\n expect(button).toHaveTextContent(\"Item 2\");\n },\n};\n\nexport const SelectedInCanvas: Story = {\n args: {\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n }, 1000);\n }, []);\n\n return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <BaseSelect\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(\n () => {\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n },\n { timeout: 100 }\n );\n\n await waitFor(\n () => {\n expect(doc.queryByRole(\"listbox\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n },\n};\n"],"names":["BaseSelect","fn","React","BaseButton","BaseSelectValue","BasePopover","BaseListBox","BaseListBoxItem","within","expect","userEvent","useState","useEffect","PlasmicCanvasContext","waitFor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerSelect.stories.cjs.js","sources":["../src/registerSelect.stories.tsx"],"sourcesContent":["import { PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React, { useEffect, useState } from \"react\";\nimport { BaseButton } from \"./registerButton\";\nimport { BaseListBox } from \"./registerListBox\";\nimport { BaseListBoxItem } from \"./registerListBoxItem\";\nimport { BasePopover } from \"./registerPopover\";\nimport { BaseSelect, BaseSelectValue } from \"./registerSelect\";\n\nconst meta: Meta<typeof BaseSelect> = {\n title: \"Components/BaseSelect\",\n component: BaseSelect,\n args: {\n onSelectionChange: fn(),\n onOpenChange: fn(),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseSelect>;\n\n// Helper function to create list items\nconst createListItems = (count: number) => {\n return Array.from({ length: count }, (_, i) => ({\n id: `${i + 1}`,\n textValue: `Item ${i + 1}`,\n children: `Item ${i + 1}`,\n }));\n};\n\nconst BoilerplateSelect = ({ children }: { children: React.ReactNode }) => (\n <>\n <BaseButton>\n <BaseSelectValue>Select an option ▼</BaseSelectValue>\n </BaseButton>\n <BasePopover>\n <BaseListBox>{children}</BaseListBox>\n </BasePopover>\n </>\n);\n\nexport const Basic: Story = {\n args: {\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n expect(button).toHaveTextContent(\"Select an option ▼\");\n\n // Open the select\n await userEvent.click(button);\n\n // Ensure that clicking the button shows all available options, regardless of the input value\n const options = await within(doc.getByRole(\"listbox\")).findAllByRole(\n \"option\"\n );\n expect(options).toHaveLength(3);\n\n // Select an option\n await userEvent.click(options[1]);\n // Check that the input value is updated\n expect(button).toHaveTextContent(\"Item 2\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n // Check that the onOpenChange and onSelectionChange are called as expected\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n expect(args.onSelectionChange).toHaveBeenCalledOnce();\n },\n};\n\nexport const WithDefaultSelection: Story = {\n args: {\n defaultSelectedKey: \"3\",\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n await waitFor(() => expect(button).toHaveTextContent(\"Item 3\")); // via defaultSelectedKey\n\n // Open the select\n await userEvent.click(button);\n\n const options = within(doc.getByRole(\"listbox\")).getAllByRole(\"option\");\n await userEvent.click(options[1]);\n\n expect(button).toHaveTextContent(\"Item 2\");\n },\n};\n\nexport const Disabled: Story = {\n args: {\n defaultSelectedKey: \"3\",\n isDisabled: true,\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n // Verify disabled state\n expect(button).toBeDisabled();\n\n await userEvent.tab(); // NOTE: I'm not sure why, but without this, the test is very flaky at the next line.\n await waitFor(() => expect(button).toHaveTextContent(\"Item 3\")); // via defaultSelectedKey\n\n // Open the select\n await userEvent.click(button);\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n expect(button).toHaveTextContent(\"Item 3\"); // unchanged\n\n expect(args.onOpenChange).not.toHaveBeenCalled();\n expect(args.onSelectionChange).not.toHaveBeenCalled();\n },\n};\n\nexport const WithDisabledOptions: Story = {\n args: {\n disabledKeys: [\"1\"],\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n expect(button).toHaveTextContent(\"Select an option ▼\");\n\n // Open the select\n await userEvent.click(button);\n expect(args.onOpenChange).toHaveBeenCalledOnce();\n\n // Ensure that clicking the button shows all available options, regardless of the input value\n const listbox = await doc.findByRole(\"listbox\");\n const options = await within(listbox).findAllByRole(\"option\");\n expect(options).toHaveLength(3);\n\n // click the disabled option\n await userEvent.click(options[0]);\n expect(args.onOpenChange).toHaveBeenCalledOnce(); // the popover does not close when selecting a disabled option\n expect(args.onSelectionChange).not.toHaveBeenCalled(); // the select state does not change when selecting a disabled option\n expect(button).toHaveTextContent(\"Select an option ▼\"); // unchanged\n\n await userEvent.click(options[1]); // Other items stay selectable\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n expect(args.onSelectionChange).toHaveBeenCalledOnce();\n\n expect(button).toHaveTextContent(\"Item 2\");\n },\n};\n\nexport const SelectedInCanvas: Story = {\n args: {\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n }, 1000);\n }, []);\n\n return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <BaseSelect\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(\n () => {\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n },\n { timeout: 100 }\n );\n\n await waitFor(\n () => {\n expect(doc.queryByRole(\"listbox\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n },\n};\n"],"names":["BaseSelect","fn","React","BaseButton","BaseSelectValue","BasePopover","BaseListBox","BaseListBoxItem","within","expect","userEvent","waitFor","useState","useEffect","PlasmicCanvasContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,MAAM,IAAgC,GAAA;AAAA,EACpC,KAAO,EAAA,uBAAA;AAAA,EACP,SAAW,EAAAA,yBAAA;AAAA,EACX,IAAM,EAAA;AAAA,IACJ,mBAAmBC,OAAG,EAAA;AAAA,IACtB,cAAcA,OAAG,EAAA;AAAA,GACnB;AACF,EAAA;AAMA,MAAM,eAAA,GAAkB,CAAC,KAAkB,KAAA;AACzC,EAAO,OAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAS,EAAA,CAAC,GAAG,CAAO,MAAA;AAAA,IAC9C,EAAA,EAAI,GAAG,CAAI,GAAA,CAAA,CAAA,CAAA;AAAA,IACX,SAAA,EAAW,QAAQ,CAAI,GAAA,CAAA,CAAA,CAAA;AAAA,IACvB,QAAA,EAAU,QAAQ,CAAI,GAAA,CAAA,CAAA,CAAA;AAAA,GACtB,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA;AAEA,MAAM,oBAAoB,CAAC,EAAE,UAC3B,qBAAAC,sBAAA,CAAA,aAAA,CAAAA,sBAAA,CAAA,QAAA,EAAA,IAAA,uDACGC,yBACC,EAAA,IAAA,kBAAAD,sBAAA,CAAA,aAAA,CAACE,sCAAgB,yBAAkB,CACrC,mBACCF,sBAAA,CAAA,aAAA,CAAAG,2BAAA,EAAA,IAAA,uDACEC,2BAAa,EAAA,IAAA,EAAA,QAAS,CACzB,CACF,CAAA,CAAA;AAGK,MAAM,KAAe,GAAA;AAAA,EAC1B,IAAM,EAAA;AAAA,IACJ,QAAA,uDACG,iBACE,EAAA,IAAA,EAAA,eAAA,CAAgB,CAAC,CAAE,CAAA,GAAA,CAAI,CAAC,IACvB,qBAAAJ,sBAAA,CAAA,aAAA,CAACK,uCAAgB,SAAW,EAAA,IAAA,CAAK,WAAW,EAAI,EAAA,IAAA,CAAK,MAClD,IAAK,CAAA,QACR,CACD,CACH,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAe,MAAW,KAAA;AACvC,IAAM,MAAA,MAAA,GAASC,YAAO,aAAa,CAAA,CAAA;AAEnC,IAAM,MAAA,GAAA,GAAMA,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGhC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAGxC,IAAAC,WAAA,CAAO,IAAI,WAAY,CAAA,SAAS,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AACzD,IAAOA,WAAA,CAAA,MAAM,CAAE,CAAA,iBAAA,CAAkB,yBAAoB,CAAA,CAAA;AAGrD,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAG5B,IAAA,MAAM,UAAU,MAAMF,WAAA,CAAO,IAAI,SAAU,CAAA,SAAS,CAAC,CAAE,CAAA,aAAA;AAAA,MACrD,QAAA;AAAA,KACF,CAAA;AACA,IAAOC,WAAA,CAAA,OAAO,CAAE,CAAA,YAAA,CAAa,CAAC,CAAA,CAAA;AAG9B,IAAA,MAAMC,cAAU,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAC,CAAA,CAAA;AAEhC,IAAOD,WAAA,CAAA,MAAM,CAAE,CAAA,iBAAA,CAAkB,QAAQ,CAAA,CAAA;AAGzC,IAAAA,WAAA,CAAO,IAAI,WAAY,CAAA,SAAS,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAGzD,IAAAA,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AACjD,IAAOA,WAAA,CAAA,IAAA,CAAK,iBAAiB,CAAA,CAAE,oBAAqB,EAAA,CAAA;AAAA,GACtD;AACF,EAAA;AAEO,MAAM,oBAA8B,GAAA;AAAA,EACzC,IAAM,EAAA;AAAA,IACJ,kBAAoB,EAAA,GAAA;AAAA,IACpB,QAAA,uDACG,iBACE,EAAA,IAAA,EAAA,eAAA,CAAgB,CAAC,CAAE,CAAA,GAAA,CAAI,CAAC,IACvB,qBAAAP,sBAAA,CAAA,aAAA,CAACK,uCAAgB,SAAW,EAAA,IAAA,CAAK,WAAW,EAAI,EAAA,IAAA,CAAK,MAClD,IAAK,CAAA,QACR,CACD,CACH,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAoB,KAAA;AACjC,IAAM,MAAA,MAAA,GAASC,YAAO,aAAa,CAAA,CAAA;AAEnC,IAAM,MAAA,GAAA,GAAMA,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGhC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAGxC,IAAAC,WAAA,CAAO,IAAI,WAAY,CAAA,SAAS,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAEzD,IAAA,MAAME,aAAQ,MAAMF,WAAA,CAAO,MAAM,CAAE,CAAA,iBAAA,CAAkB,QAAQ,CAAC,CAAA,CAAA;AAG9D,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAE5B,IAAM,MAAA,OAAA,GAAUF,YAAO,GAAI,CAAA,SAAA,CAAU,SAAS,CAAC,CAAA,CAAE,aAAa,QAAQ,CAAA,CAAA;AACtE,IAAA,MAAME,cAAU,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAC,CAAA,CAAA;AAEhC,IAAOD,WAAA,CAAA,MAAM,CAAE,CAAA,iBAAA,CAAkB,QAAQ,CAAA,CAAA;AAAA,GAC3C;AACF,EAAA;AAEO,MAAM,QAAkB,GAAA;AAAA,EAC7B,IAAM,EAAA;AAAA,IACJ,kBAAoB,EAAA,GAAA;AAAA,IACpB,UAAY,EAAA,IAAA;AAAA,IACZ,QAAA,uDACG,iBACE,EAAA,IAAA,EAAA,eAAA,CAAgB,CAAC,CAAE,CAAA,GAAA,CAAI,CAAC,IACvB,qBAAAP,sBAAA,CAAA,aAAA,CAACK,uCAAgB,SAAW,EAAA,IAAA,CAAK,WAAW,EAAI,EAAA,IAAA,CAAK,MAClD,IAAK,CAAA,QACR,CACD,CACH,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAe,MAAW,KAAA;AACvC,IAAM,MAAA,MAAA,GAASC,YAAO,aAAa,CAAA,CAAA;AAEnC,IAAM,MAAA,GAAA,GAAMA,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGhC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAGxC,IAAOC,WAAA,CAAA,MAAM,EAAE,YAAa,EAAA,CAAA;AAE5B,IAAA,MAAMC,eAAU,GAAI,EAAA,CAAA;AACpB,IAAA,MAAMC,aAAQ,MAAMF,WAAA,CAAO,MAAM,CAAE,CAAA,iBAAA,CAAkB,QAAQ,CAAC,CAAA,CAAA;AAG9D,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAG5B,IAAAD,WAAA,CAAO,IAAI,WAAY,CAAA,SAAS,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAEzD,IAAOA,WAAA,CAAA,MAAM,CAAE,CAAA,iBAAA,CAAkB,QAAQ,CAAA,CAAA;AAEzC,IAAAA,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAC/C,IAAAA,WAAA,CAAO,IAAK,CAAA,iBAAiB,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAAA,GACtD;AACF,EAAA;AAEO,MAAM,mBAA6B,GAAA;AAAA,EACxC,IAAM,EAAA;AAAA,IACJ,YAAA,EAAc,CAAC,GAAG,CAAA;AAAA,IAClB,QAAA,uDACG,iBACE,EAAA,IAAA,EAAA,eAAA,CAAgB,CAAC,CAAE,CAAA,GAAA,CAAI,CAAC,IACvB,qBAAAP,sBAAA,CAAA,aAAA,CAACK,uCAAgB,SAAW,EAAA,IAAA,CAAK,WAAW,EAAI,EAAA,IAAA,CAAK,MAClD,IAAK,CAAA,QACR,CACD,CACH,CAAA;AAAA,GAEJ;AAAA,EACA,IAAM,EAAA,OAAO,EAAE,aAAA,EAAe,MAAW,KAAA;AACvC,IAAM,MAAA,MAAA,GAASC,YAAO,aAAa,CAAA,CAAA;AAEnC,IAAM,MAAA,GAAA,GAAMA,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGhC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,SAAA,CAAU,QAAQ,CAAA,CAAA;AAExC,IAAAC,WAAA,CAAO,IAAI,WAAY,CAAA,SAAS,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AACzD,IAAOA,WAAA,CAAA,MAAM,CAAE,CAAA,iBAAA,CAAkB,yBAAoB,CAAA,CAAA;AAGrD,IAAM,MAAAC,cAAA,CAAU,MAAM,MAAM,CAAA,CAAA;AAC5B,IAAOD,WAAA,CAAA,IAAA,CAAK,YAAY,CAAA,CAAE,oBAAqB,EAAA,CAAA;AAG/C,IAAA,MAAM,OAAU,GAAA,MAAM,GAAI,CAAA,UAAA,CAAW,SAAS,CAAA,CAAA;AAC9C,IAAA,MAAM,UAAU,MAAMD,WAAA,CAAO,OAAO,CAAA,CAAE,cAAc,QAAQ,CAAA,CAAA;AAC5D,IAAOC,WAAA,CAAA,OAAO,CAAE,CAAA,YAAA,CAAa,CAAC,CAAA,CAAA;AAG9B,IAAA,MAAMC,cAAU,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAC,CAAA,CAAA;AAChC,IAAOD,WAAA,CAAA,IAAA,CAAK,YAAY,CAAA,CAAE,oBAAqB,EAAA,CAAA;AAC/C,IAAAA,WAAA,CAAO,IAAK,CAAA,iBAAiB,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AACpD,IAAOA,WAAA,CAAA,MAAM,CAAE,CAAA,iBAAA,CAAkB,yBAAoB,CAAA,CAAA;AAErD,IAAA,MAAMC,cAAU,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAC,CAAA,CAAA;AAChC,IAAAD,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,qBAAA,CAAsB,CAAC,CAAA,CAAA;AACjD,IAAOA,WAAA,CAAA,IAAA,CAAK,iBAAiB,CAAA,CAAE,oBAAqB,EAAA,CAAA;AAEpD,IAAOA,WAAA,CAAA,MAAM,CAAE,CAAA,iBAAA,CAAkB,QAAQ,CAAA,CAAA;AAAA,GAC3C;AACF,EAAA;AAEO,MAAM,gBAA0B,GAAA;AAAA,EACrC,IAAM,EAAA;AAAA,IACJ,QAAA,uDACG,iBACE,EAAA,IAAA,EAAA,eAAA,CAAgB,CAAC,CAAE,CAAA,GAAA,CAAI,CAAC,IACvB,qBAAAP,sBAAA,CAAA,aAAA,CAACK,uCAAgB,SAAW,EAAA,IAAA,CAAK,WAAW,EAAI,EAAA,IAAA,CAAK,MAClD,IAAK,CAAA,QACR,CACD,CACH,CAAA;AAAA,GAEJ;AAAA,EACA,MAAA,EAAQ,CAAC,EAA4C,KAAA;AAA5C,IAAA,IAAA,EAAA,GAAA,EAAA,CAAA,CAAiC,IAAA,GAAA,SAAA,CAAjC,IAAiC,CAA/B,4BAAA,CAAA,EAAA;AACT,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIK,eAAS,KAAK,CAAA,CAAA;AAC9C,IAAAC,eAAA,CAAU,MAAM;AACd,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,SACf,GAAI,CAAA,CAAA;AAAA,KACT,EAAG,EAAE,CAAA,CAAA;AAEL,IAAA;AAAA;AAAA,sBAEEX,sBAAA,CAAA,aAAA;AAAA,QAACY,yBAAqB,CAAA,QAAA;AAAA,QAArB;AAAA,UACC,KAAO,EAAA;AAAA,YACL,aAAe,EAAA,MAAA;AAAA,YACf,gBAAgB,EAAC;AAAA,WACnB;AAAA,SAAA;AAAA,wBAEAZ,sBAAA,CAAA,aAAA;AAAA,UAACF,yBAAA;AAAA,UAAA,cAAA,CAAA;AAAA,YAEC,0BAA4B,EAAA;AAAA,cAC1B,UAAY,EAAA,QAAA;AAAA,aACd;AAAA,WACI,EAAA,IAAA,CAAA;AAAA,SACN;AAAA,OACF;AAAA,MAAA;AAAA,GAEJ;AAAA,EACA,MAAM,YAAY;AAEhB,IAAM,MAAA,GAAA,GAAMQ,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAEhC,IAAM,MAAAG,YAAA;AAAA,MACJ,MAAM;AACJ,QAAAF,WAAA,CAAO,IAAI,WAAY,CAAA,SAAS,CAAC,CAAA,CAAE,IAAI,iBAAkB,EAAA,CAAA;AAAA,OAC3D;AAAA,MACA,EAAE,SAAS,GAAI,EAAA;AAAA,KACjB,CAAA;AAEA,IAAM,MAAAE,YAAA;AAAA,MACJ,MAAM;AACJ,QAAAF,WAAA,CAAO,GAAI,CAAA,WAAA,CAAY,SAAS,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,OACvD;AAAA,MACA,EAAE,SAAS,IAAK,EAAA;AAAA,KAClB,CAAA;AAAA,GACF;AACF;;;;;;;;;"}
|
|
@@ -85,6 +85,43 @@ const Basic = {
|
|
|
85
85
|
expect(args.onSelectionChange).toHaveBeenCalledOnce();
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
|
+
const WithDefaultSelection = {
|
|
89
|
+
args: {
|
|
90
|
+
defaultSelectedKey: "3",
|
|
91
|
+
children: /* @__PURE__ */ React.createElement(BoilerplateSelect, null, createListItems(3).map((item) => /* @__PURE__ */ React.createElement(BaseListBoxItem, { textValue: item.textValue, id: item.id }, item.children)))
|
|
92
|
+
},
|
|
93
|
+
play: async ({ canvasElement }) => {
|
|
94
|
+
const canvas = within(canvasElement);
|
|
95
|
+
const doc = within(document.body);
|
|
96
|
+
const button = canvas.getByRole("button");
|
|
97
|
+
expect(doc.queryByRole("listbox")).not.toBeInTheDocument();
|
|
98
|
+
await waitFor(() => expect(button).toHaveTextContent("Item 3"));
|
|
99
|
+
await userEvent.click(button);
|
|
100
|
+
const options = within(doc.getByRole("listbox")).getAllByRole("option");
|
|
101
|
+
await userEvent.click(options[1]);
|
|
102
|
+
expect(button).toHaveTextContent("Item 2");
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const Disabled = {
|
|
106
|
+
args: {
|
|
107
|
+
defaultSelectedKey: "3",
|
|
108
|
+
isDisabled: true,
|
|
109
|
+
children: /* @__PURE__ */ React.createElement(BoilerplateSelect, null, createListItems(3).map((item) => /* @__PURE__ */ React.createElement(BaseListBoxItem, { textValue: item.textValue, id: item.id }, item.children)))
|
|
110
|
+
},
|
|
111
|
+
play: async ({ canvasElement, args }) => {
|
|
112
|
+
const canvas = within(canvasElement);
|
|
113
|
+
const doc = within(document.body);
|
|
114
|
+
const button = canvas.getByRole("button");
|
|
115
|
+
expect(button).toBeDisabled();
|
|
116
|
+
await userEvent.tab();
|
|
117
|
+
await waitFor(() => expect(button).toHaveTextContent("Item 3"));
|
|
118
|
+
await userEvent.click(button);
|
|
119
|
+
expect(doc.queryByRole("listbox")).not.toBeInTheDocument();
|
|
120
|
+
expect(button).toHaveTextContent("Item 3");
|
|
121
|
+
expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
122
|
+
expect(args.onSelectionChange).not.toHaveBeenCalled();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
88
125
|
const WithDisabledOptions = {
|
|
89
126
|
args: {
|
|
90
127
|
disabledKeys: ["1"],
|
|
@@ -161,5 +198,5 @@ const SelectedInCanvas = {
|
|
|
161
198
|
}
|
|
162
199
|
};
|
|
163
200
|
|
|
164
|
-
export { Basic, SelectedInCanvas, WithDisabledOptions, meta as default };
|
|
201
|
+
export { Basic, Disabled, SelectedInCanvas, WithDefaultSelection, WithDisabledOptions, meta as default };
|
|
165
202
|
//# sourceMappingURL=registerSelect.stories.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSelect.stories.esm.js","sources":["../src/registerSelect.stories.tsx"],"sourcesContent":["import { PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React, { useEffect, useState } from \"react\";\nimport { BaseButton } from \"./registerButton\";\nimport { BaseListBox } from \"./registerListBox\";\nimport { BaseListBoxItem } from \"./registerListBoxItem\";\nimport { BasePopover } from \"./registerPopover\";\nimport { BaseSelect, BaseSelectValue } from \"./registerSelect\";\n\nconst meta: Meta<typeof BaseSelect> = {\n title: \"Components/BaseSelect\",\n component: BaseSelect,\n args: {\n onSelectionChange: fn(),\n onOpenChange: fn(),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseSelect>;\n\n// Helper function to create list items\nconst createListItems = (count: number) => {\n return Array.from({ length: count }, (_, i) => ({\n id: `${i + 1}`,\n textValue: `Item ${i + 1}`,\n children: `Item ${i + 1}`,\n }));\n};\n\nconst BoilerplateSelect = ({ children }: { children: React.ReactNode }) => (\n <>\n <BaseButton>\n <BaseSelectValue>Select an option ▼</BaseSelectValue>\n </BaseButton>\n <BasePopover>\n <BaseListBox>{children}</BaseListBox>\n </BasePopover>\n </>\n);\n\nexport const Basic: Story = {\n args: {\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n expect(button).toHaveTextContent(\"Select an option ▼\");\n\n // Open the select\n await userEvent.click(button);\n\n // Ensure that clicking the button shows all available options, regardless of the input value\n const options = await within(doc.getByRole(\"listbox\")).findAllByRole(\n \"option\"\n );\n expect(options).toHaveLength(3);\n\n // Select an option\n await userEvent.click(options[1]);\n // Check that the input value is updated\n expect(button).toHaveTextContent(\"Item 2\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n // Check that the onOpenChange and onSelectionChange are called as expected\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n expect(args.onSelectionChange).toHaveBeenCalledOnce();\n },\n};\n\n// TODO: Currently, the BaseSelect does not pass defaultSelectedKey prop to <Select>, causing the below tests to fail.\n// Uncomment the test below in the PR that fixes the issue\n// export const WithDefaultSelection: Story = {\n// args: {\n// defaultSelectedKey: \"3\",\n// children: (\n// <BoilerplateSelect>\n// {createListItems(3).map((item) => (\n// <BaseListBoxItem textValue={item.textValue} id={item.id}>\n// {item.children}\n// </BaseListBoxItem>\n// ))}\n// </BoilerplateSelect>\n// ),\n// },\n// play: async ({ canvasElement }) => {\n// const canvas = within(canvasElement);\n// // popovers are rendered outside canvas, so we need to use document.body\n// const doc = within(document.body);\n\n// // Get the button and input\n// const button = canvas.getByRole(\"button\");\n\n// // Check that listbox is not in the document\n// expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n// await waitFor(() => expect(button).toHaveTextContent(\"Item 3\")); // via defaultSelectedKey\n\n// // Open the select\n// await userEvent.click(button);\n\n// const options = within(doc.getByRole(\"listbox\")).getAllByRole(\"option\");\n// await userEvent.click(options[1]);\n\n// expect(button).toHaveTextContent(\"Item 2\");\n// },\n// };\n\n// export const Disabled: Story = {\n// args: {\n// defaultSelectedKey: \"3\",\n// isDisabled: true,\n// children: (\n// <BoilerplateSelect>\n// {createListItems(3).map((item) => (\n// <BaseListBoxItem textValue={item.textValue} id={item.id}>\n// {item.children}\n// </BaseListBoxItem>\n// ))}\n// </BoilerplateSelect>\n// ),\n// },\n// play: async ({ canvasElement, args }) => {\n// const canvas = within(canvasElement);\n// // popovers are rendered outside canvas, so we need to use document.body\n// const doc = within(document.body);\n\n// // Get the button and input\n// const button = canvas.getByRole(\"button\");\n\n// // Verify disabled state\n// expect(button).toBeDisabled();\n\n// await userEvent.tab(); // NOTE: I'm not sure why, but without this, the test is very flaky at the next line.\n// await waitFor(() => expect(button).toHaveTextContent(\"Item 3\")); // via defaultSelectedKey\n\n// // Open the select\n// await userEvent.click(button);\n\n// // Check that listbox is not in the document\n// expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n// expect(button).toHaveTextContent(\"Item 3\"); // unchanged\n\n// expect(args.onOpenChange).not.toHaveBeenCalled();\n// expect(args.onSelectionChange).not.toHaveBeenCalled();\n// },\n// };\n\nexport const WithDisabledOptions: Story = {\n args: {\n disabledKeys: [\"1\"],\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n expect(button).toHaveTextContent(\"Select an option ▼\");\n\n // Open the select\n await userEvent.click(button);\n expect(args.onOpenChange).toHaveBeenCalledOnce();\n\n // Ensure that clicking the button shows all available options, regardless of the input value\n const listbox = await doc.findByRole(\"listbox\");\n const options = await within(listbox).findAllByRole(\"option\");\n expect(options).toHaveLength(3);\n\n // click the disabled option\n await userEvent.click(options[0]);\n expect(args.onOpenChange).toHaveBeenCalledOnce(); // the popover does not close when selecting a disabled option\n expect(args.onSelectionChange).not.toHaveBeenCalled(); // the select state does not change when selecting a disabled option\n expect(button).toHaveTextContent(\"Select an option ▼\"); // unchanged\n\n await userEvent.click(options[1]); // Other items stay selectable\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n expect(args.onSelectionChange).toHaveBeenCalledOnce();\n\n expect(button).toHaveTextContent(\"Item 2\");\n },\n};\n\nexport const SelectedInCanvas: Story = {\n args: {\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n }, 1000);\n }, []);\n\n return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <BaseSelect\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(\n () => {\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n },\n { timeout: 100 }\n );\n\n await waitFor(\n () => {\n expect(doc.queryByRole(\"listbox\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n },\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerSelect.stories.esm.js","sources":["../src/registerSelect.stories.tsx"],"sourcesContent":["import { PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React, { useEffect, useState } from \"react\";\nimport { BaseButton } from \"./registerButton\";\nimport { BaseListBox } from \"./registerListBox\";\nimport { BaseListBoxItem } from \"./registerListBoxItem\";\nimport { BasePopover } from \"./registerPopover\";\nimport { BaseSelect, BaseSelectValue } from \"./registerSelect\";\n\nconst meta: Meta<typeof BaseSelect> = {\n title: \"Components/BaseSelect\",\n component: BaseSelect,\n args: {\n onSelectionChange: fn(),\n onOpenChange: fn(),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseSelect>;\n\n// Helper function to create list items\nconst createListItems = (count: number) => {\n return Array.from({ length: count }, (_, i) => ({\n id: `${i + 1}`,\n textValue: `Item ${i + 1}`,\n children: `Item ${i + 1}`,\n }));\n};\n\nconst BoilerplateSelect = ({ children }: { children: React.ReactNode }) => (\n <>\n <BaseButton>\n <BaseSelectValue>Select an option ▼</BaseSelectValue>\n </BaseButton>\n <BasePopover>\n <BaseListBox>{children}</BaseListBox>\n </BasePopover>\n </>\n);\n\nexport const Basic: Story = {\n args: {\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n expect(button).toHaveTextContent(\"Select an option ▼\");\n\n // Open the select\n await userEvent.click(button);\n\n // Ensure that clicking the button shows all available options, regardless of the input value\n const options = await within(doc.getByRole(\"listbox\")).findAllByRole(\n \"option\"\n );\n expect(options).toHaveLength(3);\n\n // Select an option\n await userEvent.click(options[1]);\n // Check that the input value is updated\n expect(button).toHaveTextContent(\"Item 2\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n // Check that the onOpenChange and onSelectionChange are called as expected\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n expect(args.onSelectionChange).toHaveBeenCalledOnce();\n },\n};\n\nexport const WithDefaultSelection: Story = {\n args: {\n defaultSelectedKey: \"3\",\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n await waitFor(() => expect(button).toHaveTextContent(\"Item 3\")); // via defaultSelectedKey\n\n // Open the select\n await userEvent.click(button);\n\n const options = within(doc.getByRole(\"listbox\")).getAllByRole(\"option\");\n await userEvent.click(options[1]);\n\n expect(button).toHaveTextContent(\"Item 2\");\n },\n};\n\nexport const Disabled: Story = {\n args: {\n defaultSelectedKey: \"3\",\n isDisabled: true,\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n // Verify disabled state\n expect(button).toBeDisabled();\n\n await userEvent.tab(); // NOTE: I'm not sure why, but without this, the test is very flaky at the next line.\n await waitFor(() => expect(button).toHaveTextContent(\"Item 3\")); // via defaultSelectedKey\n\n // Open the select\n await userEvent.click(button);\n\n // Check that listbox is not in the document\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n\n expect(button).toHaveTextContent(\"Item 3\"); // unchanged\n\n expect(args.onOpenChange).not.toHaveBeenCalled();\n expect(args.onSelectionChange).not.toHaveBeenCalled();\n },\n};\n\nexport const WithDisabledOptions: Story = {\n args: {\n disabledKeys: [\"1\"],\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n play: async ({ canvasElement, args }) => {\n const canvas = within(canvasElement);\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n // Get the button and input\n const button = canvas.getByRole(\"button\");\n\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n expect(button).toHaveTextContent(\"Select an option ▼\");\n\n // Open the select\n await userEvent.click(button);\n expect(args.onOpenChange).toHaveBeenCalledOnce();\n\n // Ensure that clicking the button shows all available options, regardless of the input value\n const listbox = await doc.findByRole(\"listbox\");\n const options = await within(listbox).findAllByRole(\"option\");\n expect(options).toHaveLength(3);\n\n // click the disabled option\n await userEvent.click(options[0]);\n expect(args.onOpenChange).toHaveBeenCalledOnce(); // the popover does not close when selecting a disabled option\n expect(args.onSelectionChange).not.toHaveBeenCalled(); // the select state does not change when selecting a disabled option\n expect(button).toHaveTextContent(\"Select an option ▼\"); // unchanged\n\n await userEvent.click(options[1]); // Other items stay selectable\n expect(args.onOpenChange).toHaveBeenCalledTimes(2);\n expect(args.onSelectionChange).toHaveBeenCalledOnce();\n\n expect(button).toHaveTextContent(\"Item 2\");\n },\n};\n\nexport const SelectedInCanvas: Story = {\n args: {\n children: (\n <BoilerplateSelect>\n {createListItems(3).map((item) => (\n <BaseListBoxItem textValue={item.textValue} id={item.id}>\n {item.children}\n </BaseListBoxItem>\n ))}\n </BoilerplateSelect>\n ),\n },\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n }, 1000);\n }, []);\n\n return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <BaseSelect\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(\n () => {\n expect(doc.queryByRole(\"listbox\")).not.toBeInTheDocument();\n },\n { timeout: 100 }\n );\n\n await waitFor(\n () => {\n expect(doc.queryByRole(\"listbox\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n },\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -22,25 +22,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
22
22
|
|
|
23
23
|
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
24
24
|
|
|
25
|
-
var __defProp = Object.defineProperty;
|
|
26
|
-
var __defProps = Object.defineProperties;
|
|
27
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
28
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
29
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
30
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
31
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
32
|
-
var __spreadValues = (a, b) => {
|
|
33
|
-
for (var prop in b || (b = {}))
|
|
34
|
-
if (__hasOwnProp.call(b, prop))
|
|
35
|
-
__defNormalProp(a, prop, b[prop]);
|
|
36
|
-
if (__getOwnPropSymbols)
|
|
37
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
38
|
-
if (__propIsEnum.call(b, prop))
|
|
39
|
-
__defNormalProp(a, prop, b[prop]);
|
|
40
|
-
}
|
|
41
|
-
return a;
|
|
42
|
-
};
|
|
43
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
44
25
|
const meta = {
|
|
45
26
|
title: "Components/BaseSlider",
|
|
46
27
|
component: registerSlider.BaseSlider,
|
|
@@ -51,23 +32,22 @@ const meta = {
|
|
|
51
32
|
maxValue: 100,
|
|
52
33
|
step: 1,
|
|
53
34
|
orientation: "horizontal"
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const Basic = {
|
|
38
|
+
args: {
|
|
39
|
+
children: /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement(registerLabel.BaseLabel, null, "Slider label"), /* @__PURE__ */ React__default.default.createElement(registerSliderOutput.BaseSliderOutput, null, "Output"), /* @__PURE__ */ React__default.default.createElement(registerSliderTrack.BaseSliderTrack, null, /* @__PURE__ */ React__default.default.createElement(registerSliderThumb.BaseSliderThumb, { autoFocus: true, className: "thumb-1" })))
|
|
54
40
|
},
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
var _a;
|
|
66
|
-
setValue(newValue);
|
|
67
|
-
(_a = args.onChange) == null ? void 0 : _a.call(args, newValue);
|
|
68
|
-
}
|
|
69
|
-
})
|
|
70
|
-
);
|
|
41
|
+
play: async ({ canvasElement, args }) => {
|
|
42
|
+
const canvas = test.within(canvasElement);
|
|
43
|
+
const slider = canvas.getByRole("group");
|
|
44
|
+
const label = test.within(slider).getByText("Slider label");
|
|
45
|
+
const thumbs = slider.getElementsByTagName("input");
|
|
46
|
+
test.expect(thumbs).toHaveLength(1);
|
|
47
|
+
await test.userEvent.click(label);
|
|
48
|
+
await test.userEvent.keyboard("{ArrowRight}");
|
|
49
|
+
test.expect(args.onChange).toHaveBeenCalledWith([1]);
|
|
50
|
+
test.expect(args.onChangeEnd).toHaveBeenCalledOnce();
|
|
71
51
|
}
|
|
72
52
|
};
|
|
73
53
|
const WithDefaultValue = {
|
|
@@ -175,6 +155,7 @@ const TooManyThumbs = {
|
|
|
175
155
|
}
|
|
176
156
|
};
|
|
177
157
|
|
|
158
|
+
exports.Basic = Basic;
|
|
178
159
|
exports.Disabled = Disabled;
|
|
179
160
|
exports.RangeSlider = RangeSlider;
|
|
180
161
|
exports.TooFewThumbs = TooFewThumbs;
|