@plasmicpkgs/react-aria 0.0.117 → 0.0.119
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/contexts.d.ts +2 -1
- package/dist/react-aria.esm.js +128 -87
- package/dist/react-aria.esm.js.map +1 -1
- package/dist/react-aria.js +127 -86
- package/dist/react-aria.js.map +1 -1
- package/dist/utils.d.ts +5 -4
- package/package.json +2 -2
- package/skinny/contexts-5cb81c2f.esm.js.map +1 -1
- package/skinny/contexts-6d0cb2b1.cjs.js.map +1 -1
- package/skinny/contexts.d.ts +2 -1
- package/skinny/registerCheckboxGroup.cjs.js +11 -8
- package/skinny/registerCheckboxGroup.cjs.js.map +1 -1
- package/skinny/registerCheckboxGroup.esm.js +11 -8
- package/skinny/registerCheckboxGroup.esm.js.map +1 -1
- package/skinny/registerComboBox.cjs.js.map +1 -1
- package/skinny/registerComboBox.esm.js +1 -1
- package/skinny/registerComboBox.esm.js.map +1 -1
- package/skinny/registerDialogTrigger.cjs.js +17 -2
- package/skinny/registerDialogTrigger.cjs.js.map +1 -1
- package/skinny/registerDialogTrigger.esm.js +17 -2
- package/skinny/registerDialogTrigger.esm.js.map +1 -1
- package/skinny/registerInput.cjs.js +1 -1
- package/skinny/registerInput.cjs.js.map +1 -1
- package/skinny/registerInput.esm.js +2 -2
- package/skinny/registerInput.esm.js.map +1 -1
- package/skinny/{registerListBox-21dc99fa.esm.js → registerListBox-0f6ebcf0.esm.js} +2 -2
- package/skinny/{registerListBox-21dc99fa.esm.js.map → registerListBox-0f6ebcf0.esm.js.map} +1 -1
- package/skinny/registerListBox.esm.js +1 -1
- package/skinny/registerOverlayArrow.cjs.js +1 -1
- package/skinny/registerOverlayArrow.cjs.js.map +1 -1
- package/skinny/registerOverlayArrow.esm.js +2 -2
- package/skinny/registerOverlayArrow.esm.js.map +1 -1
- package/skinny/registerPopover.cjs.js.map +1 -1
- package/skinny/registerPopover.esm.js.map +1 -1
- package/skinny/registerRadioGroup.cjs.js +11 -8
- package/skinny/registerRadioGroup.cjs.js.map +1 -1
- package/skinny/registerRadioGroup.esm.js +11 -8
- package/skinny/registerRadioGroup.esm.js.map +1 -1
- package/skinny/registerSection.esm.js +1 -1
- package/skinny/registerSelect.cjs.js.map +1 -1
- package/skinny/registerSelect.esm.js +1 -1
- package/skinny/registerSelect.esm.js.map +1 -1
- package/skinny/registerSlider.cjs.js +17 -14
- package/skinny/registerSlider.cjs.js.map +1 -1
- package/skinny/registerSlider.esm.js +17 -14
- package/skinny/registerSlider.esm.js.map +1 -1
- package/skinny/registerTextArea.cjs.js +5 -2
- package/skinny/registerTextArea.cjs.js.map +1 -1
- package/skinny/registerTextArea.esm.js +6 -3
- package/skinny/registerTextArea.esm.js.map +1 -1
- package/skinny/registerTextField.cjs.js +28 -17
- package/skinny/registerTextField.cjs.js.map +1 -1
- package/skinny/registerTextField.esm.js +28 -17
- package/skinny/registerTextField.esm.js.map +1 -1
- package/skinny/registerTooltip.cjs.js +37 -34
- package/skinny/registerTooltip.cjs.js.map +1 -1
- package/skinny/registerTooltip.esm.js +37 -34
- package/skinny/registerTooltip.esm.js.map +1 -1
- package/skinny/utils-fc1ddd7c.cjs.js.map +1 -1
- package/skinny/utils-fd88ad47.esm.js.map +1 -1
- package/skinny/utils.d.ts +5 -4
- package/skinny/registerButton.stories.cjs.js +0 -163
- package/skinny/registerButton.stories.cjs.js.map +0 -1
- package/skinny/registerButton.stories.esm.js +0 -149
- package/skinny/registerButton.stories.esm.js.map +0 -1
- package/skinny/registerCheckboxGroup.stories.cjs.js +0 -121
- package/skinny/registerCheckboxGroup.stories.cjs.js.map +0 -1
- package/skinny/registerCheckboxGroup.stories.esm.js +0 -109
- package/skinny/registerCheckboxGroup.stories.esm.js.map +0 -1
- package/skinny/registerComboBox.stories.cjs.js +0 -244
- package/skinny/registerComboBox.stories.cjs.js.map +0 -1
- package/skinny/registerComboBox.stories.esm.js +0 -230
- package/skinny/registerComboBox.stories.esm.js.map +0 -1
- package/skinny/registerDialogTrigger.stories.cjs.js +0 -458
- package/skinny/registerDialogTrigger.stories.cjs.js.map +0 -1
- package/skinny/registerDialogTrigger.stories.esm.js +0 -441
- package/skinny/registerDialogTrigger.stories.esm.js.map +0 -1
- package/skinny/registerListbox.stories.cjs.js +0 -219
- package/skinny/registerListbox.stories.cjs.js.map +0 -1
- package/skinny/registerListbox.stories.esm.js +0 -206
- package/skinny/registerListbox.stories.esm.js.map +0 -1
- package/skinny/registerModal.stories.cjs.js +0 -194
- package/skinny/registerModal.stories.cjs.js.map +0 -1
- package/skinny/registerModal.stories.esm.js +0 -181
- package/skinny/registerModal.stories.esm.js.map +0 -1
- package/skinny/registerPopover.stories.cjs.js +0 -102
- package/skinny/registerPopover.stories.cjs.js.map +0 -1
- package/skinny/registerPopover.stories.esm.js +0 -92
- package/skinny/registerPopover.stories.esm.js.map +0 -1
- package/skinny/registerRadioGroup.stories.cjs.js +0 -120
- package/skinny/registerRadioGroup.stories.cjs.js.map +0 -1
- package/skinny/registerRadioGroup.stories.esm.js +0 -108
- package/skinny/registerRadioGroup.stories.esm.js.map +0 -1
- package/skinny/registerSelect.stories.cjs.js +0 -215
- package/skinny/registerSelect.stories.cjs.js.map +0 -1
- package/skinny/registerSelect.stories.esm.js +0 -202
- package/skinny/registerSelect.stories.esm.js.map +0 -1
- package/skinny/registerSlider.stories.cjs.js +0 -165
- package/skinny/registerSlider.stories.cjs.js.map +0 -1
- package/skinny/registerSlider.stories.esm.js +0 -151
- package/skinny/registerSlider.stories.esm.js.map +0 -1
- package/skinny/registerSwitch.stories.cjs.js +0 -162
- package/skinny/registerSwitch.stories.cjs.js.map +0 -1
- package/skinny/registerSwitch.stories.esm.js +0 -148
- package/skinny/registerSwitch.stories.esm.js.map +0 -1
- package/skinny/registerTextField-common-stories.cjs.js +0 -199
- package/skinny/registerTextField-common-stories.cjs.js.map +0 -1
- package/skinny/registerTextField-common-stories.esm.js +0 -185
- package/skinny/registerTextField-common-stories.esm.js.map +0 -1
- package/skinny/registerTextField-input.stories.cjs.js +0 -54
- package/skinny/registerTextField-input.stories.cjs.js.map +0 -1
- package/skinny/registerTextField-input.stories.esm.js +0 -37
- package/skinny/registerTextField-input.stories.esm.js.map +0 -1
- package/skinny/registerTextField-textarea.stories.cjs.js +0 -55
- package/skinny/registerTextField-textarea.stories.cjs.js.map +0 -1
- package/skinny/registerTextField-textarea.stories.esm.js +0 -39
- package/skinny/registerTextField-textarea.stories.esm.js.map +0 -1
- package/skinny/registerTooltip.stories.cjs.js +0 -616
- package/skinny/registerTooltip.stories.cjs.js.map +0 -1
- package/skinny/registerTooltip.stories.esm.js +0 -596
- package/skinny/registerTooltip.stories.esm.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerTooltip.esm.js","sources":["../src/registerTooltip.tsx"],"sourcesContent":["import React, { useCallback, useId, useRef, useState } from \"react\";\nimport { mergeProps, useFocusWithin, useHover } from \"react-aria\";\nimport {\n Provider,\n Tooltip,\n TooltipProps,\n TooltipTriggerStateContext,\n} from \"react-aria-components\";\nimport { TooltipTriggerProps, useTooltipTriggerState } from \"react-stately\";\nimport { COMMON_STYLES, getCommonOverlayProps } from \"./common\";\nimport {\n CodeComponentMetaOverrides,\n Registerable,\n registerComponentHelper,\n useIsOpen,\n WithPlasmicCanvasComponentInfo,\n} from \"./utils\";\nimport { pickAriaComponentVariants, WithVariants } from \"./variant-utils\";\n\n// NOTE: Placement should be managed as variants, not just props.\n// When `shouldFlip` is true, the placement prop may not represent the final position\n// (e.g., if placement is set to \"bottom\" but lacks space, the tooltip may flip to \"top\").\n// However, data-selectors will consistently indicate the actual placement of the tooltip.\nconst TOOLTIP_VARIANTS = [\n \"placementTop\" as const,\n \"placementBottom\" as const,\n \"placementLeft\" as const,\n \"placementRight\" as const,\n];\n\nconst { variants, withObservedValues } =\n pickAriaComponentVariants(TOOLTIP_VARIANTS);\n\nexport interface BaseTooltipProps\n extends Omit<TooltipTriggerProps, \"trigger\">,\n TooltipProps,\n WithPlasmicCanvasComponentInfo,\n WithVariants<typeof TOOLTIP_VARIANTS> {\n children: React.ReactElement<HTMLElement>;\n tooltipContent?: React.ReactElement;\n resetClassName?: string;\n trigger?: \"focus\" | \"focus and hover\" | undefined;\n className?: string;\n}\n\n// In Studio, the tooltip is always controlled because isOpen is attached to the code component's state.\n// In Codegen, the user decides whether the tooltip is controlled or not. So we need to handle both cases.\nexport function BaseTooltip(props: BaseTooltipProps) {\n if (props.isOpen !== undefined) {\n return <ControlledBaseTooltip {...props} />;\n } else {\n return <UncontrolledBaseTooltip {...props} />;\n }\n}\n\nfunction UncontrolledBaseTooltip({ onOpenChange, ...props }: BaseTooltipProps) {\n const [open, setOpen] = useState(props.defaultOpen ?? false);\n const onOpenChangeMerged = useCallback(\n (newOpen: boolean) => {\n setOpen(newOpen);\n onOpenChange?.(newOpen);\n },\n [onOpenChange]\n );\n return (\n <ControlledBaseTooltip\n {...props}\n isOpen={open}\n onOpenChange={onOpenChangeMerged}\n />\n );\n}\n\nfunction ControlledBaseTooltip(props: BaseTooltipProps) {\n const {\n children,\n isDisabled = false,\n delay,\n closeDelay,\n trigger,\n isOpen,\n tooltipContent,\n resetClassName,\n placement,\n offset,\n crossOffset,\n shouldFlip,\n className,\n onOpenChange = () => {},\n plasmicUpdateVariant,\n __plasmic_selection_prop__,\n } = props;\n\n const isCanvasAwareOpen = useIsOpen({\n triggerSlotName: \"children\",\n isOpen,\n __plasmic_selection_prop__,\n });\n\n // The following is a custom implementation of the <TooltipTrigger /> component.\n // The default <TooltipTrigger /> from react-aria-components automatically manages state changes when a useFocusable element (e.g., an Aria Button) is clicked.\n // However, in our custom trigger, <TriggerWrapper>, we use useFocusWithin to explicitly handle state changes, allowing any element—not just an Aria Button—to act as a trigger.\n // However, this results in duplicate state updates when using an Aria Button, as state changes are triggered both by useFocusWithin and useFocusable.\n // Consequently, onOpenChange is called twice.\n //\n // This implementation is adapted from:\n // https://github.com/adobe/react-spectrum/blob/988096cf3f1dbd59f274d8c552e9fe7d5dcf4f41/packages/react-aria-components/src/Tooltip.tsx#L89\n // The <FocusableProvider> has been removed, as it handles automatic state updates for the Aria Button.\n const ref = useRef<any>(null);\n const tooltipId = useId();\n\n const state = useTooltipTriggerState({\n ...props,\n isOpen: isCanvasAwareOpen,\n trigger: trigger === \"focus\" ? trigger : undefined,\n });\n\n return (\n <Provider values={[[TooltipTriggerStateContext, state]]}>\n <TriggerWrapper\n ref={ref}\n className={className}\n tooltipId={state.isOpen ? tooltipId : undefined}\n isDisabled={isDisabled}\n onOpenChange={onOpenChange}\n triggerOnFocusOnly={trigger === \"focus\"}\n >\n {children}\n </TriggerWrapper>\n <Tooltip\n triggerRef={ref}\n // @ts-expect-error <Tooltip> is wrongly typed to not have id prop\n id={tooltipId}\n offset={offset}\n delay={delay}\n closeDelay={closeDelay}\n crossOffset={crossOffset}\n shouldFlip={shouldFlip}\n className={resetClassName}\n onOpenChange={onOpenChange}\n placement={placement}\n >\n {({ placement: _placement }) =>\n withObservedValues(\n <>{tooltipContent}</>,\n {\n placementTop: _placement === \"top\",\n placementBottom: _placement === \"bottom\",\n placementLeft: _placement === \"left\",\n placementRight: _placement === \"right\",\n },\n plasmicUpdateVariant\n )\n }\n </Tooltip>\n </Provider>\n );\n}\n\ninterface TriggerWrapperProps {\n children: React.ReactElement;\n onOpenChange: (isOpen: boolean) => void;\n isDisabled: boolean;\n triggerOnFocusOnly: boolean;\n tooltipId?: string;\n className?: string;\n}\n\n// React Aria's TooltipTrigger requires a focusable element with ref.\n// To make sure that this requirement is fulfilled, wrap everything in a focusable div.\n// https://react-spectrum.adobe.com/react-aria/Tooltip.html#example\n// (In the example, Aria Button works as a trigger because it uses useFocusable behind the scenes)\n//\n// Discussion (React-aria-components TooltipTrigger with custom button):\n// https://github.com/adobe/react-spectrum/discussions/5119#discussioncomment-7084661\nconst TriggerWrapper = React.forwardRef<HTMLDivElement, TriggerWrapperProps>(\n function TriggerWrapper_(\n {\n children,\n onOpenChange,\n isDisabled,\n triggerOnFocusOnly,\n tooltipId,\n className,\n },\n ref: React.Ref<HTMLDivElement>\n ) {\n const { hoverProps } = useHover({\n isDisabled,\n onHoverStart: () => !triggerOnFocusOnly && onOpenChange(true),\n onHoverEnd: () => !triggerOnFocusOnly && onOpenChange(false),\n });\n\n // useFocusWithin captures focus events for all nested focusable elements\n const { focusWithinProps } = useFocusWithin({\n isDisabled,\n onFocusWithin: () => {\n onOpenChange(true);\n },\n onBlurWithin: () => {\n onOpenChange(false);\n },\n });\n\n const mergedProps = mergeProps(hoverProps, focusWithinProps, {\n \"aria-describedby\": tooltipId,\n // We expose className to allow user control over the wrapper div's styling.\n className,\n ref,\n style: COMMON_STYLES,\n });\n\n return <div {...mergedProps}>{children}</div>;\n }\n);\n\nexport function registerTooltip(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BaseTooltip>\n) {\n registerComponentHelper(\n loader,\n BaseTooltip,\n {\n name: \"plasmic-react-aria-tooltip\",\n displayName: \"Aria Tooltip\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerTooltip\",\n importName: \"BaseTooltip\",\n isAttachment: true,\n variants,\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n displayName: \"Trigger\",\n defaultValue: {\n type: \"text\",\n value: \"Hover me!\",\n styles: {\n width: \"hug\",\n },\n },\n },\n tooltipContent: {\n type: \"slot\",\n mergeWithParent: true,\n displayName: \"Tooltip Content\",\n // NOTE: This is not applied in attachment\n defaultValue: {\n type: \"text\",\n value: \"Hello from Tooltip!\",\n styles: {\n background: \"black\",\n color: \"white\",\n padding: \"7px\",\n borderRadius: \"7px\",\n },\n },\n },\n resetClassName: {\n type: \"themeResetClass\",\n },\n isDisabled: {\n type: \"boolean\",\n },\n delay: {\n type: \"number\",\n // Default value is explicitly set to 0 to prevent users from mistakenly thinking the tooltip isn’t opening due to a delay.\n defaultValue: 0,\n defaultValueHint: 0,\n description:\n \"The delay (in milliseconds) for the tooltip to show up.\",\n },\n closeDelay: {\n type: \"number\",\n // Default value is explicitly set to 0 to prevent users from mistakenly thinking the tooltip isn’t closing due to a delay.\n defaultValue: 0,\n defaultValueHint: 0,\n description: \"The delay (in milliseconds) for the tooltip to close.\",\n },\n trigger: {\n type: \"choice\",\n options: [\"focus\", \"focus and hover\"],\n defaultValueHint: \"focus and hover\",\n },\n ...getCommonOverlayProps<BaseTooltipProps>(\"popover\", {\n placement: { defaultValueHint: \"top\" },\n offset: { defaultValueHint: 0 },\n containerPadding: { defaultValueHint: 12 },\n crossOffset: { defaultValueHint: 0 },\n }),\n isOpen: {\n type: \"boolean\",\n editOnly: true,\n uncontrolledProp: \"defaultOpen\",\n description: \"Whether the overlay is open by default\",\n defaultValueHint: false,\n hidden: () => true,\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n },\n states: {\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n },\n },\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerTooltip.esm.js","sources":["../src/registerTooltip.tsx"],"sourcesContent":["import React, { useCallback, useId, useRef, useState } from \"react\";\nimport { mergeProps, useFocusWithin, useHover } from \"react-aria\";\nimport {\n Provider,\n Tooltip,\n TooltipProps,\n TooltipTriggerStateContext,\n} from \"react-aria-components\";\nimport { TooltipTriggerProps, useTooltipTriggerState } from \"react-stately\";\nimport { COMMON_STYLES, getCommonOverlayProps } from \"./common\";\nimport {\n CodeComponentMetaOverrides,\n Registerable,\n registerComponentHelper,\n useIsOpen,\n WithPlasmicCanvasComponentInfo,\n} from \"./utils\";\nimport { pickAriaComponentVariants, WithVariants } from \"./variant-utils\";\n\n// NOTE: Placement should be managed as variants, not just props.\n// When `shouldFlip` is true, the placement prop may not represent the final position\n// (e.g., if placement is set to \"bottom\" but lacks space, the tooltip may flip to \"top\").\n// However, data-selectors will consistently indicate the actual placement of the tooltip.\nconst TOOLTIP_VARIANTS = [\n \"placementTop\" as const,\n \"placementBottom\" as const,\n \"placementLeft\" as const,\n \"placementRight\" as const,\n];\n\nconst { variants, withObservedValues } =\n pickAriaComponentVariants(TOOLTIP_VARIANTS);\n\nexport interface BaseTooltipProps\n extends Omit<TooltipTriggerProps, \"trigger\">,\n TooltipProps,\n WithPlasmicCanvasComponentInfo,\n WithVariants<typeof TOOLTIP_VARIANTS> {\n children: React.ReactElement<HTMLElement>;\n tooltipContent?: React.ReactElement;\n resetClassName?: string;\n trigger?: \"focus\" | \"focus and hover\" | undefined;\n className?: string;\n}\n\n// In Studio, the tooltip is always controlled because isOpen is attached to the code component's state.\n// In Codegen, the user decides whether the tooltip is controlled or not. So we need to handle both cases.\nexport function BaseTooltip(props: BaseTooltipProps) {\n if (props.isOpen !== undefined) {\n return <ControlledBaseTooltip {...props} />;\n } else {\n return <UncontrolledBaseTooltip {...props} />;\n }\n}\n\nfunction UncontrolledBaseTooltip({ onOpenChange, ...props }: BaseTooltipProps) {\n const [open, setOpen] = useState(props.defaultOpen ?? false);\n const onOpenChangeMerged = useCallback(\n (newOpen: boolean) => {\n setOpen(newOpen);\n onOpenChange?.(newOpen);\n },\n [onOpenChange]\n );\n return (\n <ControlledBaseTooltip\n {...props}\n isOpen={open}\n onOpenChange={onOpenChangeMerged}\n />\n );\n}\n\nfunction ControlledBaseTooltip(props: BaseTooltipProps) {\n const {\n children,\n isDisabled = false,\n delay,\n closeDelay,\n trigger,\n isOpen,\n tooltipContent,\n resetClassName,\n placement,\n offset,\n crossOffset,\n shouldFlip,\n className,\n onOpenChange = () => {},\n plasmicUpdateVariant,\n __plasmic_selection_prop__,\n } = props;\n\n const isCanvasAwareOpen = useIsOpen({\n triggerSlotName: \"children\",\n isOpen,\n __plasmic_selection_prop__,\n });\n\n // The following is a custom implementation of the <TooltipTrigger /> component.\n // The default <TooltipTrigger /> from react-aria-components automatically manages state changes when a useFocusable element (e.g., an Aria Button) is clicked.\n // However, in our custom trigger, <TriggerWrapper>, we use useFocusWithin to explicitly handle state changes, allowing any element—not just an Aria Button—to act as a trigger.\n // However, this results in duplicate state updates when using an Aria Button, as state changes are triggered both by useFocusWithin and useFocusable.\n // Consequently, onOpenChange is called twice.\n //\n // This implementation is adapted from:\n // https://github.com/adobe/react-spectrum/blob/988096cf3f1dbd59f274d8c552e9fe7d5dcf4f41/packages/react-aria-components/src/Tooltip.tsx#L89\n // The <FocusableProvider> has been removed, as it handles automatic state updates for the Aria Button.\n const ref = useRef<any>(null);\n const tooltipId = useId();\n\n const state = useTooltipTriggerState({\n ...props,\n isOpen: isCanvasAwareOpen,\n trigger: trigger === \"focus\" ? trigger : undefined,\n });\n\n return (\n // TooltipTriggerStateContext used by BaseOverlayArrow\n <Provider values={[[TooltipTriggerStateContext, state]]}>\n <TriggerWrapper\n ref={ref}\n className={className}\n tooltipId={state.isOpen ? tooltipId : undefined}\n isDisabled={isDisabled}\n onOpenChange={onOpenChange}\n triggerOnFocusOnly={trigger === \"focus\"}\n >\n {children}\n </TriggerWrapper>\n <Tooltip\n triggerRef={ref}\n // @ts-expect-error <Tooltip> is wrongly typed to not have id prop\n id={tooltipId}\n offset={offset}\n delay={delay}\n closeDelay={closeDelay}\n crossOffset={crossOffset}\n shouldFlip={shouldFlip}\n className={resetClassName}\n onOpenChange={onOpenChange}\n placement={placement}\n >\n {({ placement: _placement }) =>\n withObservedValues(\n <>{tooltipContent}</>,\n {\n placementTop: _placement === \"top\",\n placementBottom: _placement === \"bottom\",\n placementLeft: _placement === \"left\",\n placementRight: _placement === \"right\",\n },\n plasmicUpdateVariant\n )\n }\n </Tooltip>\n </Provider>\n );\n}\n\ninterface TriggerWrapperProps {\n children: React.ReactElement;\n onOpenChange: (isOpen: boolean) => void;\n isDisabled: boolean;\n triggerOnFocusOnly: boolean;\n tooltipId?: string;\n className?: string;\n}\n\n// React Aria's TooltipTrigger requires a focusable element with ref.\n// To make sure that this requirement is fulfilled, wrap everything in a focusable div.\n// https://react-spectrum.adobe.com/react-aria/Tooltip.html#example\n// (In the example, Aria Button works as a trigger because it uses useFocusable behind the scenes)\n//\n// Discussion (React-aria-components TooltipTrigger with custom button):\n// https://github.com/adobe/react-spectrum/discussions/5119#discussioncomment-7084661\nconst TriggerWrapper = React.forwardRef<HTMLDivElement, TriggerWrapperProps>(\n function TriggerWrapper_(\n {\n children,\n onOpenChange,\n isDisabled,\n triggerOnFocusOnly,\n tooltipId,\n className,\n },\n ref: React.Ref<HTMLDivElement>\n ) {\n const { hoverProps } = useHover({\n isDisabled,\n onHoverStart: () => !triggerOnFocusOnly && onOpenChange(true),\n onHoverEnd: () => !triggerOnFocusOnly && onOpenChange(false),\n });\n\n // useFocusWithin captures focus events for all nested focusable elements\n const { focusWithinProps } = useFocusWithin({\n isDisabled,\n onFocusWithin: () => {\n onOpenChange(true);\n },\n onBlurWithin: () => {\n onOpenChange(false);\n },\n });\n\n const mergedProps = mergeProps(hoverProps, focusWithinProps, {\n \"aria-describedby\": tooltipId,\n // We expose className to allow user control over the wrapper div's styling.\n className,\n ref,\n style: COMMON_STYLES,\n });\n\n return <div {...mergedProps}>{children}</div>;\n }\n);\n\nexport function registerTooltip(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BaseTooltip>\n) {\n registerComponentHelper(\n loader,\n BaseTooltip,\n {\n name: \"plasmic-react-aria-tooltip\",\n displayName: \"Aria Tooltip\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerTooltip\",\n importName: \"BaseTooltip\",\n isAttachment: true,\n variants,\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n displayName: \"Trigger\",\n defaultValue: {\n type: \"text\",\n value: \"Hover me!\",\n styles: {\n width: \"hug\",\n },\n },\n },\n tooltipContent: {\n type: \"slot\",\n mergeWithParent: true,\n displayName: \"Tooltip Content\",\n // NOTE: This is not applied in attachment\n defaultValue: {\n type: \"text\",\n value: \"Hello from Tooltip!\",\n styles: {\n background: \"black\",\n color: \"white\",\n padding: \"7px\",\n borderRadius: \"7px\",\n },\n },\n },\n resetClassName: {\n type: \"themeResetClass\",\n },\n isDisabled: {\n type: \"boolean\",\n },\n delay: {\n type: \"number\",\n // Default value is explicitly set to 0 to prevent users from mistakenly thinking the tooltip isn’t opening due to a delay.\n defaultValue: 0,\n defaultValueHint: 0,\n description:\n \"The delay (in milliseconds) for the tooltip to show up.\",\n },\n closeDelay: {\n type: \"number\",\n // Default value is explicitly set to 0 to prevent users from mistakenly thinking the tooltip isn’t closing due to a delay.\n defaultValue: 0,\n defaultValueHint: 0,\n description: \"The delay (in milliseconds) for the tooltip to close.\",\n },\n trigger: {\n type: \"choice\",\n options: [\"focus\", \"focus and hover\"],\n defaultValueHint: \"focus and hover\",\n },\n ...getCommonOverlayProps<BaseTooltipProps>(\"popover\", {\n placement: { defaultValueHint: \"top\" },\n offset: { defaultValueHint: 0 },\n containerPadding: { defaultValueHint: 12 },\n crossOffset: { defaultValueHint: 0 },\n }),\n isOpen: {\n type: \"boolean\",\n editOnly: true,\n uncontrolledProp: \"defaultOpen\",\n description: \"Whether the overlay is open by default\",\n defaultValueHint: false,\n hidden: () => true,\n },\n onOpenChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"isOpen\", type: \"boolean\" }],\n },\n },\n states: {\n isOpen: {\n type: \"writable\",\n valueProp: \"isOpen\",\n onChangeProp: \"onOpenChange\",\n variableType: \"boolean\",\n },\n },\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils-fc1ddd7c.cjs.js","sources":["../src/utils.ts"],"sourcesContent":["import {\n usePlasmicCanvasComponentInfo,\n usePlasmicCanvasContext,\n type CodeComponentMeta,\n} from \"@plasmicapp/host\";\nimport registerComponent from \"@plasmicapp/host/registerComponent\";\nimport React, { useEffect } from \"react\";\nimport { InputProps, TextAreaProps } from \"react-aria-components\";\n\nexport type HasControlContextData<T = BaseControlContextData> = {\n setControlContextData?: (ctxData: T) => void;\n};\n\nexport type WithPlasmicCanvasComponentInfo = {\n __plasmic_selection_prop__?: {\n isSelected: boolean;\n selectedSlotName?: string;\n };\n};\n\nexport type
|
|
1
|
+
{"version":3,"file":"utils-fc1ddd7c.cjs.js","sources":["../src/utils.ts"],"sourcesContent":["import {\n usePlasmicCanvasComponentInfo,\n usePlasmicCanvasContext,\n type CodeComponentMeta,\n} from \"@plasmicapp/host\";\nimport registerComponent from \"@plasmicapp/host/registerComponent\";\nimport React, { useEffect } from \"react\";\nimport { InputProps, TextAreaProps } from \"react-aria-components\";\n\nexport type HasControlContextData<T = BaseControlContextData> = {\n setControlContextData?: (ctxData: T) => void;\n};\n\nexport type WithPlasmicCanvasComponentInfo = {\n __plasmic_selection_prop__?: {\n isSelected: boolean;\n selectedSlotName?: string;\n };\n};\n\nexport type ControlContextData = {\n isDisabled?: boolean;\n isReadOnly?: boolean;\n};\n\nexport type BaseControlContextData = {\n parent?: ControlContextData;\n};\n\nexport type Registerable = {\n registerComponent: typeof registerComponent;\n};\n\nexport type OtherCodeComponentsMeta = {\n text: CodeComponentMeta<any>;\n description: CodeComponentMeta<any>;\n};\n\nexport type CodeComponentMetaOverrides<T extends React.ComponentType<any>> =\n Partial<\n Pick<\n CodeComponentMeta<React.ComponentProps<T>>,\n \"parentComponentName\" | \"props\" | \"displayName\" | \"name\"\n >\n >;\n\n/**\n * This hook determines whether an overlay should be open or not. Unlike `useAutoOpen`, it does not perform any actions.\n * It takes into account the following:\n * 1. Whether the overlay is in canvas or preview.\n * 2. Whether the overlay is selected on canvas\n * 3. Whether the overlay's trigger slot is selected on canvas\n */\nexport function useIsOpen({\n triggerSlotName,\n isOpen,\n __plasmic_selection_prop__,\n}: {\n __plasmic_selection_prop__: WithPlasmicCanvasComponentInfo[\"__plasmic_selection_prop__\"];\n triggerSlotName?: string;\n isOpen?: boolean;\n}) {\n const canvasContext = usePlasmicCanvasContext();\n const { isSelected, selectedSlotName } =\n usePlasmicCanvasComponentInfo?.({ __plasmic_selection_prop__ }) ?? {};\n\n // In preview, just use the isOpen prop as is.\n if (!canvasContext) {\n return isOpen;\n }\n\n // In canvas, override the isOpen prop if the element is selected.\n const isTriggerSlotSelected =\n isDefined(selectedSlotName) && selectedSlotName === triggerSlotName;\n\n const isAutoOpenedBySelection = isSelected && !isTriggerSlotSelected;\n\n // Component should always be controlled in canvas\n return Boolean(isAutoOpenedBySelection || isOpen);\n}\n\n/**\n * This hook is used to perform open/close actions on an overlay. It takes into account the following:\n * 1. Whether the overlay is in canvas or preview.\n * 2. Whether the overlay is selected on canvas\n */\nexport function useAutoOpen({\n props,\n open,\n close,\n}: {\n props: WithPlasmicCanvasComponentInfo;\n open?: () => void;\n close?: () => void;\n}) {\n const inPlasmicCanvas = !!usePlasmicCanvasContext();\n const isSelected =\n usePlasmicCanvasComponentInfo?.(props)?.isSelected ?? false;\n\n useEffect(() => {\n // selection in outline tab only matters in canvas\n if (!inPlasmicCanvas) {\n return;\n }\n if (isSelected) {\n open?.();\n } else {\n close?.();\n }\n // Not putting open and close in the useEffect dependencies array, because it causes a re-render loop.\n }, [isSelected, inPlasmicCanvas]);\n}\n\nexport function registerComponentHelper<T extends React.ComponentType<any>>(\n loader: Registerable | undefined,\n component: T,\n meta: CodeComponentMeta<React.ComponentProps<T>>,\n overrides?: CodeComponentMetaOverrides<T>\n) {\n if (overrides) {\n meta = {\n ...meta,\n ...overrides,\n props: {\n ...meta.props,\n ...overrides.props,\n },\n };\n if (overrides.parentComponentName) {\n meta.name = makeChildComponentName(\n overrides.parentComponentName,\n meta.name\n );\n }\n }\n if (loader) {\n loader.registerComponent(component, meta);\n } else {\n registerComponent(component, meta);\n }\n return meta;\n}\n\nexport function makeComponentName(name: string) {\n return `plasmic-react-aria-${name}`;\n}\n\nexport function makeChildComponentName(\n fullParentName: string | undefined,\n fullChildName: string\n) {\n if (!fullParentName) {\n return fullChildName;\n }\n return `${fullParentName}-${fullChildName.replace(\n \"plasmic-react-aria-\",\n \"\"\n )}`;\n}\n\nexport interface Styleable {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function extractPlasmicDataProps(props: Record<string, any>) {\n return Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-plasmic-\"))\n );\n}\n\nexport function withoutNils<T>(array: (T | undefined | null)[]) {\n return array.filter((x): x is T => x != null);\n}\n\nexport function isDefined<T>(thing: T | undefined | null): thing is T {\n return thing !== undefined && thing !== null;\n}\n\nexport function filterHoverProps<T extends TextAreaProps | InputProps>(\n props: T\n) {\n const {\n onHoverStart: _onHoverStart,\n onHoverChange: _onHoverChange,\n onHoverEnd: _onHoverEnd,\n ...otherProps\n } = props;\n return otherProps;\n}\n"],"names":["usePlasmicCanvasContext","usePlasmicCanvasComponentInfo","useEffect","registerComponent"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils-fd88ad47.esm.js","sources":["../src/utils.ts"],"sourcesContent":["import {\n usePlasmicCanvasComponentInfo,\n usePlasmicCanvasContext,\n type CodeComponentMeta,\n} from \"@plasmicapp/host\";\nimport registerComponent from \"@plasmicapp/host/registerComponent\";\nimport React, { useEffect } from \"react\";\nimport { InputProps, TextAreaProps } from \"react-aria-components\";\n\nexport type HasControlContextData<T = BaseControlContextData> = {\n setControlContextData?: (ctxData: T) => void;\n};\n\nexport type WithPlasmicCanvasComponentInfo = {\n __plasmic_selection_prop__?: {\n isSelected: boolean;\n selectedSlotName?: string;\n };\n};\n\nexport type
|
|
1
|
+
{"version":3,"file":"utils-fd88ad47.esm.js","sources":["../src/utils.ts"],"sourcesContent":["import {\n usePlasmicCanvasComponentInfo,\n usePlasmicCanvasContext,\n type CodeComponentMeta,\n} from \"@plasmicapp/host\";\nimport registerComponent from \"@plasmicapp/host/registerComponent\";\nimport React, { useEffect } from \"react\";\nimport { InputProps, TextAreaProps } from \"react-aria-components\";\n\nexport type HasControlContextData<T = BaseControlContextData> = {\n setControlContextData?: (ctxData: T) => void;\n};\n\nexport type WithPlasmicCanvasComponentInfo = {\n __plasmic_selection_prop__?: {\n isSelected: boolean;\n selectedSlotName?: string;\n };\n};\n\nexport type ControlContextData = {\n isDisabled?: boolean;\n isReadOnly?: boolean;\n};\n\nexport type BaseControlContextData = {\n parent?: ControlContextData;\n};\n\nexport type Registerable = {\n registerComponent: typeof registerComponent;\n};\n\nexport type OtherCodeComponentsMeta = {\n text: CodeComponentMeta<any>;\n description: CodeComponentMeta<any>;\n};\n\nexport type CodeComponentMetaOverrides<T extends React.ComponentType<any>> =\n Partial<\n Pick<\n CodeComponentMeta<React.ComponentProps<T>>,\n \"parentComponentName\" | \"props\" | \"displayName\" | \"name\"\n >\n >;\n\n/**\n * This hook determines whether an overlay should be open or not. Unlike `useAutoOpen`, it does not perform any actions.\n * It takes into account the following:\n * 1. Whether the overlay is in canvas or preview.\n * 2. Whether the overlay is selected on canvas\n * 3. Whether the overlay's trigger slot is selected on canvas\n */\nexport function useIsOpen({\n triggerSlotName,\n isOpen,\n __plasmic_selection_prop__,\n}: {\n __plasmic_selection_prop__: WithPlasmicCanvasComponentInfo[\"__plasmic_selection_prop__\"];\n triggerSlotName?: string;\n isOpen?: boolean;\n}) {\n const canvasContext = usePlasmicCanvasContext();\n const { isSelected, selectedSlotName } =\n usePlasmicCanvasComponentInfo?.({ __plasmic_selection_prop__ }) ?? {};\n\n // In preview, just use the isOpen prop as is.\n if (!canvasContext) {\n return isOpen;\n }\n\n // In canvas, override the isOpen prop if the element is selected.\n const isTriggerSlotSelected =\n isDefined(selectedSlotName) && selectedSlotName === triggerSlotName;\n\n const isAutoOpenedBySelection = isSelected && !isTriggerSlotSelected;\n\n // Component should always be controlled in canvas\n return Boolean(isAutoOpenedBySelection || isOpen);\n}\n\n/**\n * This hook is used to perform open/close actions on an overlay. It takes into account the following:\n * 1. Whether the overlay is in canvas or preview.\n * 2. Whether the overlay is selected on canvas\n */\nexport function useAutoOpen({\n props,\n open,\n close,\n}: {\n props: WithPlasmicCanvasComponentInfo;\n open?: () => void;\n close?: () => void;\n}) {\n const inPlasmicCanvas = !!usePlasmicCanvasContext();\n const isSelected =\n usePlasmicCanvasComponentInfo?.(props)?.isSelected ?? false;\n\n useEffect(() => {\n // selection in outline tab only matters in canvas\n if (!inPlasmicCanvas) {\n return;\n }\n if (isSelected) {\n open?.();\n } else {\n close?.();\n }\n // Not putting open and close in the useEffect dependencies array, because it causes a re-render loop.\n }, [isSelected, inPlasmicCanvas]);\n}\n\nexport function registerComponentHelper<T extends React.ComponentType<any>>(\n loader: Registerable | undefined,\n component: T,\n meta: CodeComponentMeta<React.ComponentProps<T>>,\n overrides?: CodeComponentMetaOverrides<T>\n) {\n if (overrides) {\n meta = {\n ...meta,\n ...overrides,\n props: {\n ...meta.props,\n ...overrides.props,\n },\n };\n if (overrides.parentComponentName) {\n meta.name = makeChildComponentName(\n overrides.parentComponentName,\n meta.name\n );\n }\n }\n if (loader) {\n loader.registerComponent(component, meta);\n } else {\n registerComponent(component, meta);\n }\n return meta;\n}\n\nexport function makeComponentName(name: string) {\n return `plasmic-react-aria-${name}`;\n}\n\nexport function makeChildComponentName(\n fullParentName: string | undefined,\n fullChildName: string\n) {\n if (!fullParentName) {\n return fullChildName;\n }\n return `${fullParentName}-${fullChildName.replace(\n \"plasmic-react-aria-\",\n \"\"\n )}`;\n}\n\nexport interface Styleable {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function extractPlasmicDataProps(props: Record<string, any>) {\n return Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-plasmic-\"))\n );\n}\n\nexport function withoutNils<T>(array: (T | undefined | null)[]) {\n return array.filter((x): x is T => x != null);\n}\n\nexport function isDefined<T>(thing: T | undefined | null): thing is T {\n return thing !== undefined && thing !== null;\n}\n\nexport function filterHoverProps<T extends TextAreaProps | InputProps>(\n props: T\n) {\n const {\n onHoverStart: _onHoverStart,\n onHoverChange: _onHoverChange,\n onHoverEnd: _onHoverEnd,\n ...otherProps\n } = props;\n return otherProps;\n}\n"],"names":[],"mappings":"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"}
|
package/skinny/utils.d.ts
CHANGED
|
@@ -11,11 +11,12 @@ export type WithPlasmicCanvasComponentInfo = {
|
|
|
11
11
|
selectedSlotName?: string;
|
|
12
12
|
};
|
|
13
13
|
};
|
|
14
|
+
export type ControlContextData = {
|
|
15
|
+
isDisabled?: boolean;
|
|
16
|
+
isReadOnly?: boolean;
|
|
17
|
+
};
|
|
14
18
|
export type BaseControlContextData = {
|
|
15
|
-
parent?:
|
|
16
|
-
isDisabled?: boolean;
|
|
17
|
-
isReadOnly?: boolean;
|
|
18
|
-
};
|
|
19
|
+
parent?: ControlContextData;
|
|
19
20
|
};
|
|
20
21
|
export type Registerable = {
|
|
21
22
|
registerComponent: typeof registerComponent;
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var test = require('@storybook/test');
|
|
6
|
-
var React = require('react');
|
|
7
|
-
var reactAriaComponents = require('react-aria-components');
|
|
8
|
-
var registerButton = require('./registerButton.cjs.js');
|
|
9
|
-
require('@plasmicapp/host');
|
|
10
|
-
require('react-aria');
|
|
11
|
-
require('./common-45acb83c.cjs.js');
|
|
12
|
-
require('./utils-fc1ddd7c.cjs.js');
|
|
13
|
-
require('@plasmicapp/host/registerComponent');
|
|
14
|
-
require('./variant-utils-0ad70db8.cjs.js');
|
|
15
|
-
|
|
16
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
-
|
|
18
|
-
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
19
|
-
|
|
20
|
-
var __defProp = Object.defineProperty;
|
|
21
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
22
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
23
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
24
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
25
|
-
var __spreadValues = (a, b) => {
|
|
26
|
-
for (var prop in b || (b = {}))
|
|
27
|
-
if (__hasOwnProp.call(b, prop))
|
|
28
|
-
__defNormalProp(a, prop, b[prop]);
|
|
29
|
-
if (__getOwnPropSymbols)
|
|
30
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
31
|
-
if (__propIsEnum.call(b, prop))
|
|
32
|
-
__defNormalProp(a, prop, b[prop]);
|
|
33
|
-
}
|
|
34
|
-
return a;
|
|
35
|
-
};
|
|
36
|
-
var registerButton_stories = {
|
|
37
|
-
title: "Components/BaseButton",
|
|
38
|
-
component: registerButton.BaseButton,
|
|
39
|
-
args: {
|
|
40
|
-
children: "Click Me",
|
|
41
|
-
onPress: test.fn(),
|
|
42
|
-
onFocus: test.fn()
|
|
43
|
-
},
|
|
44
|
-
parameters: {
|
|
45
|
-
onSubmit: test.fn(),
|
|
46
|
-
onReset: test.fn()
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const TestForm = ({ children, onSubmit, onReset }) => /* @__PURE__ */ React__default.default.createElement(reactAriaComponents.Form, { onSubmit, onReset }, /* @__PURE__ */ React__default.default.createElement(reactAriaComponents.Input, { role: "input", name: "test-input", "aria-label": "Test input" }), children);
|
|
50
|
-
const Basic = {
|
|
51
|
-
play: async ({ args, canvasElement }) => {
|
|
52
|
-
const canvas = test.within(canvasElement);
|
|
53
|
-
const button = canvas.getByText("Click Me");
|
|
54
|
-
await test.userEvent.click(button);
|
|
55
|
-
test.expect(button).toHaveFocus();
|
|
56
|
-
test.expect(args.onPress).toHaveBeenCalledOnce();
|
|
57
|
-
test.expect(args.onFocus).toHaveBeenCalledOnce();
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
const AutoFocusedButton = {
|
|
61
|
-
args: {
|
|
62
|
-
autoFocus: true
|
|
63
|
-
},
|
|
64
|
-
render: (args) => /* @__PURE__ */ React__default.default.createElement(TestForm, null, /* @__PURE__ */ React__default.default.createElement(registerButton.BaseButton, __spreadValues({}, args))),
|
|
65
|
-
play: async ({ canvasElement }) => {
|
|
66
|
-
const canvas = test.within(canvasElement);
|
|
67
|
-
await test.waitFor(() => {
|
|
68
|
-
test.expect(canvas.getByText("Click Me")).toHaveFocus();
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
const DisabledButton = {
|
|
73
|
-
args: {
|
|
74
|
-
isDisabled: true
|
|
75
|
-
},
|
|
76
|
-
render: (args) => /* @__PURE__ */ React__default.default.createElement(TestForm, null, /* @__PURE__ */ React__default.default.createElement(registerButton.BaseButton, __spreadValues({}, args))),
|
|
77
|
-
play: async ({ canvasElement }) => {
|
|
78
|
-
const canvas = test.within(canvasElement);
|
|
79
|
-
const button = canvas.getByText("Click Me");
|
|
80
|
-
await test.userEvent.click(button);
|
|
81
|
-
test.expect(button).not.toHaveFocus();
|
|
82
|
-
test.expect(button).toBeDisabled();
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
const SubmitButton = {
|
|
86
|
-
args: {
|
|
87
|
-
children: "Submit",
|
|
88
|
-
submitsForm: true
|
|
89
|
-
},
|
|
90
|
-
render: (args, { parameters }) => {
|
|
91
|
-
return /* @__PURE__ */ React__default.default.createElement(
|
|
92
|
-
TestForm,
|
|
93
|
-
{
|
|
94
|
-
onSubmit: (e) => {
|
|
95
|
-
e.preventDefault();
|
|
96
|
-
parameters.onSubmit(e);
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
/* @__PURE__ */ React__default.default.createElement(registerButton.BaseButton, __spreadValues({}, args))
|
|
100
|
-
);
|
|
101
|
-
},
|
|
102
|
-
play: async ({ canvasElement, parameters }) => {
|
|
103
|
-
const canvas = test.within(canvasElement);
|
|
104
|
-
const button = canvas.getByText("Submit");
|
|
105
|
-
await test.userEvent.click(button);
|
|
106
|
-
test.expect(parameters.onSubmit).toHaveBeenCalledOnce();
|
|
107
|
-
test.expect(parameters.onReset).not.toHaveBeenCalled();
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
const ResetButton = {
|
|
111
|
-
args: {
|
|
112
|
-
children: "Reset",
|
|
113
|
-
resetsForm: true
|
|
114
|
-
},
|
|
115
|
-
render: (args, { parameters }) => /* @__PURE__ */ React__default.default.createElement(
|
|
116
|
-
TestForm,
|
|
117
|
-
{
|
|
118
|
-
onSubmit: (e) => {
|
|
119
|
-
e.preventDefault();
|
|
120
|
-
parameters.onSubmit(e);
|
|
121
|
-
},
|
|
122
|
-
onReset: parameters.onReset
|
|
123
|
-
},
|
|
124
|
-
/* @__PURE__ */ React__default.default.createElement(registerButton.BaseButton, __spreadValues({}, args))
|
|
125
|
-
),
|
|
126
|
-
play: async ({ canvasElement, parameters }) => {
|
|
127
|
-
const canvas = test.within(canvasElement);
|
|
128
|
-
const form = canvasElement.getElementsByTagName("form")[0];
|
|
129
|
-
const input = canvasElement.getElementsByTagName("input")[0];
|
|
130
|
-
await test.userEvent.type(input, "Hello World");
|
|
131
|
-
test.expect(form).toHaveFormValues({ "test-input": "Hello World" });
|
|
132
|
-
const button = canvas.getByText("Reset");
|
|
133
|
-
test.expect(button).toHaveAttribute("type", "reset");
|
|
134
|
-
await test.userEvent.click(button);
|
|
135
|
-
test.expect(form).toHaveFormValues({});
|
|
136
|
-
test.expect(parameters.onReset).toHaveBeenCalledOnce();
|
|
137
|
-
test.expect(parameters.onSubmit).not.toHaveBeenCalled();
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
const LinkButton = {
|
|
141
|
-
args: {
|
|
142
|
-
children: "Go to Google",
|
|
143
|
-
href: "https://www.google.com",
|
|
144
|
-
target: "_blank"
|
|
145
|
-
},
|
|
146
|
-
play: async ({ canvasElement }) => {
|
|
147
|
-
const canvas = test.within(canvasElement);
|
|
148
|
-
const link = canvas.getByText("Go to Google");
|
|
149
|
-
test.expect(link.tagName).toBe("A");
|
|
150
|
-
test.expect(link).toHaveAttribute("href", "https://www.google.com");
|
|
151
|
-
test.expect(link).toHaveAttribute("target", "_blank");
|
|
152
|
-
await test.userEvent.click(link);
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
exports.AutoFocusedButton = AutoFocusedButton;
|
|
157
|
-
exports.Basic = Basic;
|
|
158
|
-
exports.DisabledButton = DisabledButton;
|
|
159
|
-
exports.LinkButton = LinkButton;
|
|
160
|
-
exports.ResetButton = ResetButton;
|
|
161
|
-
exports.SubmitButton = SubmitButton;
|
|
162
|
-
exports.default = registerButton_stories;
|
|
163
|
-
//# sourceMappingURL=registerButton.stories.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registerButton.stories.cjs.js","sources":["../src/registerButton.stories.tsx"],"sourcesContent":["import { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React from \"react\";\nimport { Form, Input } from \"react-aria-components\";\nimport { BaseButton } from \"./registerButton\";\n\nexport default {\n title: \"Components/BaseButton\",\n component: BaseButton,\n args: {\n children: \"Click Me\",\n onPress: fn(),\n onFocus: fn(),\n },\n parameters: {\n onSubmit: fn(),\n onReset: fn(),\n },\n} satisfies Meta<typeof BaseButton>;\n\ntype Story = StoryObj<typeof BaseButton>;\n\n// Reusable test form wrapper\nconst TestForm: React.FC<{\n children: React.ReactNode;\n onSubmit?: (e: React.FormEvent) => void;\n onReset?: (e: React.FormEvent) => void;\n}> = ({ children, onSubmit, onReset }) => (\n <Form onSubmit={onSubmit} onReset={onReset}>\n <Input role=\"input\" name=\"test-input\" aria-label=\"Test input\" />\n {children}\n </Form>\n);\n\nexport const Basic: Story = {\n play: async ({ args, canvasElement }) => {\n const canvas = within(canvasElement);\n const button = canvas.getByText(\"Click Me\");\n\n await userEvent.click(button);\n\n expect(button).toHaveFocus();\n expect(args.onPress).toHaveBeenCalledOnce();\n expect(args.onFocus).toHaveBeenCalledOnce();\n },\n};\n\nexport const AutoFocusedButton: Story = {\n args: {\n autoFocus: true,\n },\n render: (args) => (\n <TestForm>\n <BaseButton {...args} />\n </TestForm>\n ),\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n await waitFor(() => {\n expect(canvas.getByText(\"Click Me\")).toHaveFocus();\n });\n },\n};\n\nexport const DisabledButton: Story = {\n args: {\n isDisabled: true,\n },\n render: (args) => (\n <TestForm>\n <BaseButton {...args} />\n </TestForm>\n ),\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const button = canvas.getByText(\"Click Me\");\n\n await userEvent.click(button);\n expect(button).not.toHaveFocus();\n expect(button).toBeDisabled();\n },\n};\n\nexport const SubmitButton: Story = {\n args: {\n children: \"Submit\",\n submitsForm: true,\n },\n render: (args, { parameters }) => {\n return (\n <TestForm\n onSubmit={(e) => {\n e.preventDefault();\n parameters.onSubmit(e);\n }}\n >\n <BaseButton {...args} />\n </TestForm>\n );\n },\n play: async ({ canvasElement, parameters }) => {\n const canvas = within(canvasElement);\n const button = canvas.getByText(\"Submit\");\n await userEvent.click(button);\n expect(parameters.onSubmit).toHaveBeenCalledOnce();\n expect(parameters.onReset).not.toHaveBeenCalled();\n },\n};\n\nexport const ResetButton: Story = {\n args: {\n children: \"Reset\",\n resetsForm: true,\n },\n render: (args, { parameters }) => (\n <TestForm\n onSubmit={(e) => {\n e.preventDefault();\n parameters.onSubmit(e);\n }}\n onReset={parameters.onReset}\n >\n <BaseButton {...args} />\n </TestForm>\n ),\n play: async ({ canvasElement, parameters }) => {\n const canvas = within(canvasElement);\n const form = canvasElement.getElementsByTagName(\"form\")[0];\n const input = canvasElement.getElementsByTagName(\"input\")[0];\n await userEvent.type(input, \"Hello World\");\n expect(form).toHaveFormValues({ \"test-input\": \"Hello World\" });\n const button = canvas.getByText(\"Reset\");\n expect(button).toHaveAttribute(\"type\", \"reset\");\n await userEvent.click(button);\n expect(form).toHaveFormValues({});\n expect(parameters.onReset).toHaveBeenCalledOnce();\n expect(parameters.onSubmit).not.toHaveBeenCalled();\n },\n};\n\nexport const LinkButton: Story = {\n args: {\n children: \"Go to Google\",\n href: \"https://www.google.com\",\n target: \"_blank\",\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const link = canvas.getByText(\"Go to Google\");\n\n expect(link.tagName).toBe(\"A\");\n expect(link).toHaveAttribute(\"href\", \"https://www.google.com\");\n expect(link).toHaveAttribute(\"target\", \"_blank\");\n await userEvent.click(link);\n },\n};\n"],"names":["BaseButton","fn","Form","React","Input","within","userEvent","expect","waitFor"],"mappings":"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"}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { fn, within, userEvent, expect, waitFor } from '@storybook/test';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Form, Input } from 'react-aria-components';
|
|
4
|
-
import { BaseButton } from './registerButton.esm.js';
|
|
5
|
-
import '@plasmicapp/host';
|
|
6
|
-
import 'react-aria';
|
|
7
|
-
import './common-616eb178.esm.js';
|
|
8
|
-
import './utils-fd88ad47.esm.js';
|
|
9
|
-
import '@plasmicapp/host/registerComponent';
|
|
10
|
-
import './variant-utils-4405ebb0.esm.js';
|
|
11
|
-
|
|
12
|
-
var __defProp = Object.defineProperty;
|
|
13
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
14
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
15
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
16
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
17
|
-
var __spreadValues = (a, b) => {
|
|
18
|
-
for (var prop in b || (b = {}))
|
|
19
|
-
if (__hasOwnProp.call(b, prop))
|
|
20
|
-
__defNormalProp(a, prop, b[prop]);
|
|
21
|
-
if (__getOwnPropSymbols)
|
|
22
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
23
|
-
if (__propIsEnum.call(b, prop))
|
|
24
|
-
__defNormalProp(a, prop, b[prop]);
|
|
25
|
-
}
|
|
26
|
-
return a;
|
|
27
|
-
};
|
|
28
|
-
var registerButton_stories = {
|
|
29
|
-
title: "Components/BaseButton",
|
|
30
|
-
component: BaseButton,
|
|
31
|
-
args: {
|
|
32
|
-
children: "Click Me",
|
|
33
|
-
onPress: fn(),
|
|
34
|
-
onFocus: fn()
|
|
35
|
-
},
|
|
36
|
-
parameters: {
|
|
37
|
-
onSubmit: fn(),
|
|
38
|
-
onReset: fn()
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
const TestForm = ({ children, onSubmit, onReset }) => /* @__PURE__ */ React.createElement(Form, { onSubmit, onReset }, /* @__PURE__ */ React.createElement(Input, { role: "input", name: "test-input", "aria-label": "Test input" }), children);
|
|
42
|
-
const Basic = {
|
|
43
|
-
play: async ({ args, canvasElement }) => {
|
|
44
|
-
const canvas = within(canvasElement);
|
|
45
|
-
const button = canvas.getByText("Click Me");
|
|
46
|
-
await userEvent.click(button);
|
|
47
|
-
expect(button).toHaveFocus();
|
|
48
|
-
expect(args.onPress).toHaveBeenCalledOnce();
|
|
49
|
-
expect(args.onFocus).toHaveBeenCalledOnce();
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
const AutoFocusedButton = {
|
|
53
|
-
args: {
|
|
54
|
-
autoFocus: true
|
|
55
|
-
},
|
|
56
|
-
render: (args) => /* @__PURE__ */ React.createElement(TestForm, null, /* @__PURE__ */ React.createElement(BaseButton, __spreadValues({}, args))),
|
|
57
|
-
play: async ({ canvasElement }) => {
|
|
58
|
-
const canvas = within(canvasElement);
|
|
59
|
-
await waitFor(() => {
|
|
60
|
-
expect(canvas.getByText("Click Me")).toHaveFocus();
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
const DisabledButton = {
|
|
65
|
-
args: {
|
|
66
|
-
isDisabled: true
|
|
67
|
-
},
|
|
68
|
-
render: (args) => /* @__PURE__ */ React.createElement(TestForm, null, /* @__PURE__ */ React.createElement(BaseButton, __spreadValues({}, args))),
|
|
69
|
-
play: async ({ canvasElement }) => {
|
|
70
|
-
const canvas = within(canvasElement);
|
|
71
|
-
const button = canvas.getByText("Click Me");
|
|
72
|
-
await userEvent.click(button);
|
|
73
|
-
expect(button).not.toHaveFocus();
|
|
74
|
-
expect(button).toBeDisabled();
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
const SubmitButton = {
|
|
78
|
-
args: {
|
|
79
|
-
children: "Submit",
|
|
80
|
-
submitsForm: true
|
|
81
|
-
},
|
|
82
|
-
render: (args, { parameters }) => {
|
|
83
|
-
return /* @__PURE__ */ React.createElement(
|
|
84
|
-
TestForm,
|
|
85
|
-
{
|
|
86
|
-
onSubmit: (e) => {
|
|
87
|
-
e.preventDefault();
|
|
88
|
-
parameters.onSubmit(e);
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
/* @__PURE__ */ React.createElement(BaseButton, __spreadValues({}, args))
|
|
92
|
-
);
|
|
93
|
-
},
|
|
94
|
-
play: async ({ canvasElement, parameters }) => {
|
|
95
|
-
const canvas = within(canvasElement);
|
|
96
|
-
const button = canvas.getByText("Submit");
|
|
97
|
-
await userEvent.click(button);
|
|
98
|
-
expect(parameters.onSubmit).toHaveBeenCalledOnce();
|
|
99
|
-
expect(parameters.onReset).not.toHaveBeenCalled();
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
const ResetButton = {
|
|
103
|
-
args: {
|
|
104
|
-
children: "Reset",
|
|
105
|
-
resetsForm: true
|
|
106
|
-
},
|
|
107
|
-
render: (args, { parameters }) => /* @__PURE__ */ React.createElement(
|
|
108
|
-
TestForm,
|
|
109
|
-
{
|
|
110
|
-
onSubmit: (e) => {
|
|
111
|
-
e.preventDefault();
|
|
112
|
-
parameters.onSubmit(e);
|
|
113
|
-
},
|
|
114
|
-
onReset: parameters.onReset
|
|
115
|
-
},
|
|
116
|
-
/* @__PURE__ */ React.createElement(BaseButton, __spreadValues({}, args))
|
|
117
|
-
),
|
|
118
|
-
play: async ({ canvasElement, parameters }) => {
|
|
119
|
-
const canvas = within(canvasElement);
|
|
120
|
-
const form = canvasElement.getElementsByTagName("form")[0];
|
|
121
|
-
const input = canvasElement.getElementsByTagName("input")[0];
|
|
122
|
-
await userEvent.type(input, "Hello World");
|
|
123
|
-
expect(form).toHaveFormValues({ "test-input": "Hello World" });
|
|
124
|
-
const button = canvas.getByText("Reset");
|
|
125
|
-
expect(button).toHaveAttribute("type", "reset");
|
|
126
|
-
await userEvent.click(button);
|
|
127
|
-
expect(form).toHaveFormValues({});
|
|
128
|
-
expect(parameters.onReset).toHaveBeenCalledOnce();
|
|
129
|
-
expect(parameters.onSubmit).not.toHaveBeenCalled();
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
const LinkButton = {
|
|
133
|
-
args: {
|
|
134
|
-
children: "Go to Google",
|
|
135
|
-
href: "https://www.google.com",
|
|
136
|
-
target: "_blank"
|
|
137
|
-
},
|
|
138
|
-
play: async ({ canvasElement }) => {
|
|
139
|
-
const canvas = within(canvasElement);
|
|
140
|
-
const link = canvas.getByText("Go to Google");
|
|
141
|
-
expect(link.tagName).toBe("A");
|
|
142
|
-
expect(link).toHaveAttribute("href", "https://www.google.com");
|
|
143
|
-
expect(link).toHaveAttribute("target", "_blank");
|
|
144
|
-
await userEvent.click(link);
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
export { AutoFocusedButton, Basic, DisabledButton, LinkButton, ResetButton, SubmitButton, registerButton_stories as default };
|
|
149
|
-
//# sourceMappingURL=registerButton.stories.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registerButton.stories.esm.js","sources":["../src/registerButton.stories.tsx"],"sourcesContent":["import { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React from \"react\";\nimport { Form, Input } from \"react-aria-components\";\nimport { BaseButton } from \"./registerButton\";\n\nexport default {\n title: \"Components/BaseButton\",\n component: BaseButton,\n args: {\n children: \"Click Me\",\n onPress: fn(),\n onFocus: fn(),\n },\n parameters: {\n onSubmit: fn(),\n onReset: fn(),\n },\n} satisfies Meta<typeof BaseButton>;\n\ntype Story = StoryObj<typeof BaseButton>;\n\n// Reusable test form wrapper\nconst TestForm: React.FC<{\n children: React.ReactNode;\n onSubmit?: (e: React.FormEvent) => void;\n onReset?: (e: React.FormEvent) => void;\n}> = ({ children, onSubmit, onReset }) => (\n <Form onSubmit={onSubmit} onReset={onReset}>\n <Input role=\"input\" name=\"test-input\" aria-label=\"Test input\" />\n {children}\n </Form>\n);\n\nexport const Basic: Story = {\n play: async ({ args, canvasElement }) => {\n const canvas = within(canvasElement);\n const button = canvas.getByText(\"Click Me\");\n\n await userEvent.click(button);\n\n expect(button).toHaveFocus();\n expect(args.onPress).toHaveBeenCalledOnce();\n expect(args.onFocus).toHaveBeenCalledOnce();\n },\n};\n\nexport const AutoFocusedButton: Story = {\n args: {\n autoFocus: true,\n },\n render: (args) => (\n <TestForm>\n <BaseButton {...args} />\n </TestForm>\n ),\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n await waitFor(() => {\n expect(canvas.getByText(\"Click Me\")).toHaveFocus();\n });\n },\n};\n\nexport const DisabledButton: Story = {\n args: {\n isDisabled: true,\n },\n render: (args) => (\n <TestForm>\n <BaseButton {...args} />\n </TestForm>\n ),\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const button = canvas.getByText(\"Click Me\");\n\n await userEvent.click(button);\n expect(button).not.toHaveFocus();\n expect(button).toBeDisabled();\n },\n};\n\nexport const SubmitButton: Story = {\n args: {\n children: \"Submit\",\n submitsForm: true,\n },\n render: (args, { parameters }) => {\n return (\n <TestForm\n onSubmit={(e) => {\n e.preventDefault();\n parameters.onSubmit(e);\n }}\n >\n <BaseButton {...args} />\n </TestForm>\n );\n },\n play: async ({ canvasElement, parameters }) => {\n const canvas = within(canvasElement);\n const button = canvas.getByText(\"Submit\");\n await userEvent.click(button);\n expect(parameters.onSubmit).toHaveBeenCalledOnce();\n expect(parameters.onReset).not.toHaveBeenCalled();\n },\n};\n\nexport const ResetButton: Story = {\n args: {\n children: \"Reset\",\n resetsForm: true,\n },\n render: (args, { parameters }) => (\n <TestForm\n onSubmit={(e) => {\n e.preventDefault();\n parameters.onSubmit(e);\n }}\n onReset={parameters.onReset}\n >\n <BaseButton {...args} />\n </TestForm>\n ),\n play: async ({ canvasElement, parameters }) => {\n const canvas = within(canvasElement);\n const form = canvasElement.getElementsByTagName(\"form\")[0];\n const input = canvasElement.getElementsByTagName(\"input\")[0];\n await userEvent.type(input, \"Hello World\");\n expect(form).toHaveFormValues({ \"test-input\": \"Hello World\" });\n const button = canvas.getByText(\"Reset\");\n expect(button).toHaveAttribute(\"type\", \"reset\");\n await userEvent.click(button);\n expect(form).toHaveFormValues({});\n expect(parameters.onReset).toHaveBeenCalledOnce();\n expect(parameters.onSubmit).not.toHaveBeenCalled();\n },\n};\n\nexport const LinkButton: Story = {\n args: {\n children: \"Go to Google\",\n href: \"https://www.google.com\",\n target: \"_blank\",\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const link = canvas.getByText(\"Go to Google\");\n\n expect(link.tagName).toBe(\"A\");\n expect(link).toHaveAttribute(\"href\", \"https://www.google.com\");\n expect(link).toHaveAttribute(\"target\", \"_blank\");\n await userEvent.click(link);\n },\n};\n"],"names":[],"mappings":"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"}
|