@purpur/library 9.0.0 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +12 -0
- package/CHANGELOG.md +8 -1
- package/dist/LICENSE.txt +5 -5
- package/dist/checkbox-Dk3bZkZ3.js.map +1 -1
- package/dist/checkbox-LYzMiXu7.mjs.map +1 -1
- package/dist/chip-group-CJVvfl_J.mjs.map +1 -1
- package/dist/chip-group-aj1fdnjC.js.map +1 -1
- package/dist/{date-picker-BRkh2YEH.mjs → date-picker-BRnwwZv1.mjs} +364 -354
- package/dist/date-picker-BRnwwZv1.mjs.map +1 -0
- package/dist/date-picker-DlJGggam.js +2 -0
- package/dist/date-picker-DlJGggam.js.map +1 -0
- package/dist/date-picker.cjs.js +1 -1
- package/dist/date-picker.es.js +1 -1
- package/dist/floating-ui.react-dom-0ol4sFzt.mjs +1363 -0
- package/dist/floating-ui.react-dom-0ol4sFzt.mjs.map +1 -0
- package/dist/floating-ui.react-dom-Cc_YSprQ.js +2 -0
- package/dist/floating-ui.react-dom-Cc_YSprQ.js.map +1 -0
- package/dist/index-2cFVyGXq.js.map +1 -1
- package/dist/index-B8Mazo6u.mjs.map +1 -1
- package/dist/index-BG6K_yAm.js.map +1 -1
- package/dist/index-BVmlsxuF.js.map +1 -1
- package/dist/index-BbtRr5Q6.js.map +1 -1
- package/dist/index-BtWPC8xc.js.map +1 -1
- package/dist/index-ByaXH_ih.mjs.map +1 -1
- package/dist/index-C1AXAWlO.mjs.map +1 -1
- package/dist/index-CCNZ9uWB.mjs.map +1 -1
- package/dist/index-CEQ35j8b.mjs.map +1 -1
- package/dist/index-CKCTy3ZL.mjs.map +1 -1
- package/dist/index-CLMd7NJE.mjs.map +1 -1
- package/dist/index-Cje7xxa1.js.map +1 -1
- package/dist/index-CleLBinl.js.map +1 -1
- package/dist/index-CoR7YA3H.js.map +1 -1
- package/dist/index-CxBG4Ssm.js.map +1 -1
- package/dist/index-DA01QPpC.js.map +1 -1
- package/dist/index-DCcK_d4W.mjs.map +1 -1
- package/dist/index-DDrLXRUs.mjs.map +1 -1
- package/dist/index-DLcqcWxM.mjs.map +1 -1
- package/dist/index-DOFLOnao.js.map +1 -1
- package/dist/index-DOfn3ixy.mjs.map +1 -1
- package/dist/index-DPxjTK4w.mjs.map +1 -1
- package/dist/index-DSf4qCR-.mjs.map +1 -1
- package/dist/index-DlMXYAr3.js.map +1 -1
- package/dist/index-HJvG7FXj.js.map +1 -1
- package/dist/index-Hk_HrrHM.js.map +1 -1
- package/dist/index-IpWiejWQ.mjs.map +1 -1
- package/dist/index-MiRhI3nq.mjs.map +1 -1
- package/dist/index-_XxjJPRD.js.map +1 -1
- package/dist/index-kcwFA4Dv.js.map +1 -1
- package/dist/index-tyLV0iiH.mjs.map +1 -1
- package/dist/label-7sJe5-pX.mjs.map +1 -1
- package/dist/label-yHK80hhV.js.map +1 -1
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +5 -5
- package/dist/{popover-CYyCtoef.js → popover-B1BgSoQx.js} +2 -2
- package/dist/{popover-CYyCtoef.js.map → popover-B1BgSoQx.js.map} +1 -1
- package/dist/{popover-C6nZb3cQ.mjs → popover-DBMI9Jy1.mjs} +4 -4
- package/dist/{popover-C6nZb3cQ.mjs.map → popover-DBMI9Jy1.mjs.map} +1 -1
- package/dist/popover.cjs.js +1 -1
- package/dist/popover.es.js +1 -1
- package/dist/slider-CDOrFmK-.mjs.map +1 -1
- package/dist/slider-_R6JmPZl.js.map +1 -1
- package/dist/{stepper-DA0c9Utm.js → stepper-B248FwO-.js} +2 -2
- package/dist/{stepper-DA0c9Utm.js.map → stepper-B248FwO-.js.map} +1 -1
- package/dist/{stepper-D81jmbEf.mjs → stepper-BfIbJwZn.mjs} +2 -2
- package/dist/{stepper-D81jmbEf.mjs.map → stepper-BfIbJwZn.mjs.map} +1 -1
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.es.js +1 -1
- package/dist/{table-Dd58bK_Q.js → table-BNeo_B1h.js} +2 -2
- package/dist/{table-Dd58bK_Q.js.map → table-BNeo_B1h.js.map} +1 -1
- package/dist/{table-CIrmGGb2.mjs → table-DvcpczWf.mjs} +2 -2
- package/dist/{table-CIrmGGb2.mjs.map → table-DvcpczWf.mjs.map} +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/tabs-CfHd4UQ2.js.map +1 -1
- package/dist/tabs-CoXMAwMx.mjs.map +1 -1
- package/dist/toggle-C8IwTbX8.js.map +1 -1
- package/dist/toggle-Cezg5MUc.mjs.map +1 -1
- package/dist/{tooltip-870Nmk-v.js → tooltip-CLQLxoaf.js} +2 -2
- package/dist/{tooltip-870Nmk-v.js.map → tooltip-CLQLxoaf.js.map} +1 -1
- package/dist/{tooltip-Cqfj0lSz.mjs → tooltip-DXi7ikUT.mjs} +2 -2
- package/dist/{tooltip-Cqfj0lSz.mjs.map → tooltip-DXi7ikUT.mjs.map} +1 -1
- package/dist/tooltip.cjs.js +1 -1
- package/dist/tooltip.es.js +1 -1
- package/dist/visually-hidden-BYFkJEp1.mjs.map +1 -1
- package/dist/visually-hidden-C2CKovZx.js.map +1 -1
- package/package.json +68 -68
- package/dist/date-picker-BRkh2YEH.mjs.map +0 -1
- package/dist/date-picker-C2Wtf7XQ.js +0 -2
- package/dist/date-picker-C2Wtf7XQ.js.map +0 -1
- package/dist/floating-ui.react-dom-B_rB55Mr.mjs +0 -1340
- package/dist/floating-ui.react-dom-B_rB55Mr.mjs.map +0 -1
- package/dist/floating-ui.react-dom-z0lMBJ4R.js +0 -2
- package/dist/floating-ui.react-dom-z0lMBJ4R.js.map +0 -1
package/dist/table.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./table-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./table-BNeo_B1h.js");exports.Table=e.Table;exports.createColumnHelper=e.createColumnHelper;
|
|
2
2
|
//# sourceMappingURL=table.cjs.js.map
|
package/dist/table.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs-CfHd4UQ2.js","sources":["../../../components/icon/dist/assets/chevron-left.es.js","../../../components/icon/dist/assets/chevron-right.es.js","../../../common/temp/node_modules/.pnpm/@radix-ui+react-tabs@1.1.13_@types+react-dom@19.2.3_@types+react@19.2.10__@types+react@_68a385a9eea120600bb372a91de22b00/node_modules/@radix-ui/react-tabs/dist/index.mjs","../../../components/tabs/src/tab-content.tsx","../../../components/tabs/src/tab-header.tsx","../../../components/tabs/src/tabs.utils.ts","../../../components/tabs/src/tabs.tsx"],"sourcesContent":["const e = {\n name: \"chevron-left\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M16.175 3.905a.9.9 0 0 1-.08 1.27L8.36 12l7.736 6.825a.9.9 0 0 1-1.191 1.35l-8.5-7.5a.9.9 0 0 1 0-1.35l8.5-7.5a.9.9 0 0 1 1.27.08Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"chevron-left\"],\n category: \"utility\"\n};\nexport {\n e as chevronLeft\n};\n//# sourceMappingURL=chevron-left.es.js.map\n","const e = {\n name: \"chevron-right\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M7.809 3.924a.9.9 0 0 0 .115 1.267L16.094 12l-8.17 6.809a.9.9 0 0 0 1.152 1.382l9-7.5a.9.9 0 0 0 0-1.382l-9-7.5a.9.9 0 0 0-1.267.115Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"chevron-right\"],\n category: \"utility\"\n};\nexport {\n e as chevronRight\n};\n//# sourceMappingURL=chevron-right.es.js.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Content } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./tab-content.module.scss\";\n\nexport type TabContentProps = Omit<BaseProps, \"children\"> & {\n /**\n * Content to be rendered inside a `button` element.\n * Only pass ReactNodes that are valid as children of a `button`, such as plain text,\n * inline elements like `span` or other non-interactive elements. Avoid block-level or interactive elements.\n */\n name: ReactNode;\n /**\n * A unique ID that associates the tab with a content.\n * */\n tabId: string;\n /**\n * If true, the inactive tab content will not be rendered.\n */\n disableForceMount?: boolean;\n children: ReactNode;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tab-content\";\n\nexport const TabContent = forwardRef<HTMLDivElement, TabContentProps>(\n ({ children, tabId, \"data-testid\": dataTestId, className, disableForceMount, ...props }, ref) => (\n <Content\n ref={ref}\n className={cx(rootClassName, className, {\n [`${rootClassName}--force-mount`]: !disableForceMount,\n })}\n data-testid={dataTestId}\n value={tabId}\n forceMount={!disableForceMount || undefined}\n {...props}\n >\n {children}\n </Content>\n )\n);\n\nexport const isTabContent = (child?: ReactNode): child is ReactElement<TabContentProps> =>\n !!child && isValidElement<TabContentProps>(child) && !!child.props.name && !!child.props.tabId;\n","import React, {\n type FocusEventHandler,\n type ForwardedRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport { Trigger } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./tab-header.module.scss\";\nimport { type TabsVariant } from \"./tabs.utils\";\n\ntype TabHeaderProps = {\n \"data-testid\"?: string;\n index: number;\n tabId: string;\n variant: TabsVariant;\n negative?: boolean;\n onFocus: FocusEventHandler<HTMLButtonElement>;\n fullWidth?: boolean;\n children: ReactNode;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tab-header\";\n\nexport const TabHeader = forwardRef(\n <T extends HTMLButtonElement>(\n {\n index,\n tabId,\n variant,\n negative,\n onFocus,\n fullWidth,\n \"data-testid\": dataTestId,\n children,\n }: TabHeaderProps,\n ref: ForwardedRef<T>\n ) => (\n <Trigger\n id={`${tabId}-trigger`}\n className={cx(rootClassName, `${rootClassName}--${variant}${negative ? \"-negative\" : \"\"}`, {\n [`${rootClassName}--full-width`]: fullWidth,\n })}\n value={tabId}\n data-testid={dataTestId}\n data-index={index}\n ref={ref}\n onFocus={onFocus}\n >\n {children}\n </Trigger>\n )\n);\n","import type { FunctionComponent } from \"react\";\n\nimport type { TabContent } from \"./tab-content\";\n\nexport type TabsCmp<P> = FunctionComponent<P> & {\n Content: typeof TabContent;\n};\n\nexport const tabsVariants = [\"line\", \"contained\"] as const;\n\nexport type TabsVariant = (typeof tabsVariants)[number];\n\nexport const createTabChangeDetailEvent = (value: string) =>\n new CustomEvent<TabChangeDetail>(\"tabChangeDetail\", { detail: { value } });\n\nexport type TabChangeDetail = { value: string };\n","import React, {\n Children,\n type HTMLAttributes,\n type ReactElement,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Icon } from \"@purpur/icon\";\nimport { chevronLeft } from \"@purpur/icon/assets/chevron-left\";\nimport { chevronRight } from \"@purpur/icon/assets/chevron-right\";\nimport { List, Root } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport { isTabContent, TabContent } from \"./tab-content\";\nimport { TabHeader } from \"./tab-header\";\nimport styles from \"./tabs.module.scss\";\nimport {\n createTabChangeDetailEvent,\n type TabChangeDetail,\n type TabsCmp,\n type TabsVariant,\n} from \"./tabs.utils\";\n\ntype TabsProps = {\n children: Array<ReactElement<typeof TabContent>> | ReactElement<typeof TabContent>;\n variant?: TabsVariant;\n negative?: boolean;\n fullWidth?: boolean;\n /**\n * The controlled value of the tabs. Must be used in conjunction with onChange.\n */\n value?: string;\n /**\n * Event handler called when the value changes.\n * */\n onChange?: (event: CustomEvent<TabChangeDetail>) => void;\n defaultValue?: string;\n /**\n * When true, animates the height of the component when switching tabs.\n * */\n animateHeight?: boolean;\n \"data-testid\"?: string;\n} & Pick<HTMLAttributes<HTMLDivElement>, \"style\" | \"className\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tabs\";\n\nconst scrollToTarget = (target: HTMLElement, tabList?: HTMLDivElement | null) => {\n /**\n * scroll may not be available in test runner, so check existence before\n * proceeding. We can't use scrollIntoView() because Safari doesn't support\n * it fully.\n */\n if (\n typeof target?.getBoundingClientRect !== \"function\" ||\n typeof tabList?.scroll !== \"function\"\n ) {\n return;\n }\n\n const targetRect = target.getBoundingClientRect();\n const wrapperRect = tabList.getBoundingClientRect();\n const wrapperWidth = tabList.clientWidth;\n const wrapperOffset = parseInt(getComputedStyle(tabList).borderLeftWidth?.split(\"px\")[0], 10);\n const offset = wrapperRect.left + (isNaN(wrapperOffset) ? 0 : wrapperOffset);\n let left;\n\n // Handle forward navigation\n if (targetRect.right > wrapperRect.right) {\n left = targetRect.left + tabList.scrollLeft;\n left = left + targetRect.width - wrapperWidth + wrapperWidth * 0.1;\n left = left - offset;\n }\n\n // Handle backwards navigation\n if (targetRect.left < wrapperRect.left) {\n left = targetRect.left + tabList.scrollLeft;\n left = left - wrapperWidth * 0.1;\n left = left - offset;\n }\n\n if (left !== undefined) {\n tabList.scroll({ left, behavior: \"smooth\" });\n }\n};\n\nexport const Tabs: TabsCmp<TabsProps> = ({\n children,\n variant = \"line\",\n negative = false,\n fullWidth = false,\n onChange,\n className,\n defaultValue,\n animateHeight = false,\n \"data-testid\": dataTestId,\n value,\n ...props\n}) => {\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [height, setHeight] = useState(-1);\n const [scrollClasses, setScrollClasses] = useState<{ [key: string]: boolean }>({});\n const [selectedTriggerOffset, setSelectedTriggerOffset] = useState(0);\n const [selectedTriggerWidth, setSelectedTriggerWidth] = useState(0);\n const tabContentChildren = Children.toArray(children).filter(isTabContent);\n const tabList = useRef<HTMLDivElement>(null);\n const tabChildren = useRef<HTMLButtonElement[]>(new Array(tabContentChildren.length));\n const sideScrollAdjustmentSize = 200;\n const isLineVariant = variant === \"line\";\n\n const classNames = cx(\n rootClassName,\n `${rootClassName}--${variant}${negative ? \"-negative\" : \"\"}`,\n { [`${rootClassName}--full-width`]: fullWidth },\n className\n );\n\n const tabIds = Children.map(tabContentChildren, ({ props: { tabId } }) => tabId);\n\n const getDefaultTabIndex = () => {\n const defaultIndex = tabIds.findIndex((tabIndex) => tabIndex === defaultValue);\n return defaultIndex >= 0 ? defaultIndex : 0;\n };\n\n useEffect(() => {\n if (value) {\n setActiveIndex(tabContentChildren.findIndex((child) => child.props.tabId === value));\n }\n }, [tabContentChildren, value]);\n\n const [activeIndex, setActiveIndex] = useState(getDefaultTabIndex);\n\n if (new Set(tabIds).size !== tabIds.length) {\n throw new Error(\"tabId must be unique\");\n }\n\n const getTestId = (name: string, id?: string) =>\n id || dataTestId ? `${id || dataTestId}-${name}` : undefined;\n\n const handleLinePosition = () => {\n if (!isLineVariant) {\n return;\n }\n\n const activeTabElement = tabChildren.current[activeIndex];\n\n setSelectedTriggerOffset(activeTabElement?.offsetLeft || 0);\n setSelectedTriggerWidth(activeTabElement?.getBoundingClientRect().width || 0);\n };\n\n const handleTabChange = (_value: string) => {\n if (isLineVariant && !value) {\n setActiveIndex(tabContentChildren.findIndex((child) => child.props.tabId === _value));\n }\n onChange?.(createTabChangeDetailEvent(_value));\n };\n\n const handleScrollButtonClick = (side: \"left\" | \"right\") => {\n if (tabList?.current) {\n const { scrollLeft } = tabList.current;\n const modifier = side === \"left\" ? -sideScrollAdjustmentSize : sideScrollAdjustmentSize;\n\n tabList.current.scroll({ left: scrollLeft + modifier, behavior: \"smooth\" });\n }\n };\n\n const ScrollButton = ({ side }: { side: \"left\" | \"right\" }) => (\n <button\n className={cx(`${rootClassName}__scroll-button`, `${rootClassName}__scroll-button--${side}`)}\n onClick={() => handleScrollButtonClick(side)}\n type=\"button\"\n aria-hidden=\"true\"\n tabIndex={-1}\n data-testid={getTestId(\"scroll-button\")}\n >\n <Icon svg={side === \"left\" ? chevronLeft : chevronRight} size=\"md\" />\n </button>\n );\n\n useEffect(() => {\n const setNewHeight = () => {\n if (contentRef.current && animateHeight) {\n const newHeight = contentRef.current.offsetHeight;\n setHeight(newHeight);\n }\n };\n\n const handleResize = () => {\n setNewHeight();\n handleLinePosition();\n };\n\n setNewHeight();\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [activeIndex, animateHeight]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n handleLinePosition();\n }, [activeIndex, fullWidth, tabContentChildren.length, variant]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const root = tabList.current;\n if (!root) return;\n\n const updateScrollState = () => {\n const { scrollLeft, scrollWidth, clientWidth } = root;\n\n const canScroll = scrollWidth > clientWidth;\n const atStart = scrollLeft <= 1;\n const atEnd = scrollLeft + clientWidth >= scrollWidth - 1;\n\n if (!canScroll) {\n setScrollClasses({});\n return;\n }\n\n setScrollClasses({\n [`${rootClassName}__wrapper--scroll-start`]: !atStart,\n [`${rootClassName}__wrapper--scroll-end`]: !atEnd,\n });\n };\n\n updateScrollState();\n\n root.addEventListener(\"scroll\", updateScrollState, { passive: true });\n window.addEventListener(\"resize\", updateScrollState);\n\n return () => {\n root.removeEventListener(\"scroll\", updateScrollState);\n window.removeEventListener(\"resize\", updateScrollState);\n };\n }, []);\n\n return (\n <Root\n defaultValue={defaultValue ?? tabContentChildren[0].props.tabId}\n onValueChange={handleTabChange}\n data-testid={dataTestId}\n className={classNames}\n value={value}\n {...props}\n >\n <div className={cx(`${rootClassName}__container`)}>\n <div className={cx(`${rootClassName}__wrapper`, scrollClasses)}>\n <List\n ref={(el) => {\n tabList.current = el;\n }}\n className={cx(`${rootClassName}__list`)}\n >\n {Children.map(tabContentChildren, (child, index) => {\n const { name, tabId, \"data-testid\": childDataTestId } = child.props;\n return (\n <TabHeader\n data-testid={getTestId(\"header\", childDataTestId)}\n index={index}\n tabId={tabId}\n ref={(el) => {\n if (el) {\n tabChildren.current[index] = el;\n }\n }}\n onFocus={(e) => {\n scrollToTarget(e.target as HTMLElement, tabList.current);\n }}\n variant={variant}\n negative={negative}\n fullWidth={fullWidth}\n >\n {name}\n </TabHeader>\n );\n })}\n {isLineVariant && (\n <div\n className={cx(`${rootClassName}__selected-border`)}\n style={{\n width: selectedTriggerWidth,\n transform: `translateX(${selectedTriggerOffset}px)`,\n }}\n data-testid={getTestId(\"selected-border\")}\n />\n )}\n </List>\n <ScrollButton side=\"left\" />\n <ScrollButton side=\"right\" />\n </div>\n <div\n className={animateHeight ? cx(`${rootClassName}__content-wrapper`) : \"\"}\n style={{ height: animateHeight && height > -1 ? `${height}px` : \"auto\" }}\n >\n <div ref={contentRef} className={cx(`${rootClassName}__content-container`)}>\n {Children.map(tabContentChildren, (child) => child)}\n </div>\n </div>\n </div>\n </Root>\n );\n};\n\nTabs.Content = TabContent;\n\nexport * from \"./tabs.utils\";\n"],"names":["e","TABS_NAME","createTabsContext","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","React","props","forwardedRef","__scopeTabs","valueProp","onValueChange","defaultValue","orientation","dir","activationMode","tabsProps","direction","useDirection","value","setValue","useControllableState","jsx","useId","Primitive","TAB_LIST_NAME","TabsList","loop","listProps","context","rovingFocusGroupScope","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","disabled","triggerProps","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","composeEventHandlers","event","isAutomaticActivation","CONTENT_NAME","TabsContent","forceMount","children","contentProps","isMountAnimationPreventedRef","rAF","Presence","present","baseId","Root2","List","Trigger","Content","cx","c","styles","rootClassName","TabContent","forwardRef","tabId","dataTestId","className","disableForceMount","ref","isTabContent","child","isValidElement","TabHeader","index","variant","negative","onFocus","fullWidth","tabsVariants","createTabChangeDetailEvent","scrollToTarget","target","tabList","targetRect","wrapperRect","wrapperWidth","wrapperOffset","offset","left","onChange","animateHeight","contentRef","useRef","height","setHeight","useState","scrollClasses","setScrollClasses","selectedTriggerOffset","setSelectedTriggerOffset","selectedTriggerWidth","setSelectedTriggerWidth","tabContentChildren","Children","tabChildren","sideScrollAdjustmentSize","isLineVariant","classNames","tabIds","getDefaultTabIndex","defaultIndex","tabIndex","useEffect","setActiveIndex","activeIndex","getTestId","name","id","handleLinePosition","activeTabElement","handleTabChange","_value","handleScrollButtonClick","side","scrollLeft","modifier","ScrollButton","Icon","chevronLeft","chevronRight","setNewHeight","newHeight","handleResize","root","updateScrollState","scrollWidth","clientWidth","canScroll","atStart","atEnd","Root","jsxs","el","childDataTestId"],"mappings":"+mBAAMA,GAAI,CACR,KAAM,eACN,IAAK,+QACL,SAAU,CAAC,cAAc,EACzB,SAAU,SACZ,ECLMA,GAAI,CACR,KAAM,gBACN,IAAK,kRACL,SAAU,CAAC,eAAe,EAC1B,SAAU,SACZ,ECSA,IAAIC,EAAY,OACZ,CAACC,EAAkC,EAAIC,GAAAA,mBAAmBF,EAAW,CACvEG,EAAAA,2BACF,CAAC,EACGC,EAA2BD,EAAAA,4BAA2B,EACtD,CAACE,GAAcC,CAAc,EAAIL,GAAkBD,CAAS,EAC5DO,EAAOC,EAAM,WACf,CAACC,EAAOC,IAAiB,CACvB,KAAM,CACJ,YAAAC,EACA,MAAOC,EACP,cAAAC,EACA,aAAAC,EACA,YAAAC,EAAc,aACd,IAAAC,EACA,eAAAC,EAAiB,YACjB,GAAGC,CACT,EAAQT,EACEU,EAAYC,GAAAA,aAAaJ,CAAG,EAC5B,CAACK,EAAOC,CAAQ,EAAIC,uBAAqB,CAC7C,KAAMX,EACN,SAAUC,EACV,YAAaC,GAAgB,GAC7B,OAAQd,CACd,CAAK,EACD,OAAuBwB,EAAAA,IACrBnB,GACA,CACE,MAAOM,EACP,OAAQc,GAAAA,MAAK,EACb,MAAAJ,EACA,cAAeC,EACf,YAAAP,EACA,IAAKI,EACL,eAAAF,EACA,SAA0BO,EAAAA,IACxBE,EAAAA,UAAU,IACV,CACE,IAAKP,EACL,mBAAoBJ,EACpB,GAAGG,EACH,IAAKR,CACjB,CACA,CACA,CACA,CACE,CACF,EACAH,EAAK,YAAcP,EACnB,IAAI2B,EAAgB,WAChBC,EAAWpB,EAAM,WACnB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,YAAAC,EAAa,KAAAkB,EAAO,GAAM,GAAGC,CAAS,EAAKrB,EAC7CsB,EAAUzB,EAAeqB,EAAehB,CAAW,EACnDqB,EAAwB5B,EAAyBO,CAAW,EAClE,OAAuBa,EAAAA,IACrBS,EAAAA,KACA,CACE,QAAS,GACT,GAAGD,EACH,YAAaD,EAAQ,YACrB,IAAKA,EAAQ,IACb,KAAAF,EACA,SAA0BL,EAAAA,IACxBE,EAAAA,UAAU,IACV,CACE,KAAM,UACN,mBAAoBK,EAAQ,YAC5B,GAAGD,EACH,IAAKpB,CACjB,CACA,CACA,CACA,CACE,CACF,EACAkB,EAAS,YAAcD,EACvB,IAAIO,EAAe,cACfC,EAAc3B,EAAM,WACtB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,YAAAC,EAAa,MAAAU,EAAO,SAAAe,EAAW,GAAO,GAAGC,CAAY,EAAK5B,EAC5DsB,EAAUzB,EAAe4B,EAAcvB,CAAW,EAClDqB,EAAwB5B,EAAyBO,CAAW,EAC5D2B,EAAYC,EAAcR,EAAQ,OAAQV,CAAK,EAC/CmB,EAAYC,EAAcV,EAAQ,OAAQV,CAAK,EAC/CqB,EAAarB,IAAUU,EAAQ,MACrC,OAAuBP,EAAAA,IACrBmB,EAAAA,KACA,CACE,QAAS,GACT,GAAGX,EACH,UAAW,CAACI,EACZ,OAAQM,EACR,SAA0BlB,EAAAA,IACxBE,EAAAA,UAAU,OACV,CACE,KAAM,SACN,KAAM,MACN,gBAAiBgB,EACjB,gBAAiBF,EACjB,aAAcE,EAAa,SAAW,WACtC,gBAAiBN,EAAW,GAAK,OACjC,SAAAA,EACA,GAAIE,EACJ,GAAGD,EACH,IAAK3B,EACL,YAAakC,EAAAA,qBAAqBnC,EAAM,YAAcoC,GAAU,CAC1D,CAACT,GAAYS,EAAM,SAAW,GAAKA,EAAM,UAAY,GACvDd,EAAQ,cAAcV,CAAK,EAE3BwB,EAAM,eAAc,CAExB,CAAC,EACD,UAAWD,EAAAA,qBAAqBnC,EAAM,UAAYoC,GAAU,CACtD,CAAC,IAAK,OAAO,EAAE,SAASA,EAAM,GAAG,GAAGd,EAAQ,cAAcV,CAAK,CACrE,CAAC,EACD,QAASuB,EAAAA,qBAAqBnC,EAAM,QAAS,IAAM,CACjD,MAAMqC,EAAwBf,EAAQ,iBAAmB,SACrD,CAACW,GAAc,CAACN,GAAYU,GAC9Bf,EAAQ,cAAcV,CAAK,CAE/B,CAAC,CACb,CACA,CACA,CACA,CACE,CACF,EACAc,EAAY,YAAcD,EAC1B,IAAIa,EAAe,cACfC,EAAcxC,EAAM,WACtB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,YAAAC,EAAa,MAAAU,EAAO,WAAA4B,EAAY,SAAAC,EAAU,GAAGC,CAAY,EAAK1C,EAChEsB,EAAUzB,EAAeyC,EAAcpC,CAAW,EAClD2B,EAAYC,EAAcR,EAAQ,OAAQV,CAAK,EAC/CmB,EAAYC,EAAcV,EAAQ,OAAQV,CAAK,EAC/CqB,EAAarB,IAAUU,EAAQ,MAC/BqB,EAA+B5C,EAAM,OAAOkC,CAAU,EAC5DlC,OAAAA,EAAM,UAAU,IAAM,CACpB,MAAM6C,EAAM,sBAAsB,IAAMD,EAA6B,QAAU,EAAK,EACpF,MAAO,IAAM,qBAAqBC,CAAG,CACvC,EAAG,CAAA,CAAE,EACkB7B,EAAAA,IAAI8B,YAAU,CAAE,QAASL,GAAcP,EAAY,SAAU,CAAC,CAAE,QAAAa,CAAO,IAAuB/B,EAAAA,IACnHE,EAAAA,UAAU,IACV,CACE,aAAcgB,EAAa,SAAW,WACtC,mBAAoBX,EAAQ,YAC5B,KAAM,WACN,kBAAmBO,EACnB,OAAQ,CAACiB,EACT,GAAIf,EACJ,SAAU,EACV,GAAGW,EACH,IAAKzC,EACL,MAAO,CACL,GAAGD,EAAM,MACT,kBAAmB2C,EAA6B,QAAU,KAAO,MAC3E,EACQ,SAAUG,GAAWL,CAC7B,CACA,EAAO,CACL,CACF,EACAF,EAAY,YAAcD,EAC1B,SAASR,EAAciB,EAAQnC,EAAO,CACpC,MAAO,GAAGmC,CAAM,YAAYnC,CAAK,EACnC,CACA,SAASoB,EAAce,EAAQnC,EAAO,CACpC,MAAO,GAAGmC,CAAM,YAAYnC,CAAK,EACnC,CACA,IAAIoC,GAAQlD,EACRmD,GAAO9B,EACP+B,GAAUxB,EACVyB,GAAUZ,8IClKRa,GAAKC,EAAAA,EAAE,KAAKC,EAAM,EAClBC,EAAgB,qBAETC,GAAaC,EAAAA,WACxB,CAAC,CAAE,SAAAhB,EAAU,MAAAiB,EAAO,cAAeC,EAAY,UAAAC,EAAW,kBAAAC,EAAmB,GAAG7D,GAAS8D,IACvF/C,EAAAA,IAACoC,GAAA,CACC,IAAAW,EACA,UAAWV,GAAGG,EAAeK,EAAW,CACtC,CAAC,GAAGL,CAAa,eAAe,EAAG,CAACM,CAAA,CACrC,EACD,cAAaF,EACb,MAAOD,EACP,WAAY,CAACG,GAAqB,OACjC,GAAG7D,EAEH,SAAAyC,CAAA,CAAA,CAGP,EAEasB,GAAgBC,GAC3B,CAAC,CAACA,GAASC,EAAAA,eAAgCD,CAAK,GAAK,CAAC,CAACA,EAAM,MAAM,MAAQ,CAAC,CAACA,EAAM,MAAM,ubCvBrFZ,GAAKC,EAAAA,EAAE,KAAKC,EAAM,EAClBC,EAAgB,oBAETW,GAAYT,EAAAA,WACvB,CACE,CACE,MAAAU,EACA,MAAAT,EACA,QAAAU,EACA,SAAAC,EACA,QAAAC,EACA,UAAAC,EACA,cAAeZ,EACf,SAAAlB,CAAA,EAEFqB,IAEA/C,EAAAA,IAACmC,GAAA,CACC,GAAI,GAAGQ,CAAK,WACZ,UAAWN,GAAGG,EAAe,GAAGA,CAAa,KAAKa,CAAO,GAAGC,EAAW,YAAc,EAAE,GAAI,CACzF,CAAC,GAAGd,CAAa,cAAc,EAAGgB,CAAA,CACnC,EACD,MAAOb,EACP,cAAaC,EACb,aAAYQ,EACZ,IAAAL,EACA,QAAAQ,EAEC,SAAA7B,CAAA,CAAA,CAGP,yhCC9Ca+B,GAAe,CAAC,OAAQ,WAAW,EAInCC,EAA8B7D,GACzC,IAAI,YAA6B,kBAAmB,CAAE,OAAQ,CAAE,MAAAA,EAAM,CAAG,ECgCrEwC,EAAKC,EAAAA,EAAE,KAAKC,EAAM,EAClBC,EAAgB,cAEhBmB,GAAiB,CAACC,EAAqBC,IAAoC,CAM/E,GACE,OAAOD,GAAQ,uBAA0B,YACzC,OAAOC,GAAS,QAAW,WAE3B,OAGF,MAAMC,EAAaF,EAAO,sBAAA,EACpBG,EAAcF,EAAQ,sBAAA,EACtBG,EAAeH,EAAQ,YACvBI,EAAgB,SAAS,iBAAiBJ,CAAO,EAAE,iBAAiB,MAAM,IAAI,EAAE,CAAC,EAAG,EAAE,EACtFK,EAASH,EAAY,MAAQ,MAAME,CAAa,EAAI,EAAIA,GAC9D,IAAIE,EAGAL,EAAW,MAAQC,EAAY,QACjCI,EAAOL,EAAW,KAAOD,EAAQ,WACjCM,EAAOA,EAAOL,EAAW,MAAQE,EAAeA,EAAe,GAC/DG,EAAOA,EAAOD,GAIZJ,EAAW,KAAOC,EAAY,OAChCI,EAAOL,EAAW,KAAOD,EAAQ,WACjCM,EAAOA,EAAOH,EAAe,GAC7BG,EAAOA,EAAOD,GAGZC,IAAS,QACXN,EAAQ,OAAO,CAAE,KAAAM,EAAM,SAAU,SAAU,CAE/C,EAEapF,GAA2B,CAAC,CACvC,SAAA2C,EACA,QAAA2B,EAAU,OACV,SAAAC,EAAW,GACX,UAAAE,EAAY,GACZ,SAAAY,EACA,UAAAvB,EACA,aAAAvD,EACA,cAAA+E,EAAgB,GAChB,cAAezB,EACf,MAAA/C,EACA,GAAGZ,CACL,IAAM,CACJ,MAAMqF,EAAaC,EAAAA,OAA8B,IAAI,EAC/C,CAACC,EAAQC,EAAS,EAAIC,EAAAA,SAAS,EAAE,EACjC,CAACC,GAAeC,CAAgB,EAAIF,EAAAA,SAAqC,CAAA,CAAE,EAC3E,CAACG,GAAuBC,EAAwB,EAAIJ,EAAAA,SAAS,CAAC,EAC9D,CAACK,GAAsBC,EAAuB,EAAIN,EAAAA,SAAS,CAAC,EAC5DO,EAAqBC,EAAAA,SAAS,QAAQxD,CAAQ,EAAE,OAAOsB,EAAY,EACnEa,EAAUU,EAAAA,OAAuB,IAAI,EACrCY,EAAcZ,EAAAA,OAA4B,IAAI,MAAMU,EAAmB,MAAM,CAAC,EAC9EG,EAA2B,IAC3BC,EAAgBhC,IAAY,OAE5BiC,GAAajD,EACjBG,EACA,GAAGA,CAAa,KAAKa,CAAO,GAAGC,EAAW,YAAc,EAAE,GAC1D,CAAE,CAAC,GAAGd,CAAa,cAAc,EAAGgB,CAAA,EACpCX,CAAA,EAGI0C,EAASL,WAAS,IAAID,EAAoB,CAAC,CAAE,MAAO,CAAE,MAAAtC,EAAM,IAAQA,CAAK,EAEzE6C,GAAqB,IAAM,CAC/B,MAAMC,EAAeF,EAAO,UAAWG,GAAaA,IAAapG,CAAY,EAC7E,OAAOmG,GAAgB,EAAIA,EAAe,CAC5C,EAEAE,EAAAA,UAAU,IAAM,CACV9F,GACF+F,EAAeX,EAAmB,UAAWhC,GAAUA,EAAM,MAAM,QAAUpD,CAAK,CAAC,CAEvF,EAAG,CAACoF,EAAoBpF,CAAK,CAAC,EAE9B,KAAM,CAACgG,EAAaD,CAAc,EAAIlB,EAAAA,SAASc,EAAkB,EAEjE,GAAI,IAAI,IAAID,CAAM,EAAE,OAASA,EAAO,OAClC,MAAM,IAAI,MAAM,sBAAsB,EAGxC,MAAMO,EAAY,CAACC,EAAcC,IAC/BA,GAAMpD,EAAa,GAAGoD,GAAMpD,CAAU,IAAImD,CAAI,GAAK,OAE/CE,EAAqB,IAAM,CAC/B,GAAI,CAACZ,EACH,OAGF,MAAMa,EAAmBf,EAAY,QAAQU,CAAW,EAExDf,GAAyBoB,GAAkB,YAAc,CAAC,EAC1DlB,GAAwBkB,GAAkB,wBAAwB,OAAS,CAAC,CAC9E,EAEMC,GAAmBC,GAAmB,CACtCf,GAAiB,CAACxF,GACpB+F,EAAeX,EAAmB,UAAWhC,GAAUA,EAAM,MAAM,QAAUmD,CAAM,CAAC,EAEtFhC,IAAWV,EAA2B0C,CAAM,CAAC,CAC/C,EAEMC,GAA2BC,GAA2B,CAC1D,GAAIzC,GAAS,QAAS,CACpB,KAAM,CAAE,WAAA0C,GAAe1C,EAAQ,QACzB2C,EAAWF,IAAS,OAAS,CAAClB,EAA2BA,EAE/DvB,EAAQ,QAAQ,OAAO,CAAE,KAAM0C,EAAaC,EAAU,SAAU,SAAU,CAC5E,CACF,EAEMC,EAAe,CAAC,CAAE,KAAAH,CAAA,IACtBtG,EAAAA,IAAC,SAAA,CACC,UAAWqC,EAAG,GAAGG,CAAa,kBAAmB,GAAGA,CAAa,oBAAoB8D,CAAI,EAAE,EAC3F,QAAS,IAAMD,GAAwBC,CAAI,EAC3C,KAAK,SACL,cAAY,OACZ,SAAU,GACV,cAAaR,EAAU,eAAe,EAEtC,SAAA9F,EAAAA,IAAC0G,MAAK,IAAKJ,IAAS,OAASK,GAAcC,GAAc,KAAK,IAAA,CAAK,CAAA,CAAA,EAIvEjB,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMkB,EAAe,IAAM,CACzB,GAAIvC,EAAW,SAAWD,EAAe,CACvC,MAAMyC,EAAYxC,EAAW,QAAQ,aACrCG,GAAUqC,CAAS,CACrB,CACF,EAEMC,EAAe,IAAM,CACzBF,EAAA,EACAZ,EAAA,CACF,EAEA,OAAAY,EAAA,EAEA,OAAO,iBAAiB,SAAUE,CAAY,EAEvC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAY,CACnD,CACF,EAAG,CAAClB,EAAaxB,CAAa,CAAC,EAE/BsB,EAAAA,UAAU,IAAM,CACdM,EAAA,CACF,EAAG,CAACJ,EAAarC,EAAWyB,EAAmB,OAAQ5B,CAAO,CAAC,EAE/DsC,EAAAA,UAAU,IAAM,CACd,MAAMqB,EAAOnD,EAAQ,QACrB,GAAI,CAACmD,EAAM,OAEX,MAAMC,EAAoB,IAAM,CAC9B,KAAM,CAAE,WAAAV,EAAY,YAAAW,EAAa,YAAAC,CAAA,EAAgBH,EAE3CI,EAAYF,EAAcC,EAC1BE,GAAUd,GAAc,EACxBe,GAAQf,EAAaY,GAAeD,EAAc,EAExD,GAAI,CAACE,EAAW,CACdxC,EAAiB,CAAA,CAAE,EACnB,MACF,CAEAA,EAAiB,CACf,CAAC,GAAGpC,CAAa,yBAAyB,EAAG,CAAC6E,GAC9C,CAAC,GAAG7E,CAAa,uBAAuB,EAAG,CAAC8E,EAAA,CAC7C,CACH,EAEA,OAAAL,EAAA,EAEAD,EAAK,iBAAiB,SAAUC,EAAmB,CAAE,QAAS,GAAM,EACpE,OAAO,iBAAiB,SAAUA,CAAiB,EAE5C,IAAM,CACXD,EAAK,oBAAoB,SAAUC,CAAiB,EACpD,OAAO,oBAAoB,SAAUA,CAAiB,CACxD,CACF,EAAG,CAAA,CAAE,EAGHjH,EAAAA,IAACuH,GAAA,CACC,aAAcjI,GAAgB2F,EAAmB,CAAC,EAAE,MAAM,MAC1D,cAAekB,GACf,cAAavD,EACb,UAAW0C,GACX,MAAAzF,EACC,GAAGZ,EAEJ,gBAAC,MAAA,CAAI,UAAWoD,EAAG,GAAGG,CAAa,aAAa,EAC9C,SAAA,CAAAgF,EAAAA,KAAC,OAAI,UAAWnF,EAAG,GAAGG,CAAa,YAAamC,EAAa,EAC3D,SAAA,CAAA6C,EAAAA,KAACtF,GAAA,CACC,IAAMuF,GAAO,CACX5D,EAAQ,QAAU4D,CACpB,EACA,UAAWpF,EAAG,GAAGG,CAAa,QAAQ,EAErC,SAAA,CAAA0C,EAAAA,SAAS,IAAID,EAAoB,CAAChC,EAAOG,IAAU,CAClD,KAAM,CAAE,KAAA2C,EAAM,MAAApD,EAAO,cAAe+E,CAAA,EAAoBzE,EAAM,MAC9D,OACEjD,EAAAA,IAACmD,GAAA,CACC,cAAa2C,EAAU,SAAU4B,CAAe,EAChD,MAAAtE,EACA,MAAAT,EACA,IAAM8E,GAAO,CACPA,IACFtC,EAAY,QAAQ/B,CAAK,EAAIqE,EAEjC,EACA,QAAUlJ,GAAM,CACdoF,GAAepF,EAAE,OAAuBsF,EAAQ,OAAO,CACzD,EACA,QAAAR,EACA,SAAAC,EACA,UAAAE,EAEC,SAAAuC,CAAA,CAAA,CAGP,CAAC,EACAV,GACCrF,EAAAA,IAAC,MAAA,CACC,UAAWqC,EAAG,GAAGG,CAAa,mBAAmB,EACjD,MAAO,CACL,MAAOuC,GACP,UAAW,cAAcF,EAAqB,KAAA,EAEhD,cAAaiB,EAAU,iBAAiB,CAAA,CAAA,CAC1C,CAAA,CAAA,EAGJ9F,EAAAA,IAACyG,EAAA,CAAa,KAAK,MAAA,CAAO,EAC1BzG,EAAAA,IAACyG,EAAA,CAAa,KAAK,OAAA,CAAQ,CAAA,EAC7B,EACAzG,EAAAA,IAAC,MAAA,CACC,UAAWqE,EAAgBhC,EAAG,GAAGG,CAAa,mBAAmB,EAAI,GACrE,MAAO,CAAE,OAAQ6B,GAAiBG,EAAS,GAAK,GAAGA,CAAM,KAAO,MAAA,EAEhE,eAAC,MAAA,CAAI,IAAKF,EAAY,UAAWjC,EAAG,GAAGG,CAAa,qBAAqB,EACtE,oBAAS,IAAIyC,EAAqBhC,GAAUA,CAAK,CAAA,CACpD,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAGN,EAEAlE,GAAK,QAAU0D","x_google_ignoreList":[2]}
|
|
1
|
+
{"version":3,"file":"tabs-CfHd4UQ2.js","sources":["../../../components/icon/dist/assets/chevron-left.es.js","../../../components/icon/dist/assets/chevron-right.es.js","../../../common/temp/node_modules/.pnpm/@radix-ui+react-tabs@1.1.13_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_2ad0945e3cb98dc5bbfaaf29c105e977/node_modules/@radix-ui/react-tabs/dist/index.mjs","../../../components/tabs/src/tab-content.tsx","../../../components/tabs/src/tab-header.tsx","../../../components/tabs/src/tabs.utils.ts","../../../components/tabs/src/tabs.tsx"],"sourcesContent":["const e = {\n name: \"chevron-left\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M16.175 3.905a.9.9 0 0 1-.08 1.27L8.36 12l7.736 6.825a.9.9 0 0 1-1.191 1.35l-8.5-7.5a.9.9 0 0 1 0-1.35l8.5-7.5a.9.9 0 0 1 1.27.08Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"chevron-left\"],\n category: \"utility\"\n};\nexport {\n e as chevronLeft\n};\n//# sourceMappingURL=chevron-left.es.js.map\n","const e = {\n name: \"chevron-right\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M7.809 3.924a.9.9 0 0 0 .115 1.267L16.094 12l-8.17 6.809a.9.9 0 0 0 1.152 1.382l9-7.5a.9.9 0 0 0 0-1.382l-9-7.5a.9.9 0 0 0-1.267.115Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"chevron-right\"],\n category: \"utility\"\n};\nexport {\n e as chevronRight\n};\n//# sourceMappingURL=chevron-right.es.js.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Content } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./tab-content.module.scss\";\n\nexport type TabContentProps = Omit<BaseProps, \"children\"> & {\n /**\n * Content to be rendered inside a `button` element.\n * Only pass ReactNodes that are valid as children of a `button`, such as plain text,\n * inline elements like `span` or other non-interactive elements. Avoid block-level or interactive elements.\n */\n name: ReactNode;\n /**\n * A unique ID that associates the tab with a content.\n * */\n tabId: string;\n /**\n * If true, the inactive tab content will not be rendered.\n */\n disableForceMount?: boolean;\n children: ReactNode;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tab-content\";\n\nexport const TabContent = forwardRef<HTMLDivElement, TabContentProps>(\n ({ children, tabId, \"data-testid\": dataTestId, className, disableForceMount, ...props }, ref) => (\n <Content\n ref={ref}\n className={cx(rootClassName, className, {\n [`${rootClassName}--force-mount`]: !disableForceMount,\n })}\n data-testid={dataTestId}\n value={tabId}\n forceMount={!disableForceMount || undefined}\n {...props}\n >\n {children}\n </Content>\n )\n);\n\nexport const isTabContent = (child?: ReactNode): child is ReactElement<TabContentProps> =>\n !!child && isValidElement<TabContentProps>(child) && !!child.props.name && !!child.props.tabId;\n","import React, {\n type FocusEventHandler,\n type ForwardedRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport { Trigger } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./tab-header.module.scss\";\nimport { type TabsVariant } from \"./tabs.utils\";\n\ntype TabHeaderProps = {\n \"data-testid\"?: string;\n index: number;\n tabId: string;\n variant: TabsVariant;\n negative?: boolean;\n onFocus: FocusEventHandler<HTMLButtonElement>;\n fullWidth?: boolean;\n children: ReactNode;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tab-header\";\n\nexport const TabHeader = forwardRef(\n <T extends HTMLButtonElement>(\n {\n index,\n tabId,\n variant,\n negative,\n onFocus,\n fullWidth,\n \"data-testid\": dataTestId,\n children,\n }: TabHeaderProps,\n ref: ForwardedRef<T>\n ) => (\n <Trigger\n id={`${tabId}-trigger`}\n className={cx(rootClassName, `${rootClassName}--${variant}${negative ? \"-negative\" : \"\"}`, {\n [`${rootClassName}--full-width`]: fullWidth,\n })}\n value={tabId}\n data-testid={dataTestId}\n data-index={index}\n ref={ref}\n onFocus={onFocus}\n >\n {children}\n </Trigger>\n )\n);\n","import type { FunctionComponent } from \"react\";\n\nimport type { TabContent } from \"./tab-content\";\n\nexport type TabsCmp<P> = FunctionComponent<P> & {\n Content: typeof TabContent;\n};\n\nexport const tabsVariants = [\"line\", \"contained\"] as const;\n\nexport type TabsVariant = (typeof tabsVariants)[number];\n\nexport const createTabChangeDetailEvent = (value: string) =>\n new CustomEvent<TabChangeDetail>(\"tabChangeDetail\", { detail: { value } });\n\nexport type TabChangeDetail = { value: string };\n","import React, {\n Children,\n type HTMLAttributes,\n type ReactElement,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Icon } from \"@purpur/icon\";\nimport { chevronLeft } from \"@purpur/icon/assets/chevron-left\";\nimport { chevronRight } from \"@purpur/icon/assets/chevron-right\";\nimport { List, Root } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport { isTabContent, TabContent } from \"./tab-content\";\nimport { TabHeader } from \"./tab-header\";\nimport styles from \"./tabs.module.scss\";\nimport {\n createTabChangeDetailEvent,\n type TabChangeDetail,\n type TabsCmp,\n type TabsVariant,\n} from \"./tabs.utils\";\n\ntype TabsProps = {\n children: Array<ReactElement<typeof TabContent>> | ReactElement<typeof TabContent>;\n variant?: TabsVariant;\n negative?: boolean;\n fullWidth?: boolean;\n /**\n * The controlled value of the tabs. Must be used in conjunction with onChange.\n */\n value?: string;\n /**\n * Event handler called when the value changes.\n * */\n onChange?: (event: CustomEvent<TabChangeDetail>) => void;\n defaultValue?: string;\n /**\n * When true, animates the height of the component when switching tabs.\n * */\n animateHeight?: boolean;\n \"data-testid\"?: string;\n} & Pick<HTMLAttributes<HTMLDivElement>, \"style\" | \"className\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tabs\";\n\nconst scrollToTarget = (target: HTMLElement, tabList?: HTMLDivElement | null) => {\n /**\n * scroll may not be available in test runner, so check existence before\n * proceeding. We can't use scrollIntoView() because Safari doesn't support\n * it fully.\n */\n if (\n typeof target?.getBoundingClientRect !== \"function\" ||\n typeof tabList?.scroll !== \"function\"\n ) {\n return;\n }\n\n const targetRect = target.getBoundingClientRect();\n const wrapperRect = tabList.getBoundingClientRect();\n const wrapperWidth = tabList.clientWidth;\n const wrapperOffset = parseInt(getComputedStyle(tabList).borderLeftWidth?.split(\"px\")[0], 10);\n const offset = wrapperRect.left + (isNaN(wrapperOffset) ? 0 : wrapperOffset);\n let left;\n\n // Handle forward navigation\n if (targetRect.right > wrapperRect.right) {\n left = targetRect.left + tabList.scrollLeft;\n left = left + targetRect.width - wrapperWidth + wrapperWidth * 0.1;\n left = left - offset;\n }\n\n // Handle backwards navigation\n if (targetRect.left < wrapperRect.left) {\n left = targetRect.left + tabList.scrollLeft;\n left = left - wrapperWidth * 0.1;\n left = left - offset;\n }\n\n if (left !== undefined) {\n tabList.scroll({ left, behavior: \"smooth\" });\n }\n};\n\nexport const Tabs: TabsCmp<TabsProps> = ({\n children,\n variant = \"line\",\n negative = false,\n fullWidth = false,\n onChange,\n className,\n defaultValue,\n animateHeight = false,\n \"data-testid\": dataTestId,\n value,\n ...props\n}) => {\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [height, setHeight] = useState(-1);\n const [scrollClasses, setScrollClasses] = useState<{ [key: string]: boolean }>({});\n const [selectedTriggerOffset, setSelectedTriggerOffset] = useState(0);\n const [selectedTriggerWidth, setSelectedTriggerWidth] = useState(0);\n const tabContentChildren = Children.toArray(children).filter(isTabContent);\n const tabList = useRef<HTMLDivElement>(null);\n const tabChildren = useRef<HTMLButtonElement[]>(new Array(tabContentChildren.length));\n const sideScrollAdjustmentSize = 200;\n const isLineVariant = variant === \"line\";\n\n const classNames = cx(\n rootClassName,\n `${rootClassName}--${variant}${negative ? \"-negative\" : \"\"}`,\n { [`${rootClassName}--full-width`]: fullWidth },\n className\n );\n\n const tabIds = Children.map(tabContentChildren, ({ props: { tabId } }) => tabId);\n\n const getDefaultTabIndex = () => {\n const defaultIndex = tabIds.findIndex((tabIndex) => tabIndex === defaultValue);\n return defaultIndex >= 0 ? defaultIndex : 0;\n };\n\n useEffect(() => {\n if (value) {\n setActiveIndex(tabContentChildren.findIndex((child) => child.props.tabId === value));\n }\n }, [tabContentChildren, value]);\n\n const [activeIndex, setActiveIndex] = useState(getDefaultTabIndex);\n\n if (new Set(tabIds).size !== tabIds.length) {\n throw new Error(\"tabId must be unique\");\n }\n\n const getTestId = (name: string, id?: string) =>\n id || dataTestId ? `${id || dataTestId}-${name}` : undefined;\n\n const handleLinePosition = () => {\n if (!isLineVariant) {\n return;\n }\n\n const activeTabElement = tabChildren.current[activeIndex];\n\n setSelectedTriggerOffset(activeTabElement?.offsetLeft || 0);\n setSelectedTriggerWidth(activeTabElement?.getBoundingClientRect().width || 0);\n };\n\n const handleTabChange = (_value: string) => {\n if (isLineVariant && !value) {\n setActiveIndex(tabContentChildren.findIndex((child) => child.props.tabId === _value));\n }\n onChange?.(createTabChangeDetailEvent(_value));\n };\n\n const handleScrollButtonClick = (side: \"left\" | \"right\") => {\n if (tabList?.current) {\n const { scrollLeft } = tabList.current;\n const modifier = side === \"left\" ? -sideScrollAdjustmentSize : sideScrollAdjustmentSize;\n\n tabList.current.scroll({ left: scrollLeft + modifier, behavior: \"smooth\" });\n }\n };\n\n const ScrollButton = ({ side }: { side: \"left\" | \"right\" }) => (\n <button\n className={cx(`${rootClassName}__scroll-button`, `${rootClassName}__scroll-button--${side}`)}\n onClick={() => handleScrollButtonClick(side)}\n type=\"button\"\n aria-hidden=\"true\"\n tabIndex={-1}\n data-testid={getTestId(\"scroll-button\")}\n >\n <Icon svg={side === \"left\" ? chevronLeft : chevronRight} size=\"md\" />\n </button>\n );\n\n useEffect(() => {\n const setNewHeight = () => {\n if (contentRef.current && animateHeight) {\n const newHeight = contentRef.current.offsetHeight;\n setHeight(newHeight);\n }\n };\n\n const handleResize = () => {\n setNewHeight();\n handleLinePosition();\n };\n\n setNewHeight();\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [activeIndex, animateHeight]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n handleLinePosition();\n }, [activeIndex, fullWidth, tabContentChildren.length, variant]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const root = tabList.current;\n if (!root) return;\n\n const updateScrollState = () => {\n const { scrollLeft, scrollWidth, clientWidth } = root;\n\n const canScroll = scrollWidth > clientWidth;\n const atStart = scrollLeft <= 1;\n const atEnd = scrollLeft + clientWidth >= scrollWidth - 1;\n\n if (!canScroll) {\n setScrollClasses({});\n return;\n }\n\n setScrollClasses({\n [`${rootClassName}__wrapper--scroll-start`]: !atStart,\n [`${rootClassName}__wrapper--scroll-end`]: !atEnd,\n });\n };\n\n updateScrollState();\n\n root.addEventListener(\"scroll\", updateScrollState, { passive: true });\n window.addEventListener(\"resize\", updateScrollState);\n\n return () => {\n root.removeEventListener(\"scroll\", updateScrollState);\n window.removeEventListener(\"resize\", updateScrollState);\n };\n }, []);\n\n return (\n <Root\n defaultValue={defaultValue ?? tabContentChildren[0].props.tabId}\n onValueChange={handleTabChange}\n data-testid={dataTestId}\n className={classNames}\n value={value}\n {...props}\n >\n <div className={cx(`${rootClassName}__container`)}>\n <div className={cx(`${rootClassName}__wrapper`, scrollClasses)}>\n <List\n ref={(el) => {\n tabList.current = el;\n }}\n className={cx(`${rootClassName}__list`)}\n >\n {Children.map(tabContentChildren, (child, index) => {\n const { name, tabId, \"data-testid\": childDataTestId } = child.props;\n return (\n <TabHeader\n data-testid={getTestId(\"header\", childDataTestId)}\n index={index}\n tabId={tabId}\n ref={(el) => {\n if (el) {\n tabChildren.current[index] = el;\n }\n }}\n onFocus={(e) => {\n scrollToTarget(e.target as HTMLElement, tabList.current);\n }}\n variant={variant}\n negative={negative}\n fullWidth={fullWidth}\n >\n {name}\n </TabHeader>\n );\n })}\n {isLineVariant && (\n <div\n className={cx(`${rootClassName}__selected-border`)}\n style={{\n width: selectedTriggerWidth,\n transform: `translateX(${selectedTriggerOffset}px)`,\n }}\n data-testid={getTestId(\"selected-border\")}\n />\n )}\n </List>\n <ScrollButton side=\"left\" />\n <ScrollButton side=\"right\" />\n </div>\n <div\n className={animateHeight ? cx(`${rootClassName}__content-wrapper`) : \"\"}\n style={{ height: animateHeight && height > -1 ? `${height}px` : \"auto\" }}\n >\n <div ref={contentRef} className={cx(`${rootClassName}__content-container`)}>\n {Children.map(tabContentChildren, (child) => child)}\n </div>\n </div>\n </div>\n </Root>\n );\n};\n\nTabs.Content = TabContent;\n\nexport * from \"./tabs.utils\";\n"],"names":["e","TABS_NAME","createTabsContext","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","React","props","forwardedRef","__scopeTabs","valueProp","onValueChange","defaultValue","orientation","dir","activationMode","tabsProps","direction","useDirection","value","setValue","useControllableState","jsx","useId","Primitive","TAB_LIST_NAME","TabsList","loop","listProps","context","rovingFocusGroupScope","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","disabled","triggerProps","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","composeEventHandlers","event","isAutomaticActivation","CONTENT_NAME","TabsContent","forceMount","children","contentProps","isMountAnimationPreventedRef","rAF","Presence","present","baseId","Root2","List","Trigger","Content","cx","c","styles","rootClassName","TabContent","forwardRef","tabId","dataTestId","className","disableForceMount","ref","isTabContent","child","isValidElement","TabHeader","index","variant","negative","onFocus","fullWidth","tabsVariants","createTabChangeDetailEvent","scrollToTarget","target","tabList","targetRect","wrapperRect","wrapperWidth","wrapperOffset","offset","left","onChange","animateHeight","contentRef","useRef","height","setHeight","useState","scrollClasses","setScrollClasses","selectedTriggerOffset","setSelectedTriggerOffset","selectedTriggerWidth","setSelectedTriggerWidth","tabContentChildren","Children","tabChildren","sideScrollAdjustmentSize","isLineVariant","classNames","tabIds","getDefaultTabIndex","defaultIndex","tabIndex","useEffect","setActiveIndex","activeIndex","getTestId","name","id","handleLinePosition","activeTabElement","handleTabChange","_value","handleScrollButtonClick","side","scrollLeft","modifier","ScrollButton","Icon","chevronLeft","chevronRight","setNewHeight","newHeight","handleResize","root","updateScrollState","scrollWidth","clientWidth","canScroll","atStart","atEnd","Root","jsxs","el","childDataTestId"],"mappings":"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","x_google_ignoreList":[2]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs-CoXMAwMx.mjs","sources":["../../../components/icon/dist/assets/chevron-left.es.js","../../../components/icon/dist/assets/chevron-right.es.js","../../../common/temp/node_modules/.pnpm/@radix-ui+react-tabs@1.1.13_@types+react-dom@19.2.3_@types+react@19.2.10__@types+react@_68a385a9eea120600bb372a91de22b00/node_modules/@radix-ui/react-tabs/dist/index.mjs","../../../components/tabs/src/tab-content.tsx","../../../components/tabs/src/tab-header.tsx","../../../components/tabs/src/tabs.utils.ts","../../../components/tabs/src/tabs.tsx"],"sourcesContent":["const e = {\n name: \"chevron-left\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M16.175 3.905a.9.9 0 0 1-.08 1.27L8.36 12l7.736 6.825a.9.9 0 0 1-1.191 1.35l-8.5-7.5a.9.9 0 0 1 0-1.35l8.5-7.5a.9.9 0 0 1 1.27.08Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"chevron-left\"],\n category: \"utility\"\n};\nexport {\n e as chevronLeft\n};\n//# sourceMappingURL=chevron-left.es.js.map\n","const e = {\n name: \"chevron-right\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M7.809 3.924a.9.9 0 0 0 .115 1.267L16.094 12l-8.17 6.809a.9.9 0 0 0 1.152 1.382l9-7.5a.9.9 0 0 0 0-1.382l-9-7.5a.9.9 0 0 0-1.267.115Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"chevron-right\"],\n category: \"utility\"\n};\nexport {\n e as chevronRight\n};\n//# sourceMappingURL=chevron-right.es.js.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Content } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./tab-content.module.scss\";\n\nexport type TabContentProps = Omit<BaseProps, \"children\"> & {\n /**\n * Content to be rendered inside a `button` element.\n * Only pass ReactNodes that are valid as children of a `button`, such as plain text,\n * inline elements like `span` or other non-interactive elements. Avoid block-level or interactive elements.\n */\n name: ReactNode;\n /**\n * A unique ID that associates the tab with a content.\n * */\n tabId: string;\n /**\n * If true, the inactive tab content will not be rendered.\n */\n disableForceMount?: boolean;\n children: ReactNode;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tab-content\";\n\nexport const TabContent = forwardRef<HTMLDivElement, TabContentProps>(\n ({ children, tabId, \"data-testid\": dataTestId, className, disableForceMount, ...props }, ref) => (\n <Content\n ref={ref}\n className={cx(rootClassName, className, {\n [`${rootClassName}--force-mount`]: !disableForceMount,\n })}\n data-testid={dataTestId}\n value={tabId}\n forceMount={!disableForceMount || undefined}\n {...props}\n >\n {children}\n </Content>\n )\n);\n\nexport const isTabContent = (child?: ReactNode): child is ReactElement<TabContentProps> =>\n !!child && isValidElement<TabContentProps>(child) && !!child.props.name && !!child.props.tabId;\n","import React, {\n type FocusEventHandler,\n type ForwardedRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport { Trigger } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./tab-header.module.scss\";\nimport { type TabsVariant } from \"./tabs.utils\";\n\ntype TabHeaderProps = {\n \"data-testid\"?: string;\n index: number;\n tabId: string;\n variant: TabsVariant;\n negative?: boolean;\n onFocus: FocusEventHandler<HTMLButtonElement>;\n fullWidth?: boolean;\n children: ReactNode;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tab-header\";\n\nexport const TabHeader = forwardRef(\n <T extends HTMLButtonElement>(\n {\n index,\n tabId,\n variant,\n negative,\n onFocus,\n fullWidth,\n \"data-testid\": dataTestId,\n children,\n }: TabHeaderProps,\n ref: ForwardedRef<T>\n ) => (\n <Trigger\n id={`${tabId}-trigger`}\n className={cx(rootClassName, `${rootClassName}--${variant}${negative ? \"-negative\" : \"\"}`, {\n [`${rootClassName}--full-width`]: fullWidth,\n })}\n value={tabId}\n data-testid={dataTestId}\n data-index={index}\n ref={ref}\n onFocus={onFocus}\n >\n {children}\n </Trigger>\n )\n);\n","import type { FunctionComponent } from \"react\";\n\nimport type { TabContent } from \"./tab-content\";\n\nexport type TabsCmp<P> = FunctionComponent<P> & {\n Content: typeof TabContent;\n};\n\nexport const tabsVariants = [\"line\", \"contained\"] as const;\n\nexport type TabsVariant = (typeof tabsVariants)[number];\n\nexport const createTabChangeDetailEvent = (value: string) =>\n new CustomEvent<TabChangeDetail>(\"tabChangeDetail\", { detail: { value } });\n\nexport type TabChangeDetail = { value: string };\n","import React, {\n Children,\n type HTMLAttributes,\n type ReactElement,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Icon } from \"@purpur/icon\";\nimport { chevronLeft } from \"@purpur/icon/assets/chevron-left\";\nimport { chevronRight } from \"@purpur/icon/assets/chevron-right\";\nimport { List, Root } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport { isTabContent, TabContent } from \"./tab-content\";\nimport { TabHeader } from \"./tab-header\";\nimport styles from \"./tabs.module.scss\";\nimport {\n createTabChangeDetailEvent,\n type TabChangeDetail,\n type TabsCmp,\n type TabsVariant,\n} from \"./tabs.utils\";\n\ntype TabsProps = {\n children: Array<ReactElement<typeof TabContent>> | ReactElement<typeof TabContent>;\n variant?: TabsVariant;\n negative?: boolean;\n fullWidth?: boolean;\n /**\n * The controlled value of the tabs. Must be used in conjunction with onChange.\n */\n value?: string;\n /**\n * Event handler called when the value changes.\n * */\n onChange?: (event: CustomEvent<TabChangeDetail>) => void;\n defaultValue?: string;\n /**\n * When true, animates the height of the component when switching tabs.\n * */\n animateHeight?: boolean;\n \"data-testid\"?: string;\n} & Pick<HTMLAttributes<HTMLDivElement>, \"style\" | \"className\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tabs\";\n\nconst scrollToTarget = (target: HTMLElement, tabList?: HTMLDivElement | null) => {\n /**\n * scroll may not be available in test runner, so check existence before\n * proceeding. We can't use scrollIntoView() because Safari doesn't support\n * it fully.\n */\n if (\n typeof target?.getBoundingClientRect !== \"function\" ||\n typeof tabList?.scroll !== \"function\"\n ) {\n return;\n }\n\n const targetRect = target.getBoundingClientRect();\n const wrapperRect = tabList.getBoundingClientRect();\n const wrapperWidth = tabList.clientWidth;\n const wrapperOffset = parseInt(getComputedStyle(tabList).borderLeftWidth?.split(\"px\")[0], 10);\n const offset = wrapperRect.left + (isNaN(wrapperOffset) ? 0 : wrapperOffset);\n let left;\n\n // Handle forward navigation\n if (targetRect.right > wrapperRect.right) {\n left = targetRect.left + tabList.scrollLeft;\n left = left + targetRect.width - wrapperWidth + wrapperWidth * 0.1;\n left = left - offset;\n }\n\n // Handle backwards navigation\n if (targetRect.left < wrapperRect.left) {\n left = targetRect.left + tabList.scrollLeft;\n left = left - wrapperWidth * 0.1;\n left = left - offset;\n }\n\n if (left !== undefined) {\n tabList.scroll({ left, behavior: \"smooth\" });\n }\n};\n\nexport const Tabs: TabsCmp<TabsProps> = ({\n children,\n variant = \"line\",\n negative = false,\n fullWidth = false,\n onChange,\n className,\n defaultValue,\n animateHeight = false,\n \"data-testid\": dataTestId,\n value,\n ...props\n}) => {\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [height, setHeight] = useState(-1);\n const [scrollClasses, setScrollClasses] = useState<{ [key: string]: boolean }>({});\n const [selectedTriggerOffset, setSelectedTriggerOffset] = useState(0);\n const [selectedTriggerWidth, setSelectedTriggerWidth] = useState(0);\n const tabContentChildren = Children.toArray(children).filter(isTabContent);\n const tabList = useRef<HTMLDivElement>(null);\n const tabChildren = useRef<HTMLButtonElement[]>(new Array(tabContentChildren.length));\n const sideScrollAdjustmentSize = 200;\n const isLineVariant = variant === \"line\";\n\n const classNames = cx(\n rootClassName,\n `${rootClassName}--${variant}${negative ? \"-negative\" : \"\"}`,\n { [`${rootClassName}--full-width`]: fullWidth },\n className\n );\n\n const tabIds = Children.map(tabContentChildren, ({ props: { tabId } }) => tabId);\n\n const getDefaultTabIndex = () => {\n const defaultIndex = tabIds.findIndex((tabIndex) => tabIndex === defaultValue);\n return defaultIndex >= 0 ? defaultIndex : 0;\n };\n\n useEffect(() => {\n if (value) {\n setActiveIndex(tabContentChildren.findIndex((child) => child.props.tabId === value));\n }\n }, [tabContentChildren, value]);\n\n const [activeIndex, setActiveIndex] = useState(getDefaultTabIndex);\n\n if (new Set(tabIds).size !== tabIds.length) {\n throw new Error(\"tabId must be unique\");\n }\n\n const getTestId = (name: string, id?: string) =>\n id || dataTestId ? `${id || dataTestId}-${name}` : undefined;\n\n const handleLinePosition = () => {\n if (!isLineVariant) {\n return;\n }\n\n const activeTabElement = tabChildren.current[activeIndex];\n\n setSelectedTriggerOffset(activeTabElement?.offsetLeft || 0);\n setSelectedTriggerWidth(activeTabElement?.getBoundingClientRect().width || 0);\n };\n\n const handleTabChange = (_value: string) => {\n if (isLineVariant && !value) {\n setActiveIndex(tabContentChildren.findIndex((child) => child.props.tabId === _value));\n }\n onChange?.(createTabChangeDetailEvent(_value));\n };\n\n const handleScrollButtonClick = (side: \"left\" | \"right\") => {\n if (tabList?.current) {\n const { scrollLeft } = tabList.current;\n const modifier = side === \"left\" ? -sideScrollAdjustmentSize : sideScrollAdjustmentSize;\n\n tabList.current.scroll({ left: scrollLeft + modifier, behavior: \"smooth\" });\n }\n };\n\n const ScrollButton = ({ side }: { side: \"left\" | \"right\" }) => (\n <button\n className={cx(`${rootClassName}__scroll-button`, `${rootClassName}__scroll-button--${side}`)}\n onClick={() => handleScrollButtonClick(side)}\n type=\"button\"\n aria-hidden=\"true\"\n tabIndex={-1}\n data-testid={getTestId(\"scroll-button\")}\n >\n <Icon svg={side === \"left\" ? chevronLeft : chevronRight} size=\"md\" />\n </button>\n );\n\n useEffect(() => {\n const setNewHeight = () => {\n if (contentRef.current && animateHeight) {\n const newHeight = contentRef.current.offsetHeight;\n setHeight(newHeight);\n }\n };\n\n const handleResize = () => {\n setNewHeight();\n handleLinePosition();\n };\n\n setNewHeight();\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [activeIndex, animateHeight]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n handleLinePosition();\n }, [activeIndex, fullWidth, tabContentChildren.length, variant]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const root = tabList.current;\n if (!root) return;\n\n const updateScrollState = () => {\n const { scrollLeft, scrollWidth, clientWidth } = root;\n\n const canScroll = scrollWidth > clientWidth;\n const atStart = scrollLeft <= 1;\n const atEnd = scrollLeft + clientWidth >= scrollWidth - 1;\n\n if (!canScroll) {\n setScrollClasses({});\n return;\n }\n\n setScrollClasses({\n [`${rootClassName}__wrapper--scroll-start`]: !atStart,\n [`${rootClassName}__wrapper--scroll-end`]: !atEnd,\n });\n };\n\n updateScrollState();\n\n root.addEventListener(\"scroll\", updateScrollState, { passive: true });\n window.addEventListener(\"resize\", updateScrollState);\n\n return () => {\n root.removeEventListener(\"scroll\", updateScrollState);\n window.removeEventListener(\"resize\", updateScrollState);\n };\n }, []);\n\n return (\n <Root\n defaultValue={defaultValue ?? tabContentChildren[0].props.tabId}\n onValueChange={handleTabChange}\n data-testid={dataTestId}\n className={classNames}\n value={value}\n {...props}\n >\n <div className={cx(`${rootClassName}__container`)}>\n <div className={cx(`${rootClassName}__wrapper`, scrollClasses)}>\n <List\n ref={(el) => {\n tabList.current = el;\n }}\n className={cx(`${rootClassName}__list`)}\n >\n {Children.map(tabContentChildren, (child, index) => {\n const { name, tabId, \"data-testid\": childDataTestId } = child.props;\n return (\n <TabHeader\n data-testid={getTestId(\"header\", childDataTestId)}\n index={index}\n tabId={tabId}\n ref={(el) => {\n if (el) {\n tabChildren.current[index] = el;\n }\n }}\n onFocus={(e) => {\n scrollToTarget(e.target as HTMLElement, tabList.current);\n }}\n variant={variant}\n negative={negative}\n fullWidth={fullWidth}\n >\n {name}\n </TabHeader>\n );\n })}\n {isLineVariant && (\n <div\n className={cx(`${rootClassName}__selected-border`)}\n style={{\n width: selectedTriggerWidth,\n transform: `translateX(${selectedTriggerOffset}px)`,\n }}\n data-testid={getTestId(\"selected-border\")}\n />\n )}\n </List>\n <ScrollButton side=\"left\" />\n <ScrollButton side=\"right\" />\n </div>\n <div\n className={animateHeight ? cx(`${rootClassName}__content-wrapper`) : \"\"}\n style={{ height: animateHeight && height > -1 ? `${height}px` : \"auto\" }}\n >\n <div ref={contentRef} className={cx(`${rootClassName}__content-container`)}>\n {Children.map(tabContentChildren, (child) => child)}\n </div>\n </div>\n </div>\n </Root>\n );\n};\n\nTabs.Content = TabContent;\n\nexport * from \"./tabs.utils\";\n"],"names":["e","TABS_NAME","createTabsContext","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","React","props","forwardedRef","__scopeTabs","valueProp","onValueChange","defaultValue","orientation","dir","activationMode","tabsProps","direction","useDirection","value","setValue","useControllableState","jsx","useId","Primitive","TAB_LIST_NAME","TabsList","loop","listProps","context","rovingFocusGroupScope","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","disabled","triggerProps","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","composeEventHandlers","event","isAutomaticActivation","CONTENT_NAME","TabsContent","forceMount","children","contentProps","isMountAnimationPreventedRef","rAF","Presence","present","baseId","Root2","List","Trigger","Content","cx","c","styles","rootClassName","TabContent","forwardRef","tabId","dataTestId","className","disableForceMount","ref","isTabContent","child","isValidElement","TabHeader","index","variant","negative","onFocus","fullWidth","tabsVariants","createTabChangeDetailEvent","scrollToTarget","target","tabList","targetRect","wrapperRect","wrapperWidth","wrapperOffset","offset","left","onChange","animateHeight","contentRef","useRef","height","setHeight","useState","scrollClasses","setScrollClasses","selectedTriggerOffset","setSelectedTriggerOffset","selectedTriggerWidth","setSelectedTriggerWidth","tabContentChildren","Children","tabChildren","sideScrollAdjustmentSize","isLineVariant","classNames","tabIds","getDefaultTabIndex","defaultIndex","tabIndex","useEffect","setActiveIndex","activeIndex","getTestId","name","id","handleLinePosition","activeTabElement","handleTabChange","_value","handleScrollButtonClick","side","scrollLeft","modifier","ScrollButton","Icon","chevronLeft","chevronRight","setNewHeight","newHeight","handleResize","root","updateScrollState","scrollWidth","clientWidth","canScroll","atStart","atEnd","Root","jsxs","el","childDataTestId"],"mappings":"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","x_google_ignoreList":[2]}
|
|
1
|
+
{"version":3,"file":"tabs-CoXMAwMx.mjs","sources":["../../../components/icon/dist/assets/chevron-left.es.js","../../../components/icon/dist/assets/chevron-right.es.js","../../../common/temp/node_modules/.pnpm/@radix-ui+react-tabs@1.1.13_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_2ad0945e3cb98dc5bbfaaf29c105e977/node_modules/@radix-ui/react-tabs/dist/index.mjs","../../../components/tabs/src/tab-content.tsx","../../../components/tabs/src/tab-header.tsx","../../../components/tabs/src/tabs.utils.ts","../../../components/tabs/src/tabs.tsx"],"sourcesContent":["const e = {\n name: \"chevron-left\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M16.175 3.905a.9.9 0 0 1-.08 1.27L8.36 12l7.736 6.825a.9.9 0 0 1-1.191 1.35l-8.5-7.5a.9.9 0 0 1 0-1.35l8.5-7.5a.9.9 0 0 1 1.27.08Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"chevron-left\"],\n category: \"utility\"\n};\nexport {\n e as chevronLeft\n};\n//# sourceMappingURL=chevron-left.es.js.map\n","const e = {\n name: \"chevron-right\",\n svg: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M7.809 3.924a.9.9 0 0 0 .115 1.267L16.094 12l-8.17 6.809a.9.9 0 0 0 1.152 1.382l9-7.5a.9.9 0 0 0 0-1.382l-9-7.5a.9.9 0 0 0-1.267.115Z\" clip-rule=\"evenodd\"/></svg>',\n keywords: [\"chevron-right\"],\n category: \"utility\"\n};\nexport {\n e as chevronRight\n};\n//# sourceMappingURL=chevron-right.es.js.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { forwardRef, isValidElement, type ReactElement, type ReactNode } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Content } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./tab-content.module.scss\";\n\nexport type TabContentProps = Omit<BaseProps, \"children\"> & {\n /**\n * Content to be rendered inside a `button` element.\n * Only pass ReactNodes that are valid as children of a `button`, such as plain text,\n * inline elements like `span` or other non-interactive elements. Avoid block-level or interactive elements.\n */\n name: ReactNode;\n /**\n * A unique ID that associates the tab with a content.\n * */\n tabId: string;\n /**\n * If true, the inactive tab content will not be rendered.\n */\n disableForceMount?: boolean;\n children: ReactNode;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tab-content\";\n\nexport const TabContent = forwardRef<HTMLDivElement, TabContentProps>(\n ({ children, tabId, \"data-testid\": dataTestId, className, disableForceMount, ...props }, ref) => (\n <Content\n ref={ref}\n className={cx(rootClassName, className, {\n [`${rootClassName}--force-mount`]: !disableForceMount,\n })}\n data-testid={dataTestId}\n value={tabId}\n forceMount={!disableForceMount || undefined}\n {...props}\n >\n {children}\n </Content>\n )\n);\n\nexport const isTabContent = (child?: ReactNode): child is ReactElement<TabContentProps> =>\n !!child && isValidElement<TabContentProps>(child) && !!child.props.name && !!child.props.tabId;\n","import React, {\n type FocusEventHandler,\n type ForwardedRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport { Trigger } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./tab-header.module.scss\";\nimport { type TabsVariant } from \"./tabs.utils\";\n\ntype TabHeaderProps = {\n \"data-testid\"?: string;\n index: number;\n tabId: string;\n variant: TabsVariant;\n negative?: boolean;\n onFocus: FocusEventHandler<HTMLButtonElement>;\n fullWidth?: boolean;\n children: ReactNode;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tab-header\";\n\nexport const TabHeader = forwardRef(\n <T extends HTMLButtonElement>(\n {\n index,\n tabId,\n variant,\n negative,\n onFocus,\n fullWidth,\n \"data-testid\": dataTestId,\n children,\n }: TabHeaderProps,\n ref: ForwardedRef<T>\n ) => (\n <Trigger\n id={`${tabId}-trigger`}\n className={cx(rootClassName, `${rootClassName}--${variant}${negative ? \"-negative\" : \"\"}`, {\n [`${rootClassName}--full-width`]: fullWidth,\n })}\n value={tabId}\n data-testid={dataTestId}\n data-index={index}\n ref={ref}\n onFocus={onFocus}\n >\n {children}\n </Trigger>\n )\n);\n","import type { FunctionComponent } from \"react\";\n\nimport type { TabContent } from \"./tab-content\";\n\nexport type TabsCmp<P> = FunctionComponent<P> & {\n Content: typeof TabContent;\n};\n\nexport const tabsVariants = [\"line\", \"contained\"] as const;\n\nexport type TabsVariant = (typeof tabsVariants)[number];\n\nexport const createTabChangeDetailEvent = (value: string) =>\n new CustomEvent<TabChangeDetail>(\"tabChangeDetail\", { detail: { value } });\n\nexport type TabChangeDetail = { value: string };\n","import React, {\n Children,\n type HTMLAttributes,\n type ReactElement,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Icon } from \"@purpur/icon\";\nimport { chevronLeft } from \"@purpur/icon/assets/chevron-left\";\nimport { chevronRight } from \"@purpur/icon/assets/chevron-right\";\nimport { List, Root } from \"@radix-ui/react-tabs\";\nimport c from \"classnames/bind\";\n\nimport { isTabContent, TabContent } from \"./tab-content\";\nimport { TabHeader } from \"./tab-header\";\nimport styles from \"./tabs.module.scss\";\nimport {\n createTabChangeDetailEvent,\n type TabChangeDetail,\n type TabsCmp,\n type TabsVariant,\n} from \"./tabs.utils\";\n\ntype TabsProps = {\n children: Array<ReactElement<typeof TabContent>> | ReactElement<typeof TabContent>;\n variant?: TabsVariant;\n negative?: boolean;\n fullWidth?: boolean;\n /**\n * The controlled value of the tabs. Must be used in conjunction with onChange.\n */\n value?: string;\n /**\n * Event handler called when the value changes.\n * */\n onChange?: (event: CustomEvent<TabChangeDetail>) => void;\n defaultValue?: string;\n /**\n * When true, animates the height of the component when switching tabs.\n * */\n animateHeight?: boolean;\n \"data-testid\"?: string;\n} & Pick<HTMLAttributes<HTMLDivElement>, \"style\" | \"className\">;\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-tabs\";\n\nconst scrollToTarget = (target: HTMLElement, tabList?: HTMLDivElement | null) => {\n /**\n * scroll may not be available in test runner, so check existence before\n * proceeding. We can't use scrollIntoView() because Safari doesn't support\n * it fully.\n */\n if (\n typeof target?.getBoundingClientRect !== \"function\" ||\n typeof tabList?.scroll !== \"function\"\n ) {\n return;\n }\n\n const targetRect = target.getBoundingClientRect();\n const wrapperRect = tabList.getBoundingClientRect();\n const wrapperWidth = tabList.clientWidth;\n const wrapperOffset = parseInt(getComputedStyle(tabList).borderLeftWidth?.split(\"px\")[0], 10);\n const offset = wrapperRect.left + (isNaN(wrapperOffset) ? 0 : wrapperOffset);\n let left;\n\n // Handle forward navigation\n if (targetRect.right > wrapperRect.right) {\n left = targetRect.left + tabList.scrollLeft;\n left = left + targetRect.width - wrapperWidth + wrapperWidth * 0.1;\n left = left - offset;\n }\n\n // Handle backwards navigation\n if (targetRect.left < wrapperRect.left) {\n left = targetRect.left + tabList.scrollLeft;\n left = left - wrapperWidth * 0.1;\n left = left - offset;\n }\n\n if (left !== undefined) {\n tabList.scroll({ left, behavior: \"smooth\" });\n }\n};\n\nexport const Tabs: TabsCmp<TabsProps> = ({\n children,\n variant = \"line\",\n negative = false,\n fullWidth = false,\n onChange,\n className,\n defaultValue,\n animateHeight = false,\n \"data-testid\": dataTestId,\n value,\n ...props\n}) => {\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [height, setHeight] = useState(-1);\n const [scrollClasses, setScrollClasses] = useState<{ [key: string]: boolean }>({});\n const [selectedTriggerOffset, setSelectedTriggerOffset] = useState(0);\n const [selectedTriggerWidth, setSelectedTriggerWidth] = useState(0);\n const tabContentChildren = Children.toArray(children).filter(isTabContent);\n const tabList = useRef<HTMLDivElement>(null);\n const tabChildren = useRef<HTMLButtonElement[]>(new Array(tabContentChildren.length));\n const sideScrollAdjustmentSize = 200;\n const isLineVariant = variant === \"line\";\n\n const classNames = cx(\n rootClassName,\n `${rootClassName}--${variant}${negative ? \"-negative\" : \"\"}`,\n { [`${rootClassName}--full-width`]: fullWidth },\n className\n );\n\n const tabIds = Children.map(tabContentChildren, ({ props: { tabId } }) => tabId);\n\n const getDefaultTabIndex = () => {\n const defaultIndex = tabIds.findIndex((tabIndex) => tabIndex === defaultValue);\n return defaultIndex >= 0 ? defaultIndex : 0;\n };\n\n useEffect(() => {\n if (value) {\n setActiveIndex(tabContentChildren.findIndex((child) => child.props.tabId === value));\n }\n }, [tabContentChildren, value]);\n\n const [activeIndex, setActiveIndex] = useState(getDefaultTabIndex);\n\n if (new Set(tabIds).size !== tabIds.length) {\n throw new Error(\"tabId must be unique\");\n }\n\n const getTestId = (name: string, id?: string) =>\n id || dataTestId ? `${id || dataTestId}-${name}` : undefined;\n\n const handleLinePosition = () => {\n if (!isLineVariant) {\n return;\n }\n\n const activeTabElement = tabChildren.current[activeIndex];\n\n setSelectedTriggerOffset(activeTabElement?.offsetLeft || 0);\n setSelectedTriggerWidth(activeTabElement?.getBoundingClientRect().width || 0);\n };\n\n const handleTabChange = (_value: string) => {\n if (isLineVariant && !value) {\n setActiveIndex(tabContentChildren.findIndex((child) => child.props.tabId === _value));\n }\n onChange?.(createTabChangeDetailEvent(_value));\n };\n\n const handleScrollButtonClick = (side: \"left\" | \"right\") => {\n if (tabList?.current) {\n const { scrollLeft } = tabList.current;\n const modifier = side === \"left\" ? -sideScrollAdjustmentSize : sideScrollAdjustmentSize;\n\n tabList.current.scroll({ left: scrollLeft + modifier, behavior: \"smooth\" });\n }\n };\n\n const ScrollButton = ({ side }: { side: \"left\" | \"right\" }) => (\n <button\n className={cx(`${rootClassName}__scroll-button`, `${rootClassName}__scroll-button--${side}`)}\n onClick={() => handleScrollButtonClick(side)}\n type=\"button\"\n aria-hidden=\"true\"\n tabIndex={-1}\n data-testid={getTestId(\"scroll-button\")}\n >\n <Icon svg={side === \"left\" ? chevronLeft : chevronRight} size=\"md\" />\n </button>\n );\n\n useEffect(() => {\n const setNewHeight = () => {\n if (contentRef.current && animateHeight) {\n const newHeight = contentRef.current.offsetHeight;\n setHeight(newHeight);\n }\n };\n\n const handleResize = () => {\n setNewHeight();\n handleLinePosition();\n };\n\n setNewHeight();\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n };\n }, [activeIndex, animateHeight]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n handleLinePosition();\n }, [activeIndex, fullWidth, tabContentChildren.length, variant]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const root = tabList.current;\n if (!root) return;\n\n const updateScrollState = () => {\n const { scrollLeft, scrollWidth, clientWidth } = root;\n\n const canScroll = scrollWidth > clientWidth;\n const atStart = scrollLeft <= 1;\n const atEnd = scrollLeft + clientWidth >= scrollWidth - 1;\n\n if (!canScroll) {\n setScrollClasses({});\n return;\n }\n\n setScrollClasses({\n [`${rootClassName}__wrapper--scroll-start`]: !atStart,\n [`${rootClassName}__wrapper--scroll-end`]: !atEnd,\n });\n };\n\n updateScrollState();\n\n root.addEventListener(\"scroll\", updateScrollState, { passive: true });\n window.addEventListener(\"resize\", updateScrollState);\n\n return () => {\n root.removeEventListener(\"scroll\", updateScrollState);\n window.removeEventListener(\"resize\", updateScrollState);\n };\n }, []);\n\n return (\n <Root\n defaultValue={defaultValue ?? tabContentChildren[0].props.tabId}\n onValueChange={handleTabChange}\n data-testid={dataTestId}\n className={classNames}\n value={value}\n {...props}\n >\n <div className={cx(`${rootClassName}__container`)}>\n <div className={cx(`${rootClassName}__wrapper`, scrollClasses)}>\n <List\n ref={(el) => {\n tabList.current = el;\n }}\n className={cx(`${rootClassName}__list`)}\n >\n {Children.map(tabContentChildren, (child, index) => {\n const { name, tabId, \"data-testid\": childDataTestId } = child.props;\n return (\n <TabHeader\n data-testid={getTestId(\"header\", childDataTestId)}\n index={index}\n tabId={tabId}\n ref={(el) => {\n if (el) {\n tabChildren.current[index] = el;\n }\n }}\n onFocus={(e) => {\n scrollToTarget(e.target as HTMLElement, tabList.current);\n }}\n variant={variant}\n negative={negative}\n fullWidth={fullWidth}\n >\n {name}\n </TabHeader>\n );\n })}\n {isLineVariant && (\n <div\n className={cx(`${rootClassName}__selected-border`)}\n style={{\n width: selectedTriggerWidth,\n transform: `translateX(${selectedTriggerOffset}px)`,\n }}\n data-testid={getTestId(\"selected-border\")}\n />\n )}\n </List>\n <ScrollButton side=\"left\" />\n <ScrollButton side=\"right\" />\n </div>\n <div\n className={animateHeight ? cx(`${rootClassName}__content-wrapper`) : \"\"}\n style={{ height: animateHeight && height > -1 ? `${height}px` : \"auto\" }}\n >\n <div ref={contentRef} className={cx(`${rootClassName}__content-container`)}>\n {Children.map(tabContentChildren, (child) => child)}\n </div>\n </div>\n </div>\n </Root>\n );\n};\n\nTabs.Content = TabContent;\n\nexport * from \"./tabs.utils\";\n"],"names":["e","TABS_NAME","createTabsContext","createContextScope","createRovingFocusGroupScope","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","React","props","forwardedRef","__scopeTabs","valueProp","onValueChange","defaultValue","orientation","dir","activationMode","tabsProps","direction","useDirection","value","setValue","useControllableState","jsx","useId","Primitive","TAB_LIST_NAME","TabsList","loop","listProps","context","rovingFocusGroupScope","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","disabled","triggerProps","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","composeEventHandlers","event","isAutomaticActivation","CONTENT_NAME","TabsContent","forceMount","children","contentProps","isMountAnimationPreventedRef","rAF","Presence","present","baseId","Root2","List","Trigger","Content","cx","c","styles","rootClassName","TabContent","forwardRef","tabId","dataTestId","className","disableForceMount","ref","isTabContent","child","isValidElement","TabHeader","index","variant","negative","onFocus","fullWidth","tabsVariants","createTabChangeDetailEvent","scrollToTarget","target","tabList","targetRect","wrapperRect","wrapperWidth","wrapperOffset","offset","left","onChange","animateHeight","contentRef","useRef","height","setHeight","useState","scrollClasses","setScrollClasses","selectedTriggerOffset","setSelectedTriggerOffset","selectedTriggerWidth","setSelectedTriggerWidth","tabContentChildren","Children","tabChildren","sideScrollAdjustmentSize","isLineVariant","classNames","tabIds","getDefaultTabIndex","defaultIndex","tabIndex","useEffect","setActiveIndex","activeIndex","getTestId","name","id","handleLinePosition","activeTabElement","handleTabChange","_value","handleScrollButtonClick","side","scrollLeft","modifier","ScrollButton","Icon","chevronLeft","chevronRight","setNewHeight","newHeight","handleResize","root","updateScrollState","scrollWidth","clientWidth","canScroll","atStart","atEnd","Root","jsxs","el","childDataTestId"],"mappings":"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","x_google_ignoreList":[2]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle-C8IwTbX8.js","sources":["../../../common/temp/node_modules/.pnpm/@radix-ui+react-switch@1.1.4_@types+react-dom@19.2.3_@types+react@19.2.10__@types+react_046e92fbe833e5e92998d97a45d91da7/node_modules/@radix-ui/react-switch/dist/index.mjs","../../../components/toggle/src/DraggableX.tsx","../../../components/toggle/src/hooks/useResizeObserver.ts","../../../components/toggle/src/hooks/useToggleDrag.ts","../../../components/toggle/src/toggle.tsx"],"sourcesContent":["\"use client\";\n\n// packages/react/switch/src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked = false, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n BubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BubbleInput = (props) => {\n const { control, checked, bubbles = true, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"checked\");\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...inputProps,\n tabIndex: -1,\n ref,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n};\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import {\n cloneElement,\n type CSSProperties,\n isValidElement,\n type ReactElement,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport { type SwitchThumbProps } from \"@radix-ui/react-switch\";\n\nexport type DraggableXProps = {\n children?: ReactElement<SwitchThumbProps>;\n disabled?: boolean;\n position: number;\n bounds: { left: number; right: number };\n onStart?: () => void;\n onDrag?: (args: { x: number }) => void;\n onStop?: () => void;\n style?: CSSProperties;\n};\n\nconst isTouchEvent = (e: MouseEvent | TouchEvent): e is TouchEvent => e && \"touches\" in e;\n\n/**\n * Bare minimum to make the toggle draggable.\n * It is created for usage in the toggle only but could easily be extracted and used elsewhere.\n *\n * It is called `DraggableX` since it's only for dragging along the x-axis.\n */\nexport const DraggableX = ({\n children,\n disabled,\n onStart,\n onDrag,\n onStop,\n bounds,\n position,\n style,\n}: DraggableXProps) => {\n const [dragX, setDragX] = useState<number | undefined>(undefined);\n const [dragStartX, setDragStartX] = useState<number | undefined>(undefined);\n const [isDragging, setIsDragging] = useState(false);\n\n const startDrag = (e: React.MouseEvent | React.TouchEvent) => {\n if (!disabled) {\n e.preventDefault();\n const clientX = isTouchEvent(e.nativeEvent)\n ? e.nativeEvent.touches[0].clientX\n : e.nativeEvent.clientX;\n setDragStartX(clientX);\n onStart?.();\n }\n };\n\n const onMouseMove = useCallback(\n (e: MouseEvent | TouchEvent) => {\n if (typeof dragStartX !== \"number\") {\n return;\n }\n\n const clientX = isTouchEvent(e) ? e.touches[0].clientX : e.clientX;\n const dragDelta = clientX - dragStartX;\n\n if (!dragDelta) {\n return;\n }\n\n const nextDragX = position + dragDelta;\n if (!isDragging && Math.abs(nextDragX)) {\n setIsDragging(true);\n }\n\n const nextDragXBounded = (() => {\n if (nextDragX > bounds.right) {\n return bounds.right;\n }\n\n if (nextDragX < bounds.left) {\n return bounds.left;\n }\n\n return nextDragX;\n })();\n\n setDragX(nextDragXBounded);\n onDrag?.({ x: nextDragXBounded });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [onDrag, setDragX, isDragging, dragStartX]\n );\n\n const onMouseUp = useCallback(() => {\n setDragStartX(undefined);\n setDragX(undefined);\n setIsDragging(false);\n onStop?.();\n }, [onStop, setDragStartX]);\n\n useEffect(() => {\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"touchmove\", onMouseMove);\n\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"touchmove\", onMouseMove);\n };\n }, [onMouseMove]);\n\n useEffect(() => {\n window.addEventListener(\"mouseup\", onMouseUp);\n window.addEventListener(\"touchend\", onMouseUp);\n\n return () => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n window.removeEventListener(\"touchend\", onMouseUp);\n };\n }, [onMouseUp]);\n\n return isValidElement(children)\n ? cloneElement<SwitchThumbProps>(children, {\n onMouseDown: startDrag,\n onTouchStart: startDrag,\n style: { ...style, transform: `translateX(${isDragging ? dragX : position}px)` },\n })\n : null;\n};\n","import type { RefObject } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\n// This hook is a clone of useResizeObserver in b2c-sales/hooks\n\ntype Size = {\n width: number | undefined;\n height: number | undefined;\n};\n\ntype UseResizeObserverOptions<T extends HTMLElement = HTMLElement> = {\n ref: RefObject<T | null>;\n onResize?: (size: Size) => void;\n box?: \"border-box\" | \"content-box\" | \"device-pixel-content-box\";\n round?: boolean;\n};\n\nconst initialSize: Size = {\n width: undefined,\n height: undefined,\n};\n\nexport function useResizeObserver<T extends HTMLElement = HTMLElement>(\n options: UseResizeObserverOptions<T>\n): Size {\n const { ref, box = \"content-box\", round } = options;\n const [{ width, height }, setSize] = useState<Size>(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef<Size>({ ...initialSize });\n const onResize = useRef<((size: Size) => void) | undefined>(undefined);\n onResize.current = options.onResize;\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window)) {\n return;\n }\n\n const observer = new ResizeObserver(([entry]) => {\n const boxProp =\n\n box === \"border-box\"\n ? \"borderBoxSize\"\n : box === \"device-pixel-content-box\"\n ? \"devicePixelContentBoxSize\"\n : \"contentBoxSize\";\n\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n\n const hasChanged =\n previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n\n if (hasChanged) {\n const newSize: Size = {\n width: newWidth && round ? Math.round(newWidth) : newWidth,\n height: newHeight && round ? Math.round(newHeight) : newHeight,\n };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n\n observer.observe(ref.current, { box });\n\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted, round]);\n\n return { width, height };\n}\n\ntype BoxSizesKey = keyof Pick<\n ResizeObserverEntry,\n \"borderBoxSize\" | \"contentBoxSize\" | \"devicePixelContentBoxSize\"\n>;\n\nfunction extractSize(\n entry: ResizeObserverEntry,\n box: BoxSizesKey,\n sizeType: keyof ResizeObserverSize\n): number | undefined {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return undefined;\n }\n\n return Array.isArray(entry[box])\n ? entry[box][0][sizeType]\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Support Firefox's non-standard behavior\n (entry[box][sizeType] as number);\n}\n\nfunction useIsMounted() {\n const isMounted = useRef(false);\n\n useEffect(() => {\n isMounted.current = true;\n\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return useCallback(() => isMounted.current, []);\n}\n","import { type RefObject, useRef, useState } from \"react\";\n\nimport { useResizeObserver } from \"./useResizeObserver\";\n\ntype UseToggleDragProps = {\n checked: boolean;\n onChange: ((checked: boolean) => void) | undefined;\n};\n\nexport const useToggleDrag = ({ checked, onChange }: UseToggleDragProps) => {\n const trackRef: RefObject<HTMLDivElement | null> = useRef(null);\n const thumbRef = useRef<HTMLSpanElement>(null);\n const [dragX, setDragX] = useState<number | undefined>(undefined);\n const [isDragging, setIsDragging] = useState(false);\n const [dragStopped, setDragStopped] = useState(0);\n\n const { height: thumbHeight = 0 } = useResizeObserver({ ref: thumbRef, round: true });\n const { height: switchHeight = 0 } = useResizeObserver({ ref: trackRef, round: true });\n\n const switchThumbHeightDelta = (switchHeight || 0) - thumbHeight;\n const maxDragRange = thumbHeight + switchThumbHeightDelta;\n const minDragRange = switchThumbHeightDelta / 2;\n const halfMaxDragRange = maxDragRange / 2;\n const isDraggedHalfway =\n typeof dragX === \"number\" && (checked ? dragX < halfMaxDragRange : dragX > halfMaxDragRange);\n\n const onDrag = ({ x }: { x: number }) => {\n setDragX(x);\n const dragDelta = Math.abs((checked ? maxDragRange : minDragRange) - x);\n\n // Add a threshold here for then accidentally dragging when clicking/touching\n dragDelta > 2 && setIsDragging(true);\n };\n\n const onStop = () => {\n setIsDragging(false);\n isDragging && setDragStopped(Date.now());\n if (isDraggedHalfway) {\n onChange?.(!checked);\n }\n };\n\n const onChangeWithDrag = () => {\n if (Date.now() - dragStopped > 50) {\n onChange?.(!checked);\n }\n setDragX(undefined);\n };\n\n return {\n trackRef,\n thumbRef,\n isDragging,\n bounds: { left: minDragRange, right: maxDragRange },\n position: checked ? maxDragRange : minDragRange,\n onDrag,\n onStop,\n onChangeWithDrag,\n };\n};\n","import React, { forwardRef, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Icon } from \"@purpur/icon\";\nimport { checkmarkBold } from \"@purpur/icon/assets/checkmark-bold\";\nimport { Label } from \"@purpur/label\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport * as Switch from \"@radix-ui/react-switch\";\nimport c from \"classnames/bind\";\n\nimport { DraggableX } from \"./DraggableX\";\nimport { useToggleDrag } from \"./hooks/useToggleDrag\";\nimport styles from \"./toggle.module.scss\";\n\nexport type ToggleProps = Omit<BaseProps<\"button\">, \"onChange\" | \"children\" | \"id\"> & {\n /**\n * To use when no label is given.\n * */\n [\"aria-label\"]?: string;\n /**\n * To use with custom label (not recommended).\n * */\n [\"aria-labelledby\"]?: string;\n /**\n * The controlled state of the toggle. Must be used in conjunction with `onChange`.\n * */\n checked?: boolean;\n /**\n * The state of the toggle when it is initially rendered. Use when you do not need to control its state.\n * */\n defaultChecked?: boolean;\n /**\n * When `true`, prevents the user from interacting with the toggle.\n * */\n disabled?: boolean;\n /**\n * When `true`, the toggle isn't draggable.\n * */\n disableDrag?: boolean;\n /**\n * ID of the toggle.\n * */\n id: string;\n /**\n * The label of the toggle.\n * */\n label?: string;\n /**\n * Set to decide which side of the toggle the label should be rendered.\n * */\n labelPosition?: \"left\" | \"right\";\n /**\n * The name of the toggle. Submitted with its owning form as part of a name/value pair, when wrapped in a form.\n * */\n name?: string;\n /**\n * Event handler called when the toggle is toggled.\n * */\n onChange?: (checked: boolean) => void;\n /**\n * When `true`, indicates that the user must check the toggle before the owning form can be submitted..\n * */\n required?: boolean;\n /**\n * The value given as data when wrapped with a form and submitted with a name.\n * */\n value?: string;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-toggle\";\n\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n label,\n onChange,\n labelPosition = \"right\",\n checked,\n disableDrag,\n defaultChecked,\n ...props\n },\n ref\n ) => {\n const [internalChecked, setInternalChecked] = useState(\n typeof checked === \"boolean\" ? checked : !!defaultChecked\n );\n const isChecked = Boolean(typeof checked === \"boolean\" ? checked : internalChecked);\n const { thumbRef, trackRef, isDragging, onChangeWithDrag, ...draggableXProps } = useToggleDrag({\n checked: isChecked,\n onChange: (value) => {\n if (!props.disabled) {\n onChange?.(value);\n setInternalChecked(value);\n }\n },\n });\n\n const renderLabel = () => (\n <Label\n htmlFor={props.id}\n data-testid={dataTestId && `${dataTestId}-label`}\n disabled={props.disabled}\n className={cx(`${rootClassName}__label`, `${rootClassName}__label--${labelPosition}`)}\n >\n <Paragraph disabled={props.disabled}>{label}</Paragraph>\n </Label>\n );\n\n return (\n <div className={cx(className, `${rootClassName}__container`)}>\n {label && labelPosition === \"left\" && renderLabel()}\n <Switch.Root\n {...props}\n ref={ref}\n id={props.id}\n data-testid={dataTestId}\n className={cx(rootClassName)}\n onCheckedChange={onChangeWithDrag}\n checked={isChecked}\n >\n <span ref={trackRef} className={cx(`${rootClassName}__track`)}>\n <span className={cx(`${rootClassName}__checkmark-container`)}>\n <Icon className={cx(`${rootClassName}__checkmark`)} svg={checkmarkBold} size=\"xxs\" />\n </span>\n <DraggableX disabled={disableDrag} {...draggableXProps}>\n <Switch.Thumb\n ref={thumbRef}\n data-testid={dataTestId && `${dataTestId}-thumb`}\n className={cx(`${rootClassName}__thumb`, {\n [`${rootClassName}__thumb--dragging`]: isDragging,\n })}\n />\n </DraggableX>\n </span>\n </Switch.Root>\n {label && labelPosition === \"right\" && renderLabel()}\n </div>\n );\n }\n);\n\nToggle.displayName = \"Toggle\";\n"],"names":["SWITCH_NAME","createSwitchContext","createContextScope","SwitchProvider","useSwitchContext","Switch","React","props","forwardedRef","__scopeSwitch","name","checkedProp","defaultChecked","required","disabled","value","onCheckedChange","form","switchProps","button","setButton","composedRefs","useComposedRefs","node","hasConsumerStoppedPropagationRef","isFormControl","checked","setChecked","useControllableState","jsxs","jsx","Primitive","getState","composeEventHandlers","event","prevChecked","BubbleInput","THUMB_NAME","SwitchThumb","thumbProps","context","control","bubbles","inputProps","ref","usePrevious","controlSize","useSize","input","inputProto","Root","Thumb","isTouchEvent","DraggableX","children","onStart","onDrag","onStop","bounds","position","style","dragX","setDragX","useState","dragStartX","setDragStartX","isDragging","setIsDragging","startDrag","e","clientX","onMouseMove","useCallback","dragDelta","nextDragX","nextDragXBounded","onMouseUp","useEffect","isValidElement","cloneElement","initialSize","useResizeObserver","options","box","round","width","height","setSize","isMounted","useIsMounted","previousSize","useRef","onResize","observer","entry","boxProp","newWidth","extractSize","newHeight","newSize","sizeType","useToggleDrag","onChange","trackRef","thumbRef","dragStopped","setDragStopped","thumbHeight","switchHeight","switchThumbHeightDelta","maxDragRange","minDragRange","halfMaxDragRange","isDraggedHalfway","x","cx","c","styles","rootClassName","Toggle","forwardRef","dataTestId","className","label","labelPosition","disableDrag","internalChecked","setInternalChecked","isChecked","onChangeWithDrag","draggableXProps","renderLabel","Label","Paragraph","Switch.Root","Icon","checkmarkBold","Switch.Thumb"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"toggle-C8IwTbX8.js","sources":["../../../common/temp/node_modules/.pnpm/@radix-ui+react-switch@1.1.4_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_7c6a1205dfc0b547da67f2d77f280718/node_modules/@radix-ui/react-switch/dist/index.mjs","../../../components/toggle/src/DraggableX.tsx","../../../components/toggle/src/hooks/useResizeObserver.ts","../../../components/toggle/src/hooks/useToggleDrag.ts","../../../components/toggle/src/toggle.tsx"],"sourcesContent":["\"use client\";\n\n// packages/react/switch/src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked = false, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n BubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BubbleInput = (props) => {\n const { control, checked, bubbles = true, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"checked\");\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...inputProps,\n tabIndex: -1,\n ref,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n};\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","import {\n cloneElement,\n type CSSProperties,\n isValidElement,\n type ReactElement,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport { type SwitchThumbProps } from \"@radix-ui/react-switch\";\n\nexport type DraggableXProps = {\n children?: ReactElement<SwitchThumbProps>;\n disabled?: boolean;\n position: number;\n bounds: { left: number; right: number };\n onStart?: () => void;\n onDrag?: (args: { x: number }) => void;\n onStop?: () => void;\n style?: CSSProperties;\n};\n\nconst isTouchEvent = (e: MouseEvent | TouchEvent): e is TouchEvent => e && \"touches\" in e;\n\n/**\n * Bare minimum to make the toggle draggable.\n * It is created for usage in the toggle only but could easily be extracted and used elsewhere.\n *\n * It is called `DraggableX` since it's only for dragging along the x-axis.\n */\nexport const DraggableX = ({\n children,\n disabled,\n onStart,\n onDrag,\n onStop,\n bounds,\n position,\n style,\n}: DraggableXProps) => {\n const [dragX, setDragX] = useState<number | undefined>(undefined);\n const [dragStartX, setDragStartX] = useState<number | undefined>(undefined);\n const [isDragging, setIsDragging] = useState(false);\n\n const startDrag = (e: React.MouseEvent | React.TouchEvent) => {\n if (!disabled) {\n e.preventDefault();\n const clientX = isTouchEvent(e.nativeEvent)\n ? e.nativeEvent.touches[0].clientX\n : e.nativeEvent.clientX;\n setDragStartX(clientX);\n onStart?.();\n }\n };\n\n const onMouseMove = useCallback(\n (e: MouseEvent | TouchEvent) => {\n if (typeof dragStartX !== \"number\") {\n return;\n }\n\n const clientX = isTouchEvent(e) ? e.touches[0].clientX : e.clientX;\n const dragDelta = clientX - dragStartX;\n\n if (!dragDelta) {\n return;\n }\n\n const nextDragX = position + dragDelta;\n if (!isDragging && Math.abs(nextDragX)) {\n setIsDragging(true);\n }\n\n const nextDragXBounded = (() => {\n if (nextDragX > bounds.right) {\n return bounds.right;\n }\n\n if (nextDragX < bounds.left) {\n return bounds.left;\n }\n\n return nextDragX;\n })();\n\n setDragX(nextDragXBounded);\n onDrag?.({ x: nextDragXBounded });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [onDrag, setDragX, isDragging, dragStartX]\n );\n\n const onMouseUp = useCallback(() => {\n setDragStartX(undefined);\n setDragX(undefined);\n setIsDragging(false);\n onStop?.();\n }, [onStop, setDragStartX]);\n\n useEffect(() => {\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"touchmove\", onMouseMove);\n\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"touchmove\", onMouseMove);\n };\n }, [onMouseMove]);\n\n useEffect(() => {\n window.addEventListener(\"mouseup\", onMouseUp);\n window.addEventListener(\"touchend\", onMouseUp);\n\n return () => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n window.removeEventListener(\"touchend\", onMouseUp);\n };\n }, [onMouseUp]);\n\n return isValidElement(children)\n ? cloneElement<SwitchThumbProps>(children, {\n onMouseDown: startDrag,\n onTouchStart: startDrag,\n style: { ...style, transform: `translateX(${isDragging ? dragX : position}px)` },\n })\n : null;\n};\n","import type { RefObject } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\n// This hook is a clone of useResizeObserver in b2c-sales/hooks\n\ntype Size = {\n width: number | undefined;\n height: number | undefined;\n};\n\ntype UseResizeObserverOptions<T extends HTMLElement = HTMLElement> = {\n ref: RefObject<T | null>;\n onResize?: (size: Size) => void;\n box?: \"border-box\" | \"content-box\" | \"device-pixel-content-box\";\n round?: boolean;\n};\n\nconst initialSize: Size = {\n width: undefined,\n height: undefined,\n};\n\nexport function useResizeObserver<T extends HTMLElement = HTMLElement>(\n options: UseResizeObserverOptions<T>\n): Size {\n const { ref, box = \"content-box\", round } = options;\n const [{ width, height }, setSize] = useState<Size>(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef<Size>({ ...initialSize });\n const onResize = useRef<((size: Size) => void) | undefined>(undefined);\n onResize.current = options.onResize;\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window)) {\n return;\n }\n\n const observer = new ResizeObserver(([entry]) => {\n const boxProp =\n\n box === \"border-box\"\n ? \"borderBoxSize\"\n : box === \"device-pixel-content-box\"\n ? \"devicePixelContentBoxSize\"\n : \"contentBoxSize\";\n\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n\n const hasChanged =\n previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n\n if (hasChanged) {\n const newSize: Size = {\n width: newWidth && round ? Math.round(newWidth) : newWidth,\n height: newHeight && round ? Math.round(newHeight) : newHeight,\n };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n\n observer.observe(ref.current, { box });\n\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted, round]);\n\n return { width, height };\n}\n\ntype BoxSizesKey = keyof Pick<\n ResizeObserverEntry,\n \"borderBoxSize\" | \"contentBoxSize\" | \"devicePixelContentBoxSize\"\n>;\n\nfunction extractSize(\n entry: ResizeObserverEntry,\n box: BoxSizesKey,\n sizeType: keyof ResizeObserverSize\n): number | undefined {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return undefined;\n }\n\n return Array.isArray(entry[box])\n ? entry[box][0][sizeType]\n : // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Support Firefox's non-standard behavior\n (entry[box][sizeType] as number);\n}\n\nfunction useIsMounted() {\n const isMounted = useRef(false);\n\n useEffect(() => {\n isMounted.current = true;\n\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return useCallback(() => isMounted.current, []);\n}\n","import { type RefObject, useRef, useState } from \"react\";\n\nimport { useResizeObserver } from \"./useResizeObserver\";\n\ntype UseToggleDragProps = {\n checked: boolean;\n onChange: ((checked: boolean) => void) | undefined;\n};\n\nexport const useToggleDrag = ({ checked, onChange }: UseToggleDragProps) => {\n const trackRef: RefObject<HTMLDivElement | null> = useRef(null);\n const thumbRef = useRef<HTMLSpanElement>(null);\n const [dragX, setDragX] = useState<number | undefined>(undefined);\n const [isDragging, setIsDragging] = useState(false);\n const [dragStopped, setDragStopped] = useState(0);\n\n const { height: thumbHeight = 0 } = useResizeObserver({ ref: thumbRef, round: true });\n const { height: switchHeight = 0 } = useResizeObserver({ ref: trackRef, round: true });\n\n const switchThumbHeightDelta = (switchHeight || 0) - thumbHeight;\n const maxDragRange = thumbHeight + switchThumbHeightDelta;\n const minDragRange = switchThumbHeightDelta / 2;\n const halfMaxDragRange = maxDragRange / 2;\n const isDraggedHalfway =\n typeof dragX === \"number\" && (checked ? dragX < halfMaxDragRange : dragX > halfMaxDragRange);\n\n const onDrag = ({ x }: { x: number }) => {\n setDragX(x);\n const dragDelta = Math.abs((checked ? maxDragRange : minDragRange) - x);\n\n // Add a threshold here for then accidentally dragging when clicking/touching\n dragDelta > 2 && setIsDragging(true);\n };\n\n const onStop = () => {\n setIsDragging(false);\n isDragging && setDragStopped(Date.now());\n if (isDraggedHalfway) {\n onChange?.(!checked);\n }\n };\n\n const onChangeWithDrag = () => {\n if (Date.now() - dragStopped > 50) {\n onChange?.(!checked);\n }\n setDragX(undefined);\n };\n\n return {\n trackRef,\n thumbRef,\n isDragging,\n bounds: { left: minDragRange, right: maxDragRange },\n position: checked ? maxDragRange : minDragRange,\n onDrag,\n onStop,\n onChangeWithDrag,\n };\n};\n","import React, { forwardRef, useState } from \"react\";\nimport type { BaseProps } from \"@purpur/common-types\";\nimport { Icon } from \"@purpur/icon\";\nimport { checkmarkBold } from \"@purpur/icon/assets/checkmark-bold\";\nimport { Label } from \"@purpur/label\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport * as Switch from \"@radix-ui/react-switch\";\nimport c from \"classnames/bind\";\n\nimport { DraggableX } from \"./DraggableX\";\nimport { useToggleDrag } from \"./hooks/useToggleDrag\";\nimport styles from \"./toggle.module.scss\";\n\nexport type ToggleProps = Omit<BaseProps<\"button\">, \"onChange\" | \"children\" | \"id\"> & {\n /**\n * To use when no label is given.\n * */\n [\"aria-label\"]?: string;\n /**\n * To use with custom label (not recommended).\n * */\n [\"aria-labelledby\"]?: string;\n /**\n * The controlled state of the toggle. Must be used in conjunction with `onChange`.\n * */\n checked?: boolean;\n /**\n * The state of the toggle when it is initially rendered. Use when you do not need to control its state.\n * */\n defaultChecked?: boolean;\n /**\n * When `true`, prevents the user from interacting with the toggle.\n * */\n disabled?: boolean;\n /**\n * When `true`, the toggle isn't draggable.\n * */\n disableDrag?: boolean;\n /**\n * ID of the toggle.\n * */\n id: string;\n /**\n * The label of the toggle.\n * */\n label?: string;\n /**\n * Set to decide which side of the toggle the label should be rendered.\n * */\n labelPosition?: \"left\" | \"right\";\n /**\n * The name of the toggle. Submitted with its owning form as part of a name/value pair, when wrapped in a form.\n * */\n name?: string;\n /**\n * Event handler called when the toggle is toggled.\n * */\n onChange?: (checked: boolean) => void;\n /**\n * When `true`, indicates that the user must check the toggle before the owning form can be submitted..\n * */\n required?: boolean;\n /**\n * The value given as data when wrapped with a form and submitted with a name.\n * */\n value?: string;\n};\n\nconst cx = c.bind(styles);\nconst rootClassName = \"purpur-toggle\";\n\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n [\"data-testid\"]: dataTestId,\n className,\n label,\n onChange,\n labelPosition = \"right\",\n checked,\n disableDrag,\n defaultChecked,\n ...props\n },\n ref\n ) => {\n const [internalChecked, setInternalChecked] = useState(\n typeof checked === \"boolean\" ? checked : !!defaultChecked\n );\n const isChecked = Boolean(typeof checked === \"boolean\" ? checked : internalChecked);\n const { thumbRef, trackRef, isDragging, onChangeWithDrag, ...draggableXProps } = useToggleDrag({\n checked: isChecked,\n onChange: (value) => {\n if (!props.disabled) {\n onChange?.(value);\n setInternalChecked(value);\n }\n },\n });\n\n const renderLabel = () => (\n <Label\n htmlFor={props.id}\n data-testid={dataTestId && `${dataTestId}-label`}\n disabled={props.disabled}\n className={cx(`${rootClassName}__label`, `${rootClassName}__label--${labelPosition}`)}\n >\n <Paragraph disabled={props.disabled}>{label}</Paragraph>\n </Label>\n );\n\n return (\n <div className={cx(className, `${rootClassName}__container`)}>\n {label && labelPosition === \"left\" && renderLabel()}\n <Switch.Root\n {...props}\n ref={ref}\n id={props.id}\n data-testid={dataTestId}\n className={cx(rootClassName)}\n onCheckedChange={onChangeWithDrag}\n checked={isChecked}\n >\n <span ref={trackRef} className={cx(`${rootClassName}__track`)}>\n <span className={cx(`${rootClassName}__checkmark-container`)}>\n <Icon className={cx(`${rootClassName}__checkmark`)} svg={checkmarkBold} size=\"xxs\" />\n </span>\n <DraggableX disabled={disableDrag} {...draggableXProps}>\n <Switch.Thumb\n ref={thumbRef}\n data-testid={dataTestId && `${dataTestId}-thumb`}\n className={cx(`${rootClassName}__thumb`, {\n [`${rootClassName}__thumb--dragging`]: isDragging,\n })}\n />\n </DraggableX>\n </span>\n </Switch.Root>\n {label && labelPosition === \"right\" && renderLabel()}\n </div>\n );\n }\n);\n\nToggle.displayName = \"Toggle\";\n"],"names":["SWITCH_NAME","createSwitchContext","createContextScope","SwitchProvider","useSwitchContext","Switch","React","props","forwardedRef","__scopeSwitch","name","checkedProp","defaultChecked","required","disabled","value","onCheckedChange","form","switchProps","button","setButton","composedRefs","useComposedRefs","node","hasConsumerStoppedPropagationRef","isFormControl","checked","setChecked","useControllableState","jsxs","jsx","Primitive","getState","composeEventHandlers","event","prevChecked","BubbleInput","THUMB_NAME","SwitchThumb","thumbProps","context","control","bubbles","inputProps","ref","usePrevious","controlSize","useSize","input","inputProto","Root","Thumb","isTouchEvent","DraggableX","children","onStart","onDrag","onStop","bounds","position","style","dragX","setDragX","useState","dragStartX","setDragStartX","isDragging","setIsDragging","startDrag","e","clientX","onMouseMove","useCallback","dragDelta","nextDragX","nextDragXBounded","onMouseUp","useEffect","isValidElement","cloneElement","initialSize","useResizeObserver","options","box","round","width","height","setSize","isMounted","useIsMounted","previousSize","useRef","onResize","observer","entry","boxProp","newWidth","extractSize","newHeight","newSize","sizeType","useToggleDrag","onChange","trackRef","thumbRef","dragStopped","setDragStopped","thumbHeight","switchHeight","switchThumbHeightDelta","maxDragRange","minDragRange","halfMaxDragRange","isDraggedHalfway","x","cx","c","styles","rootClassName","Toggle","forwardRef","dataTestId","className","label","labelPosition","disableDrag","internalChecked","setInternalChecked","isChecked","onChangeWithDrag","draggableXProps","renderLabel","Label","Paragraph","Switch.Root","Icon","checkmarkBold","Switch.Thumb"],"mappings":"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","x_google_ignoreList":[0]}
|