se-design 1.0.96-dev.0 → 1.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/icons/zoom-in.svg +3 -0
- package/dist/assets/icons/zoom-out.svg +3 -0
- package/dist/components/BottomSheet/index.d.ts +0 -1
- package/dist/index12.js +11 -11
- package/dist/index12.js.map +1 -1
- package/dist/index126.js +1 -1
- package/dist/index126.js.map +1 -1
- package/dist/index127.js +1 -1
- package/dist/index127.js.map +1 -1
- package/dist/index128.js +1 -1
- package/dist/index128.js.map +1 -1
- package/dist/index129.js +1 -1
- package/dist/index129.js.map +1 -1
- package/dist/index13.js +2 -2
- package/dist/index130.js +1 -1
- package/dist/index130.js.map +1 -1
- package/dist/index131.js +2 -2
- package/dist/index131.js.map +1 -1
- package/dist/index132.js +1 -1
- package/dist/index132.js.map +1 -1
- package/dist/index133.js +2 -2
- package/dist/index133.js.map +1 -1
- package/dist/index134.js +2 -2
- package/dist/index134.js.map +1 -1
- package/dist/index135.js +1 -1
- package/dist/index135.js.map +1 -1
- package/dist/index136.js +2 -2
- package/dist/index136.js.map +1 -1
- package/dist/index137.js +2 -2
- package/dist/index137.js.map +1 -1
- package/dist/index138.js +1 -1
- package/dist/index138.js.map +1 -1
- package/dist/index139.js +1 -1
- package/dist/index139.js.map +1 -1
- package/dist/index140.js +1 -1
- package/dist/index140.js.map +1 -1
- package/dist/index141.js +2 -2
- package/dist/index141.js.map +1 -1
- package/dist/index142.js +2 -2
- package/dist/index142.js.map +1 -1
- package/dist/index143.js +2 -2
- package/dist/index143.js.map +1 -1
- package/dist/index144.js +1 -1
- package/dist/index144.js.map +1 -1
- package/dist/index145.js +1 -1
- package/dist/index145.js.map +1 -1
- package/dist/index146.js +1 -1
- package/dist/index146.js.map +1 -1
- package/dist/index147.js +1 -1
- package/dist/index147.js.map +1 -1
- package/dist/index148.js +1 -1
- package/dist/index148.js.map +1 -1
- package/dist/index149.js +1 -1
- package/dist/index149.js.map +1 -1
- package/dist/index150.js +1 -1
- package/dist/index150.js.map +1 -1
- package/dist/index151.js +1 -1
- package/dist/index151.js.map +1 -1
- package/dist/index152.js +2 -2
- package/dist/index152.js.map +1 -1
- package/dist/index153.js +2 -2
- package/dist/index153.js.map +1 -1
- package/dist/index154.js +1 -1
- package/dist/index154.js.map +1 -1
- package/dist/index155.js +1 -1
- package/dist/index155.js.map +1 -1
- package/dist/index156.js +1 -1
- package/dist/index156.js.map +1 -1
- package/dist/index157.js +1 -1
- package/dist/index157.js.map +1 -1
- package/dist/index158.js +1 -1
- package/dist/index158.js.map +1 -1
- package/dist/index159.js +1 -1
- package/dist/index159.js.map +1 -1
- package/dist/index16.js +1 -1
- package/dist/index160.js +1 -1
- package/dist/index160.js.map +1 -1
- package/dist/index161.js +2 -2
- package/dist/index161.js.map +1 -1
- package/dist/index162.js +1 -1
- package/dist/index162.js.map +1 -1
- package/dist/index163.js +2 -2
- package/dist/index163.js.map +1 -1
- package/dist/index164.js +2 -2
- package/dist/index164.js.map +1 -1
- package/dist/index165.js +2 -2
- package/dist/index165.js.map +1 -1
- package/dist/index166.js +2 -2
- package/dist/index166.js.map +1 -1
- package/dist/index167.js +1 -1
- package/dist/index167.js.map +1 -1
- package/dist/index168.js +1 -1
- package/dist/index168.js.map +1 -1
- package/dist/index169.js +1 -1
- package/dist/index169.js.map +1 -1
- package/dist/index170.js +1 -1
- package/dist/index170.js.map +1 -1
- package/dist/index171.js +1 -1
- package/dist/index171.js.map +1 -1
- package/dist/index172.js +1 -1
- package/dist/index172.js.map +1 -1
- package/dist/index173.js +1 -1
- package/dist/index173.js.map +1 -1
- package/dist/index174.js +1 -1
- package/dist/index174.js.map +1 -1
- package/dist/index175.js +1 -1
- package/dist/index175.js.map +1 -1
- package/dist/index176.js +1 -1
- package/dist/index176.js.map +1 -1
- package/dist/index177.js +1 -1
- package/dist/index177.js.map +1 -1
- package/dist/index178.js +1 -1
- package/dist/index178.js.map +1 -1
- package/dist/index179.js +1 -1
- package/dist/index179.js.map +1 -1
- package/dist/index180.js +1 -1
- package/dist/index180.js.map +1 -1
- package/dist/index181.js +1 -1
- package/dist/index181.js.map +1 -1
- package/dist/index182.js +1 -1
- package/dist/index182.js.map +1 -1
- package/dist/index183.js +1 -1
- package/dist/index183.js.map +1 -1
- package/dist/index184.js +1 -1
- package/dist/index184.js.map +1 -1
- package/dist/index185.js +1 -1
- package/dist/index185.js.map +1 -1
- package/dist/index186.js +1 -1
- package/dist/index186.js.map +1 -1
- package/dist/index187.js +1 -1
- package/dist/index187.js.map +1 -1
- package/dist/index188.js +1 -1
- package/dist/index188.js.map +1 -1
- package/dist/index189.js +1 -1
- package/dist/index189.js.map +1 -1
- package/dist/index19.js +1 -1
- package/dist/index190.js +1 -1
- package/dist/index190.js.map +1 -1
- package/dist/index191.js +1 -1
- package/dist/index191.js.map +1 -1
- package/dist/index192.js +2 -2
- package/dist/index192.js.map +1 -1
- package/dist/index193.js +2 -2
- package/dist/index193.js.map +1 -1
- package/dist/index194.js +1 -1
- package/dist/index194.js.map +1 -1
- package/dist/index195.js +1 -1
- package/dist/index195.js.map +1 -1
- package/dist/index196.js +2 -2
- package/dist/index196.js.map +1 -1
- package/dist/index197.js +2 -2
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +1 -1
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +1 -1
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +1 -1
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +1 -1
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +1 -1
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +1 -1
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +1 -1
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +1 -1
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +1 -1
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +2 -2
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +2 -2
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +2 -2
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +1 -1
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +2 -149
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +149 -9
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +8 -5
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +5 -42
- package/dist/index214.js.map +1 -1
- package/dist/index215.js +40 -18
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +24 -0
- package/dist/index216.js.map +1 -0
- package/dist/index223.js +24 -68
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +75 -0
- package/dist/index224.js.map +1 -0
- package/dist/{index230.js → index231.js} +1 -1
- package/dist/{index230.js.map → index231.js.map} +1 -1
- package/dist/{index232.js → index233.js} +1 -1
- package/dist/{index232.js.map → index233.js.map} +1 -1
- package/dist/index24.js +1 -1
- package/dist/{index240.js → index241.js} +1 -1
- package/dist/{index240.js.map → index241.js.map} +1 -1
- package/dist/{index243.js → index244.js} +1 -1
- package/dist/{index243.js.map → index244.js.map} +1 -1
- package/dist/index253.js +169 -3
- package/dist/index253.js.map +1 -1
- package/dist/index254.js +7 -0
- package/dist/index254.js.map +1 -0
- package/dist/index256.js +18 -9
- package/dist/index256.js.map +1 -1
- package/dist/index257.js +9 -9
- package/dist/index257.js.map +1 -1
- package/dist/index258.js +9 -4
- package/dist/index258.js.map +1 -1
- package/dist/index259.js +5 -170
- package/dist/index259.js.map +1 -1
- package/dist/index26.js +1 -1
- package/dist/index260.js +170 -11
- package/dist/index260.js.map +1 -1
- package/dist/index261.js +11 -6
- package/dist/index261.js.map +1 -1
- package/dist/index262.js +5 -5
- package/dist/index262.js.map +1 -1
- package/dist/index263.js +5 -37
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +38 -2
- package/dist/index264.js.map +1 -1
- package/dist/index265.js +2 -8
- package/dist/index265.js.map +1 -1
- package/dist/index266.js +7 -326
- package/dist/index266.js.map +1 -1
- package/dist/index267.js +324 -47
- package/dist/index267.js.map +1 -1
- package/dist/index268.js +50 -2
- package/dist/index268.js.map +1 -1
- package/dist/index269.js +2 -76
- package/dist/index269.js.map +1 -1
- package/dist/index270.js +65 -82
- package/dist/index270.js.map +1 -1
- package/dist/index271.js +89 -48
- package/dist/index271.js.map +1 -1
- package/dist/index272.js +51 -7
- package/dist/index272.js.map +1 -1
- package/dist/index273.js +7 -4
- package/dist/index273.js.map +1 -1
- package/dist/index274.js +4 -51
- package/dist/index274.js.map +1 -1
- package/dist/index275.js +52 -2
- package/dist/index275.js.map +1 -1
- package/dist/index276.js +2 -2
- package/dist/index277.js +5 -0
- package/dist/index277.js.map +1 -0
- package/dist/index29.js +2 -2
- package/dist/index30.js +1 -1
- package/dist/index31.js +1 -1
- package/dist/index34.js +1 -1
- package/dist/index36.js +1 -1
- package/dist/index37.js +1 -1
- package/dist/index38.js +1 -1
- package/dist/index39.js +1 -1
- package/dist/index40.js +2 -2
- package/dist/index41.js +1 -1
- package/dist/index44.js +1 -1
- package/dist/index46.js +1 -1
- package/dist/index51.js +2 -2
- package/dist/index54.js +1 -1
- package/dist/index56.js +1 -1
- package/dist/index57.js +1 -1
- package/dist/index58.js +1 -1
- package/dist/index6.js +132 -130
- package/dist/index6.js.map +1 -1
- package/dist/index62.js +1 -1
- package/dist/index64.js +43 -49
- package/dist/index64.js.map +1 -1
- package/dist/index66.js +1 -1
- package/dist/index68.js +1 -1
- package/dist/index7.js +1 -1
- package/dist/index70.js +1 -1
- package/dist/index84.js +1 -1
- package/dist/index86.js +1 -1
- package/dist/index9.js +1 -1
- package/package.json +1 -1
- package/dist/assets/icons/document-commenting.svg +0 -3
- package/dist/index222.js +0 -31
- package/dist/index222.js.map +0 -1
- package/dist/index252.js +0 -173
- package/dist/index252.js.map +0 -1
- package/dist/index255.js +0 -22
- package/dist/index255.js.map +0 -1
package/dist/index6.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index6.js","sources":["../src/components/Icon/index.tsx"],"sourcesContent":["// TODO: `applyAttributesToElement` recursion drops `size` for nested elements (pre-existing).\nimport React from 'react';\nimport { ReactSVG } from 'react-svg';\nimport { getA11yNameAttributes, useAccessiblePress } from '../../utils/a11y';\n\n// Dynamically import icons using Vite's asset handling\nconst ICON_MAP: Record<string, string> = (import.meta as any).glob('/src/assets/icons/*.svg', {\n eager: true,\n query: '?url',\n import: 'default'\n});\n\nexport type RotationTypes = '0' | '45' | '90' | '135' | '180' | '225' | '270' | '315';\n\nexport type IconProps = {\n name: string;\n id?: string;\n className?: string;\n onClick?: (e?: React.MouseEvent<HTMLElement>) => void;\n /**\n * Accessible name when Icon is interactive (onClick is provided).\n * If omitted, we fall back to `name` and warn in development.\n */\n ariaLabel?: string;\n /**\n * ID(s) of visible element(s) that label this Icon when interactive.\n * Preferred over ariaLabel when a visible label exists (keeps SR and visual text in sync).\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this Icon when interactive (additional context).\n */\n ariaDescribedBy?: string;\n /**\n * Toggle state when Icon is used as a button (e.g., show/hide sidebar).\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaPressed?: boolean;\n /**\n * Expansion state when Icon controls a collapsible region/panel.\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaExpanded?: boolean;\n /**\n * ID of the element controlled by this Icon (for aria-controls).\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaControls?: string;\n fill?: string;\n stroke?: string;\n rotation?: RotationTypes;\n size?: number;\n shouldStopPropagation?: boolean;\n automationId?: string;\n /**\n * Disables the icon interaction while keeping it visible to AT with aria-disabled=\"true\".\n * Only applies when `onClick` is provided (interactive icon).\n */\n disabled?: boolean;\n /**\n * Native HTML title attribute — renders as a browser tooltip on hover.\n * For mouse users only; does not replace ariaLabel for screen readers.\n */\n htmlTitle?: string;\n /**\n * Override tab order. Pass tabIndex={0} to make a non-interactive or disabled icon\n * focusable (e.g. for tooltip access). Overrides the hook's default when provided.\n */\n tabIndex?: number;\n};\n\nconst applyAttributesToElement = (element: Element, fill?: string, stroke?: string, size?: number) => {\n // Only modify existing attributes\n if (fill && element.hasAttribute('fill')) {\n const currentFill = element.getAttribute('fill');\n // Only update if the current fill is not \"none\"\n if (currentFill !== 'none') {\n element.setAttribute('fill', fill);\n }\n }\n\n if (stroke && element.hasAttribute('stroke')) {\n element.setAttribute('stroke', stroke);\n }\n\n if (size && element.hasAttribute('width')) {\n element.setAttribute('width', size.toString());\n }\n\n if (size && element.hasAttribute('height')) {\n element.setAttribute('height', size.toString());\n }\n\n // Recursively apply to all child elements\n Array.from(element.children).forEach((child) => {\n applyAttributesToElement(child, fill, stroke);\n });\n};\n\nexport const Icon = React.forwardRef<HTMLDivElement, IconProps>((props, ref) => {\n const {\n name = '',\n id,\n className = '',\n onClick,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n ariaPressed,\n ariaExpanded,\n ariaControls,\n fill,\n stroke,\n rotation = '0',\n size,\n shouldStopPropagation = false,\n disabled = false,\n htmlTitle\n } = props;\n const iconRotationClasses = {\n '0': 'rotate-0',\n '45': 'rotate-45',\n '90': 'rotate-90',\n '135': 'rotate-[135deg]',\n '180': 'rotate-180',\n '225': 'rotate-[225deg]',\n '270': '-rotate-90',\n '315': '-rotate-45'\n };\n const src = ICON_MAP[`/src/assets/icons/${name}.svg`];\n\n if (!src) {\n console.error(`Icon \"${name}\" not found in ICON_MAP.`);\n return null;\n }\n\n const isInteractive = typeof onClick === 'function';\n const computedAriaLabel = ariaLabel || name;\n\n if (isInteractive && !ariaLabel && (import.meta as { env?: { DEV?: boolean } }).env?.DEV) {\n // eslint-disable-next-line no-console\n console.warn(\n `[se-design/Icon] Missing ariaLabel for clickable icon \"${name}\". ` +\n `Falling back to aria-label=\"${computedAriaLabel}\".`\n );\n }\n\n const hasTabIndex = props.tabIndex !== undefined;\n const { pressProps, role, tabIndex: hookTabIndex, isDisabled } = useAccessiblePress({\n isNative: false,\n onClick: isInteractive ? (e: React.MouseEvent<HTMLElement>) => onClick?.(e) : undefined,\n disabled: isInteractive ? disabled : false,\n tabIndex: props.tabIndex ?? 0,\n stopPropagation: shouldStopPropagation\n });\n\n // Compute accessible name/description props with correct precedence (aligns with Button/Link).\n const accessibleNameProps = getA11yNameAttributes({\n ariaLabel: computedAriaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n });\n\n const finalTabIndex = hasTabIndex ? props.tabIndex : hookTabIndex;\n const interactiveProps = isInteractive\n ? {\n ...pressProps,\n role,\n tabIndex: finalTabIndex,\n ...accessibleNameProps,\n 'aria-pressed': ariaPressed,\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls || undefined\n }\n : undefined;\n\n return (\n <div\n ref={ref}\n id={id}\n className={`se-design-svg-wrapper transition-transform duration-250 ease-linear rounded-[3px] ${\n isInteractive ? `${isDisabled ? 'opacity-50 cursor-default' : 'cursor-pointer focus-outline'}` : ''\n } ${className} ${iconRotationClasses[rotation]}`}\n aria-hidden={!isInteractive && !hasTabIndex ? 'true' : undefined}\n title={htmlTitle}\n {...interactiveProps}\n {...(!isInteractive && hasTabIndex && { tabIndex: props.tabIndex, ...accessibleNameProps })}\n data-automation-id={props?.automationId}\n >\n <ReactSVG\n src={src}\n wrapper=\"span\"\n beforeInjection={(svg) => {\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('role', 'none');\n applyAttributesToElement(svg, fill, stroke, size);\n }}\n />\n </div>\n );\n});\n\nIcon.displayName = 'Icon';\n"],"names":["ICON_MAP","import","applyAttributesToElement","element","fill","stroke","size","hasAttribute","getAttribute","setAttribute","toString","Array","from","children","forEach","child","Icon","React","forwardRef","props","ref","name","id","className","onClick","ariaLabel","ariaLabelledBy","ariaDescribedBy","ariaPressed","ariaExpanded","ariaControls","rotation","shouldStopPropagation","disabled","htmlTitle","iconRotationClasses","src","console","error","isInteractive","computedAriaLabel","hasTabIndex","tabIndex","undefined","pressProps","role","hookTabIndex","isDisabled","useAccessiblePress","isNative","e","stopPropagation","accessibleNameProps","getA11yNameAttributes","finalTabIndex","interactiveProps","createElement","_extends","title","automationId","ReactSVG","wrapper","beforeInjection","svg","displayName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,KAAoCC,uBAAAA,OAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,4BAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,yCAAAA;AAAAA,EAAAA,2CAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,iDAAAA;AAAAA,EAAAA,gDAAAA;AAAAA,EAAAA,2CAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,6CAAAA;AAAAA,EAAAA,8CAAAA;AAAAA,EAAAA,6CAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,6BAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,6CAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,6CAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,yCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,sCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,0CAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,0CAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,yCAAAA;AAAAA,EAAAA,gCAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,6BAAAA;AAAAA,EAAAA,kCAAAA;AAAAA,EAAAA,mCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,uCAAAA;AAAAA,EAAAA,6BAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,8BAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,oCAAAA;AAAAA,EAAAA,+BAAAA;AAAAA,EAAAA,iCAAAA;AAAAA,EAAAA,wCAAAA;AAAAA,EAAAA,qCAAAA;AAAAA,EAAAA,2CAAAA;AAAAA,CAAAA,GAiEpCC,IAA2BA,CAACC,GAAkBC,GAAeC,GAAiBC,MAAkB;AAEpG,EAAIF,KAAQD,EAAQI,aAAa,MAAM,KACjBJ,EAAQK,aAAa,MAAM,MAE3B,UAClBL,EAAQM,aAAa,QAAQL,CAAI,GAIjCC,KAAUF,EAAQI,aAAa,QAAQ,KACzCJ,EAAQM,aAAa,UAAUJ,CAAM,GAGnCC,KAAQH,EAAQI,aAAa,OAAO,KACtCJ,EAAQM,aAAa,SAASH,EAAKI,SAAAA,CAAU,GAG3CJ,KAAQH,EAAQI,aAAa,QAAQ,KACvCJ,EAAQM,aAAa,UAAUH,EAAKI,SAAAA,CAAU,GAIhDC,MAAMC,KAAKT,EAAQU,QAAQ,EAAEC,QAASC,CAAAA,MAAU;AAC9Cb,IAAAA,EAAyBa,GAAOX,GAAMC,CAAM;AAAA,EAC9C,CAAC;AACH,GAEaW,KAAOC,gBAAAA,EAAMC,WAAsC,CAACC,GAAOC,MAAQ;AAC9E,QAAM;AAAA,IACJC,MAAAA,IAAO;AAAA,IACPC,IAAAA;AAAAA,IACAC,WAAAA,IAAY;AAAA,IACZC,SAAAA;AAAAA,IACAC,WAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAC,iBAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACAC,cAAAA;AAAAA,IACA1B,MAAAA;AAAAA,IACAC,QAAAA;AAAAA,IACA0B,UAAAA,IAAW;AAAA,IACXzB,MAAAA;AAAAA,IACA0B,uBAAAA,IAAwB;AAAA,IACxBC,UAAAA,IAAW;AAAA,IACXC,WAAAA;AAAAA,EAAAA,IACEf,GACEgB,IAAsB;AAAA,IAC1B,GAAK;AAAA,IACL,IAAM;AAAA,IACN,IAAM;AAAA,IACN,KAAO;AAAA,IACP,KAAO;AAAA,IACP,KAAO;AAAA,IACP,KAAO;AAAA,IACP,KAAO;AAAA,EAAA,GAEHC,IAAMpC,GAAS,qBAAqBqB,CAAI,MAAM;AAEpD,MAAI,CAACe;AACHC,mBAAQC,MAAM,SAASjB,CAAI,0BAA0B,GAC9C;AAGT,QAAMkB,IAAgB,OAAOf,KAAY,YACnCgB,IAAoBf,KAAaJ,GAUjCoB,IAActB,EAAMuB,aAAaC,QACjC;AAAA,IAAEC,YAAAA;AAAAA,IAAYC,MAAAA;AAAAA,IAAMH,UAAUI;AAAAA,IAAcC,YAAAA;AAAAA,EAAAA,IAAeC,GAAmB;AAAA,IAClFC,UAAU;AAAA,IACVzB,SAASe,IAAgB,CAACW,MAAqC1B,IAAU0B,CAAC,IAAIP;AAAAA,IAC9EV,UAAUM,IAAgBN,IAAW;AAAA,IACrCS,UAAUvB,EAAMuB,YAAY;AAAA,IAC5BS,iBAAiBnB;AAAAA,EAAAA,CAClB,GAGKoB,IAAsBC,GAAsB;AAAA,IAChD5B,WAAWe;AAAAA,IACXd,gBAAAA;AAAAA,IACAC,iBAAAA;AAAAA,EAAAA,CACD,GAEK2B,IAAgBb,IAActB,EAAMuB,WAAWI,GAC/CS,IAAmBhB,IACrB;AAAA,IACE,GAAGK;AAAAA,IACHC,MAAAA;AAAAA,IACAH,UAAUY;AAAAA,IACV,GAAGF;AAAAA,IACH,gBAAgBxB;AAAAA,IAChB,iBAAiBC;AAAAA,IACjB,iBAAiBC,KAAgBa;AAAAA,EAAAA,IAEnCA;AAEJ,SACE1B,gBAAAA,EAAAuC,cAAA,OAAAC,EAAA;AAAA,IACErC,KAAAA;AAAAA,IACAE,IAAAA;AAAAA,IACAC,WAAW,qFACTgB,IAAgB,GAAGQ,IAAa,8BAA8B,8BAA8B,KAAK,EAAE,IACjGxB,CAAS,IAAIY,EAAoBJ,CAAQ,CAAC;AAAA,IAC9C,eAAa,CAACQ,KAAiB,CAACE,IAAc,SAASE;AAAAA,IACvDe,OAAOxB;AAAAA,EAAAA,GACHqB,GACC,CAAChB,KAAiBE,KAAe;AAAA,IAAEC,UAAUvB,EAAMuB;AAAAA,IAAU,GAAGU;AAAAA,EAAAA,GAAqB;AAAA,IAC1F,sBAAoBjC,GAAOwC;AAAAA,EAAAA,CAAa,GAExC1C,gBAAAA,EAAAuC,cAACI,IAAQ;AAAA,IACPxB,KAAAA;AAAAA,IACAyB,SAAQ;AAAA,IACRC,iBAAkBC,CAAAA,MAAQ;AACxBA,MAAAA,EAAItD,aAAa,eAAe,MAAM,GACtCsD,EAAItD,aAAa,QAAQ,MAAM,GAC/BP,EAAyB6D,GAAK3D,GAAMC,GAAQC,CAAI;AAAA,IAClD;AAAA,EAAA,CACD,CACE;AAET,CAAC;AAEDU,GAAKgD,cAAc;"}
|
|
1
|
+
{"version":3,"file":"index6.js","sources":["../src/components/Icon/index.tsx"],"sourcesContent":["// TODO: `applyAttributesToElement` recursion drops `size` for nested elements (pre-existing).\nimport React from 'react';\nimport { ReactSVG } from 'react-svg';\nimport { getA11yNameAttributes, useAccessiblePress } from '../../utils/a11y';\n\n// Dynamically import icons using Vite's asset handling\nconst ICON_MAP: Record<string, string> = (import.meta as any).glob('/src/assets/icons/*.svg', {\n eager: true,\n query: '?url',\n import: 'default'\n});\n\nexport type RotationTypes = '0' | '45' | '90' | '135' | '180' | '225' | '270' | '315';\n\nexport type IconProps = {\n name: string;\n id?: string;\n className?: string;\n onClick?: (e?: React.MouseEvent<HTMLElement>) => void;\n /**\n * Accessible name when Icon is interactive (onClick is provided).\n * If omitted, we fall back to `name` and warn in development.\n */\n ariaLabel?: string;\n /**\n * ID(s) of visible element(s) that label this Icon when interactive.\n * Preferred over ariaLabel when a visible label exists (keeps SR and visual text in sync).\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this Icon when interactive (additional context).\n */\n ariaDescribedBy?: string;\n /**\n * Toggle state when Icon is used as a button (e.g., show/hide sidebar).\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaPressed?: boolean;\n /**\n * Expansion state when Icon controls a collapsible region/panel.\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaExpanded?: boolean;\n /**\n * ID of the element controlled by this Icon (for aria-controls).\n * Only applies when `onClick` is provided (interactive icon).\n */\n ariaControls?: string;\n fill?: string;\n stroke?: string;\n rotation?: RotationTypes;\n size?: number;\n shouldStopPropagation?: boolean;\n automationId?: string;\n /**\n * Disables the icon interaction while keeping it visible to AT with aria-disabled=\"true\".\n * Only applies when `onClick` is provided (interactive icon).\n */\n disabled?: boolean;\n /**\n * Native HTML title attribute — renders as a browser tooltip on hover.\n * For mouse users only; does not replace ariaLabel for screen readers.\n */\n htmlTitle?: string;\n /**\n * Override tab order. Pass tabIndex={0} to make a non-interactive or disabled icon\n * focusable (e.g. for tooltip access). Overrides the hook's default when provided.\n */\n tabIndex?: number;\n};\n\nconst applyAttributesToElement = (element: Element, fill?: string, stroke?: string, size?: number) => {\n // Only modify existing attributes\n if (fill && element.hasAttribute('fill')) {\n const currentFill = element.getAttribute('fill');\n // Only update if the current fill is not \"none\"\n if (currentFill !== 'none') {\n element.setAttribute('fill', fill);\n }\n }\n\n if (stroke && element.hasAttribute('stroke')) {\n element.setAttribute('stroke', stroke);\n }\n\n if (size && element.hasAttribute('width')) {\n element.setAttribute('width', size.toString());\n }\n\n if (size && element.hasAttribute('height')) {\n element.setAttribute('height', size.toString());\n }\n\n // Recursively apply to all child elements\n Array.from(element.children).forEach((child) => {\n applyAttributesToElement(child, fill, stroke);\n });\n};\n\nexport const Icon = React.forwardRef<HTMLDivElement, IconProps>((props, ref) => {\n const {\n name = '',\n id,\n className = '',\n onClick,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n ariaPressed,\n ariaExpanded,\n ariaControls,\n fill,\n stroke,\n rotation = '0',\n size,\n shouldStopPropagation = false,\n disabled = false,\n htmlTitle\n } = props;\n const iconRotationClasses = {\n '0': 'rotate-0',\n '45': 'rotate-45',\n '90': 'rotate-90',\n '135': 'rotate-[135deg]',\n '180': 'rotate-180',\n '225': 'rotate-[225deg]',\n '270': '-rotate-90',\n '315': '-rotate-45'\n };\n const src = ICON_MAP[`/src/assets/icons/${name}.svg`];\n\n if (!src) {\n console.error(`Icon \"${name}\" not found in ICON_MAP.`);\n return null;\n }\n\n const isInteractive = typeof onClick === 'function';\n const computedAriaLabel = ariaLabel || name;\n\n if (isInteractive && !ariaLabel && (import.meta as { env?: { DEV?: boolean } }).env?.DEV) {\n // eslint-disable-next-line no-console\n console.warn(\n `[se-design/Icon] Missing ariaLabel for clickable icon \"${name}\". ` +\n `Falling back to aria-label=\"${computedAriaLabel}\".`\n );\n }\n\n const hasTabIndex = props.tabIndex !== undefined;\n const { pressProps, role, tabIndex: hookTabIndex, isDisabled } = useAccessiblePress({\n isNative: false,\n onClick: isInteractive ? (e: React.MouseEvent<HTMLElement>) => onClick?.(e) : undefined,\n disabled: isInteractive ? disabled : false,\n tabIndex: props.tabIndex ?? 0,\n stopPropagation: shouldStopPropagation\n });\n\n // Compute accessible name/description props with correct precedence (aligns with Button/Link).\n const accessibleNameProps = getA11yNameAttributes({\n ariaLabel: computedAriaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n });\n\n const finalTabIndex = hasTabIndex ? props.tabIndex : hookTabIndex;\n const interactiveProps = isInteractive\n ? {\n ...pressProps,\n role,\n tabIndex: finalTabIndex,\n ...accessibleNameProps,\n 'aria-pressed': ariaPressed,\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls || undefined\n }\n : undefined;\n\n return (\n <div\n ref={ref}\n id={id}\n className={`se-design-svg-wrapper transition-transform duration-250 ease-linear rounded-[3px] ${\n isInteractive ? `${isDisabled ? 'opacity-50 cursor-default' : 'cursor-pointer focus-outline'}` : ''\n } ${className} ${iconRotationClasses[rotation]}`}\n aria-hidden={!isInteractive && !hasTabIndex ? 'true' : undefined}\n title={htmlTitle}\n {...interactiveProps}\n {...(!isInteractive && hasTabIndex && { tabIndex: props.tabIndex, ...accessibleNameProps })}\n data-automation-id={props?.automationId}\n >\n <ReactSVG\n src={src}\n wrapper=\"span\"\n beforeInjection={(svg) => {\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('role', 'none');\n applyAttributesToElement(svg, fill, stroke, size);\n }}\n />\n </div>\n );\n});\n\nIcon.displayName = 'Icon';\n"],"names":["ICON_MAP","import","applyAttributesToElement","element","fill","stroke","size","hasAttribute","getAttribute","setAttribute","toString","Array","from","children","forEach","child","Icon","React","forwardRef","props","ref","name","id","className","onClick","ariaLabel","ariaLabelledBy","ariaDescribedBy","ariaPressed","ariaExpanded","ariaControls","rotation","shouldStopPropagation","disabled","htmlTitle","iconRotationClasses","src","console","error","isInteractive","computedAriaLabel","hasTabIndex","tabIndex","undefined","pressProps","role","hookTabIndex","isDisabled","useAccessiblePress","isNative","e","stopPropagation","accessibleNameProps","getA11yNameAttributes","finalTabIndex","interactiveProps","createElement","_extends","title","automationId","ReactSVG","wrapper","beforeInjection","svg","displayName"],"mappings":"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"}
|
package/dist/index62.js
CHANGED
package/dist/index64.js
CHANGED
|
@@ -1,95 +1,89 @@
|
|
|
1
|
-
import e, { useRef as
|
|
2
|
-
import { CustomModal as
|
|
3
|
-
import { Icon as
|
|
1
|
+
import e, { useRef as S, useState as f } from "react";
|
|
2
|
+
import { CustomModal as T } from "./index13.js";
|
|
3
|
+
import { Icon as v } from "./index6.js";
|
|
4
4
|
/* empty css */
|
|
5
|
-
const
|
|
6
|
-
children:
|
|
5
|
+
const C = ({
|
|
6
|
+
children: c = null,
|
|
7
7
|
title: n = "",
|
|
8
8
|
onClose: s = () => {
|
|
9
9
|
},
|
|
10
|
-
showCloseIcon:
|
|
10
|
+
showCloseIcon: l = !1,
|
|
11
11
|
showBackButton: a = !1,
|
|
12
|
-
onBack:
|
|
12
|
+
onBack: m = () => {
|
|
13
13
|
},
|
|
14
|
-
className:
|
|
14
|
+
className: i = "",
|
|
15
15
|
automationId: r = "",
|
|
16
|
-
minHeight:
|
|
17
|
-
maxHeight: c = ""
|
|
16
|
+
minHeight: u = "auto"
|
|
18
17
|
}) => {
|
|
19
|
-
const t =
|
|
20
|
-
|
|
21
|
-
},
|
|
22
|
-
if (!
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
},
|
|
26
|
-
if (!
|
|
27
|
-
|
|
18
|
+
const t = S(null), [g, p] = f(0), [E, h] = f(0), [b, Y] = f(!1), k = (o) => {
|
|
19
|
+
p(o.touches[0].clientY), h(o.touches[0].clientY), Y(!0);
|
|
20
|
+
}, N = (o) => {
|
|
21
|
+
if (!b) return;
|
|
22
|
+
const d = o.touches[0].clientY, x = d - g;
|
|
23
|
+
x > 0 && (h(d), t.current && (t.current.style.transform = `translateY(${x}px)`));
|
|
24
|
+
}, y = () => {
|
|
25
|
+
if (!b) return;
|
|
26
|
+
E - g > 60 ? s() : t.current && (t.current.style.transform = "translateY(0)"), Y(!1), p(0), h(0);
|
|
28
27
|
};
|
|
29
28
|
return /* @__PURE__ */ e.createElement("div", {
|
|
30
29
|
ref: t,
|
|
31
|
-
className: `se-design-bottom-sheet relative h-max max-h-[98vh] rounded-t-2xl flex flex-col pt-5 ${
|
|
30
|
+
className: `se-design-bottom-sheet relative h-max max-h-[98vh] rounded-t-2xl flex flex-col pt-5 ${i}`,
|
|
32
31
|
onClick: (o) => o.stopPropagation(),
|
|
33
|
-
onTouchStart:
|
|
34
|
-
onTouchMove:
|
|
35
|
-
onTouchEnd:
|
|
32
|
+
onTouchStart: k,
|
|
33
|
+
onTouchMove: N,
|
|
34
|
+
onTouchEnd: y,
|
|
36
35
|
"data-automation-id": r,
|
|
37
36
|
style: {
|
|
38
|
-
minHeight:
|
|
39
|
-
...c ? {
|
|
40
|
-
maxHeight: c
|
|
41
|
-
} : {}
|
|
37
|
+
minHeight: u
|
|
42
38
|
}
|
|
43
39
|
}, (n || a) && /* @__PURE__ */ e.createElement("div", {
|
|
44
40
|
className: "se-design-bottom-sheet-header flex items-center justify-left gap-3 mr-6 px-4"
|
|
45
|
-
}, a && /* @__PURE__ */ e.createElement(
|
|
41
|
+
}, a && /* @__PURE__ */ e.createElement(v, {
|
|
46
42
|
name: "back",
|
|
47
43
|
stroke: "var(--color-gray-700)",
|
|
48
|
-
onClick:
|
|
44
|
+
onClick: m,
|
|
49
45
|
className: "se-design-bottom-sheet-back-icon cursor-pointer",
|
|
50
46
|
automationId: `${r}-back-icon`
|
|
51
47
|
}), n && /* @__PURE__ */ e.createElement("div", {
|
|
52
48
|
className: "se-design-bottom-sheet-title text-lg font-semibold"
|
|
53
|
-
}, n)),
|
|
49
|
+
}, n)), l && /* @__PURE__ */ e.createElement(v, {
|
|
54
50
|
name: "close",
|
|
55
51
|
onClick: s,
|
|
56
52
|
className: "se-design-bottom-sheet-close-icon absolute top-6 right-4 cursor-pointer z-10",
|
|
57
53
|
automationId: `${r}-close-icon`
|
|
58
54
|
}), /* @__PURE__ */ e.createElement("div", {
|
|
59
55
|
className: "se-design-bottom-sheet-content px-4 pb-5 flex-1 min-h-0 overflow-y-auto"
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
isOpen:
|
|
56
|
+
}, c));
|
|
57
|
+
}, I = ({
|
|
58
|
+
isOpen: c = !1,
|
|
63
59
|
title: n = "",
|
|
64
60
|
onClose: s = () => {
|
|
65
61
|
},
|
|
66
|
-
children:
|
|
62
|
+
children: l = null,
|
|
67
63
|
showCloseIcon: a = !0,
|
|
68
|
-
showBackButton:
|
|
69
|
-
onBack:
|
|
64
|
+
showBackButton: m = !1,
|
|
65
|
+
onBack: i = () => {
|
|
70
66
|
},
|
|
71
67
|
className: r = "",
|
|
72
|
-
automationId:
|
|
73
|
-
minHeight:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
isOpen: l,
|
|
68
|
+
automationId: u = "bottomsheet",
|
|
69
|
+
minHeight: t = ""
|
|
70
|
+
}) => /* @__PURE__ */ e.createElement(T, {
|
|
71
|
+
isOpen: c,
|
|
77
72
|
onClose: s,
|
|
78
73
|
onModalClick: s,
|
|
79
74
|
className: "custom-bottom-sheet",
|
|
80
|
-
renderModalContent: () => /* @__PURE__ */ e.createElement(
|
|
75
|
+
renderModalContent: () => /* @__PURE__ */ e.createElement(C, {
|
|
81
76
|
title: n,
|
|
82
77
|
onClose: s,
|
|
83
78
|
showCloseIcon: a,
|
|
84
|
-
showBackButton:
|
|
85
|
-
onBack:
|
|
79
|
+
showBackButton: m,
|
|
80
|
+
onBack: i,
|
|
86
81
|
className: r,
|
|
87
|
-
automationId:
|
|
88
|
-
minHeight:
|
|
89
|
-
|
|
90
|
-
}, m)
|
|
82
|
+
automationId: u,
|
|
83
|
+
minHeight: t
|
|
84
|
+
}, l)
|
|
91
85
|
});
|
|
92
86
|
export {
|
|
93
|
-
|
|
87
|
+
I as BottomSheet
|
|
94
88
|
};
|
|
95
89
|
//# sourceMappingURL=index64.js.map
|
package/dist/index64.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index64.js","sources":["../src/components/BottomSheet/index.tsx"],"sourcesContent":["import React, { FC, useState, useRef } from 'react';\nimport { CustomModal } from '../CustomModal';\nimport { Icon } from '../Icon';\n\nimport './style.scss';\n\nexport interface BottomSheetProps {\n isOpen: boolean;\n title?: string;\n onClose: () => void;\n showCloseIcon?: boolean;\n showBackButton?: boolean;\n onBack?: () => void;\n children: React.ReactNode;\n className?: string;\n automationId?: string;\n minHeight?: string;\n
|
|
1
|
+
{"version":3,"file":"index64.js","sources":["../src/components/BottomSheet/index.tsx"],"sourcesContent":["import React, { FC, useState, useRef } from 'react';\nimport { CustomModal } from '../CustomModal';\nimport { Icon } from '../Icon';\n\nimport './style.scss';\n\nexport interface BottomSheetProps {\n isOpen: boolean;\n title?: string;\n onClose: () => void;\n showCloseIcon?: boolean;\n showBackButton?: boolean;\n onBack?: () => void;\n children: React.ReactNode;\n className?: string;\n automationId?: string;\n minHeight?: string;\n}\n\ninterface BottomSheetContentProps {\n title?: string;\n onClose: () => void;\n showCloseIcon?: boolean;\n showBackButton?: boolean;\n onBack?: () => void;\n children: React.ReactNode;\n className?: string;\n automationId?: string;\n minHeight?: string;\n}\n\nconst BottomSheetContent: FC<BottomSheetContentProps> = ({\n children = null,\n title = '',\n onClose = () => {},\n showCloseIcon = false,\n showBackButton = false,\n onBack = () => {},\n className = '',\n automationId = '',\n minHeight = 'auto'\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [startY, setStartY] = useState<number>(0);\n const [currentY, setCurrentY] = useState<number>(0);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n setStartY(e.touches[0].clientY);\n setCurrentY(e.touches[0].clientY);\n setIsDragging(true);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging) return;\n\n const touchY = e.touches[0].clientY;\n const deltaY = touchY - startY;\n\n // Only allow dragging down\n if (deltaY > 0) {\n setCurrentY(touchY);\n if (contentRef.current) {\n contentRef.current.style.transform = `translateY(${deltaY}px)`;\n }\n }\n };\n\n const handleTouchEnd = () => {\n if (!isDragging) return;\n\n const deltaY = currentY - startY;\n const threshold = 60; // pixels to swipe down to trigger close\n\n if (deltaY > threshold) {\n // Trigger close\n onClose();\n } else {\n // Reset position\n if (contentRef.current) {\n contentRef.current.style.transform = 'translateY(0)';\n }\n }\n\n setIsDragging(false);\n setStartY(0);\n setCurrentY(0);\n };\n\n return (\n <div\n ref={contentRef}\n className={`se-design-bottom-sheet relative h-max max-h-[98vh] rounded-t-2xl flex flex-col pt-5 ${className}`}\n onClick={(e) => e.stopPropagation()}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n data-automation-id={automationId}\n style={{ minHeight }}\n >\n {(title || showBackButton) && (\n <div className=\"se-design-bottom-sheet-header flex items-center justify-left gap-3 mr-6 px-4\">\n {showBackButton && (\n <Icon\n name=\"back\"\n stroke=\"var(--color-gray-700)\"\n onClick={onBack}\n className=\"se-design-bottom-sheet-back-icon cursor-pointer\"\n automationId={`${automationId}-back-icon`}\n />\n )}\n {title && <div className=\"se-design-bottom-sheet-title text-lg font-semibold\">{title}</div>}\n </div>\n )}\n {showCloseIcon && (\n <Icon\n name=\"close\"\n onClick={onClose}\n className=\"se-design-bottom-sheet-close-icon absolute top-6 right-4 cursor-pointer z-10\"\n automationId={`${automationId}-close-icon`}\n />\n )}\n <div className=\"se-design-bottom-sheet-content px-4 pb-5 flex-1 min-h-0 overflow-y-auto\">{children}</div>\n </div>\n );\n};\n\nexport const BottomSheet: FC<BottomSheetProps> = ({\n isOpen = false,\n title = '',\n onClose = () => {},\n children = null,\n showCloseIcon = true,\n showBackButton = false,\n onBack = () => {},\n className = '',\n automationId = 'bottomsheet',\n minHeight = ''\n}) => {\n return (\n <CustomModal\n isOpen={isOpen}\n onClose={onClose}\n onModalClick={onClose}\n className=\"custom-bottom-sheet\"\n renderModalContent={() => (\n <BottomSheetContent\n title={title}\n onClose={onClose}\n showCloseIcon={showCloseIcon}\n showBackButton={showBackButton}\n onBack={onBack}\n className={className}\n automationId={automationId}\n minHeight={minHeight}\n >\n {children}\n </BottomSheetContent>\n )}\n />\n );\n};\n"],"names":["BottomSheetContent","children","title","onClose","showCloseIcon","showBackButton","onBack","className","automationId","minHeight","contentRef","useRef","startY","setStartY","useState","currentY","setCurrentY","isDragging","setIsDragging","handleTouchStart","e","touches","clientY","handleTouchMove","touchY","deltaY","current","style","transform","handleTouchEnd","React","createElement","ref","onClick","stopPropagation","onTouchStart","onTouchMove","onTouchEnd","Icon","name","stroke","BottomSheet","isOpen","CustomModal","onModalClick","renderModalContent"],"mappings":"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"}
|
package/dist/index66.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import n, { useState as u, useCallback as y, useEffect as P } from "react";
|
|
2
2
|
import { Popover as I } from "./index19.js";
|
|
3
|
-
import { useStableId as k } from "./
|
|
3
|
+
import { useStableId as k } from "./index214.js";
|
|
4
4
|
/* empty css */
|
|
5
5
|
function p() {
|
|
6
6
|
return p = Object.assign ? Object.assign.bind() : function(r) {
|
package/dist/index68.js
CHANGED
|
@@ -2,7 +2,7 @@ import F, { useState as ot, useRef as X, useEffect as $ } from "react";
|
|
|
2
2
|
import { createPortal as nt } from "react-dom";
|
|
3
3
|
import { Icon as it } from "./index6.js";
|
|
4
4
|
import { Button as rt } from "./index4.js";
|
|
5
|
-
import { debounce as lt } from "./
|
|
5
|
+
import { debounce as lt } from "./index233.js";
|
|
6
6
|
const q = 500, S = 50, U = 150, st = {
|
|
7
7
|
"top-left": {
|
|
8
8
|
rotate: "315",
|
package/dist/index7.js
CHANGED
package/dist/index70.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Badge as j } from "./index10.js";
|
|
|
4
4
|
import { Icon as q } from "./index6.js";
|
|
5
5
|
import { Link as N } from "./index69.js";
|
|
6
6
|
import { CustomModal as G } from "./index13.js";
|
|
7
|
-
import { useStableId as J } from "./
|
|
7
|
+
import { useStableId as J } from "./index214.js";
|
|
8
8
|
/* empty css */
|
|
9
9
|
const K = {
|
|
10
10
|
lg: {
|
package/dist/index84.js
CHANGED
package/dist/index86.js
CHANGED
package/dist/index9.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import o from "react";
|
|
2
|
-
import { useStableId as A } from "./
|
|
2
|
+
import { useStableId as A } from "./index214.js";
|
|
3
3
|
import { getA11yNameAttributes as O } from "./index86.js";
|
|
4
4
|
import { useAccessiblePress as C } from "./index72.js";
|
|
5
5
|
import "./index77.js";
|
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M1.33337 8.2668V10.2668C1.33337 13.6001 2.66671 14.9335 6.00004 14.9335H10C13.3334 14.9335 14.6667 13.6001 14.6667 10.2668V6.2668C14.6667 4.1868 14.1467 2.88012 12.94 2.20012C12.6 2.00679 11.92 1.86012 11.3 1.76012M8.66671 8.93346H12M7.33337 11.6001H12M6.11552 1.65807C6.40868 2.71346 7.22954 3.53431 8.28492 3.82747M6.61377 1.16008L3.15448 4.6194C3.01767 4.75621 2.89062 5.01028 2.8613 5.19595L2.67563 6.51518C2.60723 6.99402 2.93949 7.32628 3.41832 7.25787L4.73755 7.0722C4.92322 7.04288 5.18707 6.91583 5.3141 6.77902L8.77342 3.31973C9.36952 2.72363 9.65291 2.02981 8.77342 1.15033C7.90371 0.280611 7.20987 0.563981 6.61377 1.16008Z" stroke="currentColor" stroke-width="1.2" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
-
</svg>
|
package/dist/index222.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { useCallback as y, useEffect as d } from "react";
|
|
2
|
-
function p({
|
|
3
|
-
containerRef: E,
|
|
4
|
-
onDismiss: e,
|
|
5
|
-
enabled: t = !0,
|
|
6
|
-
useDocumentListener: u = !1,
|
|
7
|
-
preventDefault: c = !0,
|
|
8
|
-
stopPropagation: n = !0
|
|
9
|
-
}) {
|
|
10
|
-
const f = y((r) => {
|
|
11
|
-
!t || !e || r.key !== "Escape" || (c && r.preventDefault(), n && r.stopPropagation(), e());
|
|
12
|
-
}, [t, e, c, n]);
|
|
13
|
-
return d(() => {
|
|
14
|
-
if (!u || !t || !e) return;
|
|
15
|
-
const r = E?.current, a = (o) => {
|
|
16
|
-
o.key === "Escape" && (r && !r.contains(document.activeElement) || (c && o.preventDefault(), n && o.stopPropagation(), e()));
|
|
17
|
-
};
|
|
18
|
-
return document.addEventListener("keydown", a, {
|
|
19
|
-
capture: !0
|
|
20
|
-
}), () => document.removeEventListener("keydown", a, {
|
|
21
|
-
capture: !0
|
|
22
|
-
});
|
|
23
|
-
}, [u, t, e, E, c, n]), {
|
|
24
|
-
onKeyDown: u ? () => {
|
|
25
|
-
} : f
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
export {
|
|
29
|
-
p as useDismissOnEscape
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=index222.js.map
|
package/dist/index222.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index222.js","sources":["../src/utils/a11y/useDismissOnEscape.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport interface UseDismissOnEscapeOptions<T extends HTMLElement = HTMLElement> {\n /**\n * Container element ref — used for focus-check in document-level mode,\n * and for the returned onKeyDown in React-event mode.\n */\n containerRef?: RefObject<T | null>;\n /**\n * Callback when Escape key is pressed.\n */\n onDismiss?: () => void;\n /**\n * Whether the Escape handler is active.\n * Default: true\n */\n enabled?: boolean;\n /**\n * Use a native document-level capture listener instead of React's event system.\n * Only use this when React events can't reach the container (e.g. portals outside\n * the container's DOM tree). Prefer the default (false) for layered dismiss support.\n * Default: false\n */\n useDocumentListener?: boolean;\n /**\n * Whether to call e.preventDefault() on Escape.\n * Default: true\n */\n preventDefault?: boolean;\n /**\n * Whether to call e.stopPropagation() on Escape.\n * In React-event mode this is the layered-dismiss mechanism — set false only if\n * you want the event to continue bubbling to a parent dismiss handler.\n * Default: true\n */\n stopPropagation?: boolean;\n}\n\nexport interface UseDismissOnEscapeReturn {\n /**\n * Spread on the container element. In document-listener mode this is a no-op object.\n */\n onKeyDown: (e: React.KeyboardEvent) => void;\n}\n\n/**\n * Hook to handle Escape key dismissal.\n *\n * Default mode: returns an onKeyDown handler for the container element.\n * Uses React's synthetic events so child stopPropagation() is respected,\n * enabling layered dismiss (e.g. dropdown closes before sidebar).\n *\n * Document-listener mode (useDocumentListener: true): registers a native\n * capture listener on document. Use only when focus may be in a portal\n * outside the container's DOM tree.\n */\nexport function useDismissOnEscape<T extends HTMLElement = HTMLElement>({\n containerRef,\n onDismiss,\n enabled = true,\n useDocumentListener = false,\n preventDefault = true,\n stopPropagation = true,\n}: UseDismissOnEscapeOptions<T>): UseDismissOnEscapeReturn {\n // React-event mode: return handler to spread on container\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!enabled || !onDismiss || e.key !== 'Escape') return;\n preventDefault && e.preventDefault();\n stopPropagation && e.stopPropagation();\n onDismiss();\n },\n [enabled, onDismiss, preventDefault, stopPropagation]\n );\n\n // Document-listener mode: native capture handler\n useEffect(() => {\n if (!useDocumentListener || !enabled || !onDismiss) return;\n\n const container = containerRef?.current;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n // Only fire if focus is within the container (if provided)\n if (container && !container.contains(document.activeElement)) return;\n preventDefault && e.preventDefault();\n stopPropagation && e.stopPropagation();\n onDismiss();\n };\n\n document.addEventListener('keydown', handleEscape, { capture: true });\n return () => document.removeEventListener('keydown', handleEscape, { capture: true });\n }, [useDocumentListener, enabled, onDismiss, containerRef, preventDefault, stopPropagation]);\n\n return { onKeyDown: useDocumentListener ? (() => {}) : onKeyDown };\n}\n"],"names":["useCallback","useEffect","useDismissOnEscape","containerRef","onDismiss","enabled","useDocumentListener","preventDefault","stopPropagation","onKeyDown","e","key","container","current","handleEscape","contains","document","activeElement","addEventListener","capture","removeEventListener"],"mappings":"AAyDO,SAAA,eAAAA,GAAA,aAAAC,SAAA;AAAA,SAASC,EAAwD;AAAA,EACtEC,cAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,SAAAA,IAAU;AAAA,EACVC,qBAAAA,IAAsB;AAAA,EACtBC,gBAAAA,IAAiB;AAAA,EACjBC,iBAAAA,IAAkB;AACU,GAA6B;AAEzD,QAAMC,IAAYT,EAChB,CAACU,MAA2B;AAC1B,IAAI,CAACL,KAAW,CAACD,KAAaM,EAAEC,QAAQ,aACxCJ,KAAkBG,EAAEH,eAAAA,GACpBC,KAAmBE,EAAEF,gBAAAA,GACrBJ,EAAAA;AAAAA,EACF,GACA,CAACC,GAASD,GAAWG,GAAgBC,CAAe,CACtD;AAGAP,SAAAA,EAAU,MAAM;AACd,QAAI,CAACK,KAAuB,CAACD,KAAW,CAACD,EAAW;AAEpD,UAAMQ,IAAYT,GAAcU,SAE1BC,IAAeA,CAACJ,MAAqB;AACzC,MAAIA,EAAEC,QAAQ,aAEVC,KAAa,CAACA,EAAUG,SAASC,SAASC,aAAa,MAC3DV,KAAkBG,EAAEH,eAAAA,GACpBC,KAAmBE,EAAEF,gBAAAA,GACrBJ,EAAAA;AAAAA,IACF;AAEAY,oBAASE,iBAAiB,WAAWJ,GAAc;AAAA,MAAEK,SAAS;AAAA,IAAA,CAAM,GAC7D,MAAMH,SAASI,oBAAoB,WAAWN,GAAc;AAAA,MAAEK,SAAS;AAAA,IAAA,CAAM;AAAA,EACtF,GAAG,CAACb,GAAqBD,GAASD,GAAWD,GAAcI,GAAgBC,CAAe,CAAC,GAEpF;AAAA,IAAEC,WAAWH,IAAuB,MAAM;AAAA,IAAC,IAAKG;AAAAA,EAAAA;AACzD;"}
|
package/dist/index252.js
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import { useState as W, useMemo as F, useEffect as N, useCallback as S } from "react";
|
|
2
|
-
import { useRovingFocus as C } from "./index75.js";
|
|
3
|
-
const z = (e, n, s, g, m, D = !1) => {
|
|
4
|
-
const i = e.toLocaleDateString("en-US", {
|
|
5
|
-
weekday: "long",
|
|
6
|
-
month: "long",
|
|
7
|
-
day: "numeric",
|
|
8
|
-
year: "numeric"
|
|
9
|
-
});
|
|
10
|
-
return m ? i : g ? `${i}, start and end of range` : n ? `${i}, start of range` : s ? `${i}, end of range` : D ? `${i}, in range` : i;
|
|
11
|
-
}, y = (e) => {
|
|
12
|
-
const n = e.getFullYear(), s = String(e.getMonth() + 1).padStart(2, "0"), g = String(e.getDate()).padStart(2, "0");
|
|
13
|
-
return `date-${n}-${s}-${g}`;
|
|
14
|
-
}, k = (e, n) => new Date(e, n + 1, 0).getDate(), L = (e) => {
|
|
15
|
-
const n = e.getFullYear(), s = e.getMonth();
|
|
16
|
-
return Array.from({
|
|
17
|
-
length: k(n, s)
|
|
18
|
-
}, (g, m) => y(new Date(n, s, m + 1)));
|
|
19
|
-
}, x = (e, n, s) => {
|
|
20
|
-
const g = e.getFullYear(), m = e.getMonth(), D = (a) => a.getFullYear() === g && a.getMonth() === m;
|
|
21
|
-
if (s.startDate && D(s.startDate)) {
|
|
22
|
-
const a = new Date(s.startDate);
|
|
23
|
-
a.setHours(0, 0, 0, 0);
|
|
24
|
-
const l = y(a);
|
|
25
|
-
if (n.includes(l)) return l;
|
|
26
|
-
}
|
|
27
|
-
if (s.endDate && D(s.endDate)) {
|
|
28
|
-
const a = new Date(s.endDate);
|
|
29
|
-
a.setHours(0, 0, 0, 0);
|
|
30
|
-
const l = y(a);
|
|
31
|
-
if (n.includes(l)) return l;
|
|
32
|
-
}
|
|
33
|
-
const i = /* @__PURE__ */ new Date();
|
|
34
|
-
if (D(i)) {
|
|
35
|
-
const a = y(i);
|
|
36
|
-
if (n.includes(a)) return a;
|
|
37
|
-
}
|
|
38
|
-
return n[0] || "";
|
|
39
|
-
};
|
|
40
|
-
function B({
|
|
41
|
-
leftMonth: e,
|
|
42
|
-
rightMonth: n,
|
|
43
|
-
showSingleMonth: s,
|
|
44
|
-
selectedRange: g,
|
|
45
|
-
onMonthChange: m
|
|
46
|
-
}) {
|
|
47
|
-
const [D, i] = W(null), a = F(() => L(e), [e]), l = F(() => L(n), [n]), E = F(() => x(e, a, g), [e, a, g]), H = F(() => x(n, l, g), [n, l, g]), {
|
|
48
|
-
getRovingItemProps: Y,
|
|
49
|
-
focusItem: I,
|
|
50
|
-
getContainerProps: U
|
|
51
|
-
} = C({
|
|
52
|
-
itemIds: a,
|
|
53
|
-
defaultFocusedId: E,
|
|
54
|
-
orientation: "grid",
|
|
55
|
-
cols: 7,
|
|
56
|
-
loop: !1,
|
|
57
|
-
role: "grid"
|
|
58
|
-
}), {
|
|
59
|
-
getRovingItemProps: M,
|
|
60
|
-
focusItem: h,
|
|
61
|
-
getContainerProps: G
|
|
62
|
-
} = C({
|
|
63
|
-
itemIds: l,
|
|
64
|
-
defaultFocusedId: H,
|
|
65
|
-
orientation: "grid",
|
|
66
|
-
cols: 7,
|
|
67
|
-
loop: !1,
|
|
68
|
-
role: "grid"
|
|
69
|
-
});
|
|
70
|
-
N(() => {
|
|
71
|
-
if (!D) return;
|
|
72
|
-
const f = y(D);
|
|
73
|
-
a.includes(f) ? (I(f), i(null)) : l.includes(f) && (h(f), i(null));
|
|
74
|
-
}, [D, a, l, I, h]);
|
|
75
|
-
const b = S((f, K) => {
|
|
76
|
-
const v = s || K === "left";
|
|
77
|
-
m(new Date(f.getFullYear(), f.getMonth(), 1), v), i(new Date(f));
|
|
78
|
-
}, [s, m]);
|
|
79
|
-
return {
|
|
80
|
-
getGridCellProps: S(({
|
|
81
|
-
isLeftCalendar: f,
|
|
82
|
-
isDateDisabled: K,
|
|
83
|
-
handleDateClick: v
|
|
84
|
-
}) => {
|
|
85
|
-
const A = f ? "left" : "right", $ = f ? I : h, O = f ? Y : M, R = (t, p) => {
|
|
86
|
-
const c = p.getFullYear(), o = p.getMonth(), d = p.getDate(), w = (r) => {
|
|
87
|
-
if (r.getFullYear() !== c || r.getMonth() !== o) {
|
|
88
|
-
b(r, A);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
$(y(r));
|
|
92
|
-
};
|
|
93
|
-
switch (t.key) {
|
|
94
|
-
case "ArrowLeft":
|
|
95
|
-
t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d - 1));
|
|
96
|
-
break;
|
|
97
|
-
case "ArrowRight":
|
|
98
|
-
t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d + 1));
|
|
99
|
-
break;
|
|
100
|
-
case "ArrowUp":
|
|
101
|
-
t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d - 7));
|
|
102
|
-
break;
|
|
103
|
-
case "ArrowDown":
|
|
104
|
-
t.preventDefault(), t.stopPropagation(), w(new Date(c, o, d + 7));
|
|
105
|
-
break;
|
|
106
|
-
case "Home": {
|
|
107
|
-
t.preventDefault(), t.stopPropagation();
|
|
108
|
-
const r = p.getDay(), u = new Date(c, o, d - r), P = u.getMonth() !== o ? new Date(c, o, 1) : u;
|
|
109
|
-
$(y(P));
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
case "End": {
|
|
113
|
-
t.preventDefault(), t.stopPropagation();
|
|
114
|
-
const r = p.getDay(), u = new Date(c, o, d + (6 - r)), P = k(c, o), T = u.getMonth() !== o ? new Date(c, o, P) : u;
|
|
115
|
-
$(y(T));
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
case "PageUp": {
|
|
119
|
-
t.preventDefault(), t.stopPropagation();
|
|
120
|
-
const r = t.shiftKey ? c - 1 : c, u = t.shiftKey ? o : o - 1, P = Math.min(d, k(r, u));
|
|
121
|
-
b(new Date(r, u, P), A);
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
case "PageDown": {
|
|
125
|
-
t.preventDefault(), t.stopPropagation();
|
|
126
|
-
const r = t.shiftKey ? c + 1 : c, u = t.shiftKey ? o : o + 1, P = Math.min(d, k(r, u));
|
|
127
|
-
b(new Date(r, u, P), A);
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
case "Enter":
|
|
131
|
-
case " ":
|
|
132
|
-
t.preventDefault(), K(p) || v(p);
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
return ({
|
|
137
|
-
cellId: t,
|
|
138
|
-
cellDate: p,
|
|
139
|
-
disabled: c,
|
|
140
|
-
ariaLabel: o,
|
|
141
|
-
ariaCurrent: d,
|
|
142
|
-
ariaDisabled: w
|
|
143
|
-
}) => {
|
|
144
|
-
const r = O(t);
|
|
145
|
-
return {
|
|
146
|
-
id: t,
|
|
147
|
-
ref: r.ref,
|
|
148
|
-
tabIndex: r.tabIndex,
|
|
149
|
-
onFocus: r.onFocus,
|
|
150
|
-
"aria-label": o,
|
|
151
|
-
"aria-current": d,
|
|
152
|
-
"aria-disabled": w,
|
|
153
|
-
onKeyDown: (u) => R(u, p),
|
|
154
|
-
onClick: () => {
|
|
155
|
-
c || v(p);
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
};
|
|
159
|
-
}, [b, I, h, Y, M]),
|
|
160
|
-
getLeftRovingItemProps: Y,
|
|
161
|
-
getRightRovingItemProps: M,
|
|
162
|
-
getLeftContainerProps: U,
|
|
163
|
-
getRightContainerProps: G,
|
|
164
|
-
focusLeftItem: I,
|
|
165
|
-
focusRightItem: h
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
export {
|
|
169
|
-
y as formatDateId,
|
|
170
|
-
z as getCellAriaLabel,
|
|
171
|
-
B as useDatePickerA11y
|
|
172
|
-
};
|
|
173
|
-
//# sourceMappingURL=index252.js.map
|
package/dist/index252.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index252.js","sources":["../src/components/DatePicker/useDatePickerA11y.ts"],"sourcesContent":["import React, { useState, useCallback, useEffect, useMemo } from 'react';\n\nimport { useRovingFocus, RovingItemProps, RovingContainerProps, AccessibleNameInput } from '../../utils/a11y/useRovingFocus';\nimport type { DateRange } from './index';\n\nexport const getCellAriaLabel = (\n date: Date,\n isStart: boolean,\n isEnd: boolean,\n isSameStartEnd: boolean,\n singleDateSelection: boolean,\n inRange: boolean = false\n): string => {\n const base = date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n });\n if (singleDateSelection) return base;\n if (isSameStartEnd) return `${base}, start and end of range`;\n if (isStart) return `${base}, start of range`;\n if (isEnd) return `${base}, end of range`;\n if (inRange) return `${base}, in range`;\n return base;\n};\n\nexport const formatDateId = (d: Date) => {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const dd = String(d.getDate()).padStart(2, '0');\n return `date-${y}-${m}-${dd}`;\n};\n\nconst getDaysInMonth = (year: number, month: number) => new Date(year, month + 1, 0).getDate();\n\nconst getPanelItemIds = (panelDate: Date): string[] => {\n const year = panelDate.getFullYear();\n const month = panelDate.getMonth();\n return Array.from({ length: getDaysInMonth(year, month) }, (_, i) =>\n formatDateId(new Date(year, month, i + 1))\n );\n};\n\nconst getPanelDefaultFocusId = (panelDate: Date, itemIds: string[], selectedRange: DateRange): string => {\n const year = panelDate.getFullYear();\n const month = panelDate.getMonth();\n const isInPanel = (d: Date) => d.getFullYear() === year && d.getMonth() === month;\n\n // Prefer startDate if it falls in this panel\n if (selectedRange.startDate && isInPanel(selectedRange.startDate)) {\n const d = new Date(selectedRange.startDate);\n d.setHours(0, 0, 0, 0);\n const id = formatDateId(d);\n if (itemIds.includes(id)) return id;\n }\n // Fall back to endDate if it falls in this panel (e.g. right panel when start is in left panel)\n if (selectedRange.endDate && isInPanel(selectedRange.endDate)) {\n const d = new Date(selectedRange.endDate);\n d.setHours(0, 0, 0, 0);\n const id = formatDateId(d);\n if (itemIds.includes(id)) return id;\n }\n const today = new Date();\n if (isInPanel(today)) {\n const id = formatDateId(today);\n if (itemIds.includes(id)) return id;\n }\n return itemIds[0] || '';\n};\n\ninterface UseDatePickerA11yOptions {\n leftMonth: Date;\n rightMonth: Date;\n showSingleMonth: boolean;\n selectedRange: DateRange;\n onMonthChange: (date: Date, isLeft: boolean) => void;\n}\n\ninterface CellKeyDownOptions {\n isLeftCalendar: boolean;\n isDateDisabled: (date: Date) => boolean;\n handleDateClick: (date: Date) => void;\n}\n\ninterface GridCellItemInput {\n cellId: string;\n cellDate: Date;\n disabled: boolean;\n ariaLabel: string;\n ariaCurrent: 'date' | undefined;\n ariaDisabled: true | undefined;\n}\n\nexport interface GridCellElementProps {\n id: string;\n ref: (el: HTMLElement | null) => void;\n tabIndex: number;\n onFocus: () => void;\n 'aria-label': string;\n 'aria-current': 'date' | undefined;\n 'aria-disabled': true | undefined;\n onKeyDown: (e: React.KeyboardEvent) => void;\n onClick: () => void;\n}\n\ninterface UseDatePickerA11yReturn {\n getGridCellProps: (options: CellKeyDownOptions) => (item: GridCellItemInput) => GridCellElementProps;\n getLeftRovingItemProps: (id: string) => RovingItemProps;\n getRightRovingItemProps: (id: string) => RovingItemProps;\n getLeftContainerProps: (nameInput?: AccessibleNameInput) => RovingContainerProps;\n getRightContainerProps: (nameInput?: AccessibleNameInput) => RovingContainerProps;\n focusLeftItem: (id: string) => void;\n focusRightItem: (id: string) => void;\n}\n\nexport function useDatePickerA11y({\n leftMonth,\n rightMonth,\n showSingleMonth,\n selectedRange,\n onMonthChange\n}: UseDatePickerA11yOptions): UseDatePickerA11yReturn {\n const [keyboardFocusDate, setKeyboardFocusDate] = useState<Date | null>(null);\n\n const leftItemIds = useMemo(() => getPanelItemIds(leftMonth), [leftMonth]);\n const rightItemIds = useMemo(() => getPanelItemIds(rightMonth), [rightMonth]);\n\n const leftDefaultFocusId = useMemo(\n () => getPanelDefaultFocusId(leftMonth, leftItemIds, selectedRange),\n [leftMonth, leftItemIds, selectedRange]\n );\n const rightDefaultFocusId = useMemo(\n () => getPanelDefaultFocusId(rightMonth, rightItemIds, selectedRange),\n [rightMonth, rightItemIds, selectedRange]\n );\n\n const { getRovingItemProps: getLeftRovingItemProps, focusItem: focusLeftItem, getContainerProps: getLeftContainerProps } = useRovingFocus({\n itemIds: leftItemIds,\n defaultFocusedId: leftDefaultFocusId,\n orientation: 'grid',\n cols: 7,\n loop: false,\n role: 'grid'\n });\n\n const { getRovingItemProps: getRightRovingItemProps, focusItem: focusRightItem, getContainerProps: getRightContainerProps } = useRovingFocus({\n itemIds: rightItemIds,\n defaultFocusedId: rightDefaultFocusId,\n orientation: 'grid',\n cols: 7,\n loop: false,\n role: 'grid'\n });\n\n // After keyboard navigation shifts a panel to a new month, focus the target cell via roving focus refs\n useEffect(() => {\n if (!keyboardFocusDate) return;\n const id = formatDateId(keyboardFocusDate);\n if (leftItemIds.includes(id)) {\n focusLeftItem(id);\n setKeyboardFocusDate(null);\n } else if (rightItemIds.includes(id)) {\n focusRightItem(id);\n setKeyboardFocusDate(null);\n }\n }, [keyboardFocusDate, leftItemIds, rightItemIds, focusLeftItem, focusRightItem]);\n\n // Navigate the keyboard focus to a date that may be in a different month.\n // Each panel advances completely independently — never touches the other panel.\n const handleKeyboardNavigate = useCallback(\n (targetDate: Date, sourcePanel: 'left' | 'right') => {\n const isLeft = showSingleMonth || sourcePanel === 'left';\n onMonthChange(new Date(targetDate.getFullYear(), targetDate.getMonth(), 1), isLeft);\n setKeyboardFocusDate(new Date(targetDate));\n },\n [showSingleMonth, onMonthChange]\n );\n\n const getGridCellProps = useCallback(\n ({ isLeftCalendar, isDateDisabled, handleDateClick }: CellKeyDownOptions) => {\n const panel: 'left' | 'right' = isLeftCalendar ? 'left' : 'right';\n const focusPanelItem = isLeftCalendar ? focusLeftItem : focusRightItem;\n const getRovingItemProps = isLeftCalendar ? getLeftRovingItemProps : getRightRovingItemProps;\n\n const handleKeyDown = (e: React.KeyboardEvent, cellDate: Date) => {\n const cellYear = cellDate.getFullYear();\n const cellMonth = cellDate.getMonth();\n const cellDay = cellDate.getDate();\n\n const navigateTo = (targetDate: Date) => {\n if (targetDate.getFullYear() !== cellYear || targetDate.getMonth() !== cellMonth) {\n handleKeyboardNavigate(targetDate, panel);\n return;\n }\n focusPanelItem(formatDateId(targetDate));\n };\n\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault(); e.stopPropagation();\n navigateTo(new Date(cellYear, cellMonth, cellDay - 1));\n break;\n case 'ArrowRight':\n e.preventDefault(); e.stopPropagation();\n navigateTo(new Date(cellYear, cellMonth, cellDay + 1));\n break;\n case 'ArrowUp':\n e.preventDefault(); e.stopPropagation();\n navigateTo(new Date(cellYear, cellMonth, cellDay - 7));\n break;\n case 'ArrowDown':\n e.preventDefault(); e.stopPropagation();\n navigateTo(new Date(cellYear, cellMonth, cellDay + 7));\n break;\n case 'Home': {\n // First day of the current week row (Sunday), clamped to month start\n e.preventDefault(); e.stopPropagation();\n const dayOfWeek = cellDate.getDay();\n const homeDate = new Date(cellYear, cellMonth, cellDay - dayOfWeek);\n const clamped = homeDate.getMonth() !== cellMonth ? new Date(cellYear, cellMonth, 1) : homeDate;\n focusPanelItem(formatDateId(clamped));\n break;\n }\n case 'End': {\n // Last day of the current week row (Saturday), clamped to month end\n e.preventDefault(); e.stopPropagation();\n const dayOfWeek = cellDate.getDay();\n const endDate = new Date(cellYear, cellMonth, cellDay + (6 - dayOfWeek));\n const daysInThisMonth = getDaysInMonth(cellYear, cellMonth);\n const clamped =\n endDate.getMonth() !== cellMonth ? new Date(cellYear, cellMonth, daysInThisMonth) : endDate;\n focusPanelItem(formatDateId(clamped));\n break;\n }\n case 'PageUp': {\n // Shift+PageUp = previous year, PageUp = previous month\n e.preventDefault(); e.stopPropagation();\n const tYear = e.shiftKey ? cellYear - 1 : cellYear;\n const tMonth = e.shiftKey ? cellMonth : cellMonth - 1;\n const tDay = Math.min(cellDay, getDaysInMonth(tYear, tMonth));\n handleKeyboardNavigate(new Date(tYear, tMonth, tDay), panel);\n break;\n }\n case 'PageDown': {\n // Shift+PageDown = next year, PageDown = next month\n e.preventDefault(); e.stopPropagation();\n const tYear = e.shiftKey ? cellYear + 1 : cellYear;\n const tMonth = e.shiftKey ? cellMonth : cellMonth + 1;\n const tDay = Math.min(cellDay, getDaysInMonth(tYear, tMonth));\n handleKeyboardNavigate(new Date(tYear, tMonth, tDay), panel);\n break;\n }\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isDateDisabled(cellDate)) {\n handleDateClick(cellDate);\n }\n break;\n }\n };\n\n return ({ cellId, cellDate, disabled, ariaLabel, ariaCurrent, ariaDisabled }: GridCellItemInput): GridCellElementProps => {\n const rovingProps = getRovingItemProps(cellId);\n return {\n id: cellId,\n ref: rovingProps.ref,\n tabIndex: rovingProps.tabIndex,\n onFocus: rovingProps.onFocus,\n 'aria-label': ariaLabel,\n 'aria-current': ariaCurrent,\n 'aria-disabled': ariaDisabled,\n onKeyDown: (e: React.KeyboardEvent) => handleKeyDown(e, cellDate),\n onClick: () => { if (!disabled) handleDateClick(cellDate); }\n };\n };\n },\n [handleKeyboardNavigate, focusLeftItem, focusRightItem, getLeftRovingItemProps, getRightRovingItemProps]\n );\n\n return {\n getGridCellProps,\n getLeftRovingItemProps,\n getRightRovingItemProps,\n getLeftContainerProps,\n getRightContainerProps,\n focusLeftItem,\n focusRightItem\n };\n}\n"],"names":["useState","useMemo","useEffect","useCallback","useRovingFocus","getCellAriaLabel","date","isStart","isEnd","isSameStartEnd","singleDateSelection","inRange","base","toLocaleDateString","weekday","month","day","year","formatDateId","d","y","getFullYear","m","String","getMonth","padStart","dd","getDate","getDaysInMonth","Date","getPanelItemIds","panelDate","Array","from","length","_","i","getPanelDefaultFocusId","itemIds","selectedRange","isInPanel","startDate","setHours","id","includes","endDate","today","useDatePickerA11y","leftMonth","rightMonth","showSingleMonth","onMonthChange","keyboardFocusDate","setKeyboardFocusDate","leftItemIds","rightItemIds","leftDefaultFocusId","rightDefaultFocusId","getRovingItemProps","getLeftRovingItemProps","focusItem","focusLeftItem","getContainerProps","getLeftContainerProps","defaultFocusedId","orientation","cols","loop","role","getRightRovingItemProps","focusRightItem","getRightContainerProps","handleKeyboardNavigate","targetDate","sourcePanel","isLeft","getGridCellProps","isLeftCalendar","isDateDisabled","handleDateClick","panel","focusPanelItem","handleKeyDown","e","cellDate","cellYear","cellMonth","cellDay","navigateTo","key","preventDefault","stopPropagation","dayOfWeek","getDay","homeDate","clamped","daysInThisMonth","tYear","shiftKey","tMonth","tDay","Math","min","cellId","disabled","ariaLabel","ariaCurrent","ariaDisabled","rovingProps","ref","tabIndex","onFocus","onKeyDown","onClick"],"mappings":"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"}
|
package/dist/index255.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { useEffect as s } from "react";
|
|
2
|
-
const u = {
|
|
3
|
-
block: "nearest"
|
|
4
|
-
};
|
|
5
|
-
function m({
|
|
6
|
-
containerRef: t,
|
|
7
|
-
activeIndex: o,
|
|
8
|
-
itemSelector: r = '[role="option"]',
|
|
9
|
-
enabled: c = !0,
|
|
10
|
-
scrollOptions: e = u
|
|
11
|
-
}) {
|
|
12
|
-
s(() => {
|
|
13
|
-
if (!c || o < 0 || !t?.current)
|
|
14
|
-
return;
|
|
15
|
-
const n = t.current.querySelectorAll(r)[o];
|
|
16
|
-
n && n.scrollIntoView(e);
|
|
17
|
-
}, [o, t, r, c, e]);
|
|
18
|
-
}
|
|
19
|
-
export {
|
|
20
|
-
m as useScrollActiveIntoView
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=index255.js.map
|
package/dist/index255.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index255.js","sources":["../src/utils/a11y/useScrollActiveIntoView.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nconst DEFAULT_SCROLL_OPTIONS: ScrollIntoViewOptions = { block: 'nearest' };\n\nexport interface UseScrollActiveIntoViewOptions {\n /**\n * Ref to the container element\n */\n containerRef?: RefObject<HTMLElement | null>;\n \n /**\n * Index of the currently active/highlighted item (-1 if none)\n */\n activeIndex: number;\n \n /**\n * CSS selector for item elements\n * Default: '[role=\"option\"]'\n */\n itemSelector?: string;\n \n /**\n * Whether scrolling is enabled\n * Default: true\n */\n enabled?: boolean;\n \n /**\n * ScrollIntoView options\n * Default: { block: 'nearest' }\n */\n scrollOptions?: ScrollIntoViewOptions;\n}\n\n/**\n * Hook to automatically scroll the active item into view.\n * \n * Useful for aria-activedescendant patterns where DOM focus stays\n * on the container (e.g., input field) but we need to visually show\n * which descendant option is logically active.\n * \n * Common use cases:\n * - Combobox dropdown options\n * - Menu items with virtual focus\n * - Grid cells with keyboard navigation\n * - Tree view items\n * - Listbox options\n * \n * @example\n * ```tsx\n * const [highlightedIndex, setHighlightedIndex] = useState(-1);\n * const listboxRef = useRef<HTMLDivElement>(null);\n * \n * useScrollActiveIntoView({\n * containerRef: listboxRef,\n * activeIndex: highlightedIndex,\n * itemSelector: '[role=\"option\"]'\n * });\n * \n * // Now when highlightedIndex changes, the item scrolls into view\n * ```\n * \n * @example Custom scroll behavior\n * ```tsx\n * useScrollActiveIntoView({\n * containerRef: menuRef,\n * activeIndex: activeMenuIndex,\n * itemSelector: '[role=\"menuitem\"]',\n * scrollOptions: { block: 'center', behavior: 'smooth' }\n * });\n * ```\n */\nexport function useScrollActiveIntoView({\n containerRef,\n activeIndex,\n itemSelector = '[role=\"option\"]',\n enabled = true,\n scrollOptions = DEFAULT_SCROLL_OPTIONS\n}: UseScrollActiveIntoViewOptions): void {\n useEffect(() => {\n // Early returns for disabled states\n if (!enabled || activeIndex < 0 || !containerRef?.current) {\n return;\n }\n \n const container = containerRef.current;\n const items = container.querySelectorAll(itemSelector);\n const activeItem = items[activeIndex] as HTMLElement;\n \n if (activeItem) {\n activeItem.scrollIntoView(scrollOptions);\n }\n }, [activeIndex, containerRef, itemSelector, enabled, scrollOptions]);\n}\n"],"names":["useEffect","DEFAULT_SCROLL_OPTIONS","block","useScrollActiveIntoView","containerRef","activeIndex","itemSelector","enabled","scrollOptions","current","activeItem","querySelectorAll","scrollIntoView"],"mappings":"AAGA,SAAA,aAAAA,SAAA;AAAA,MAAMC,IAAgD;AAAA,EAAEC,OAAO;AAAU;AAsElE,SAASC,EAAwB;AAAA,EACtCC,cAAAA;AAAAA,EACAC,aAAAA;AAAAA,EACAC,cAAAA,IAAe;AAAA,EACfC,SAAAA,IAAU;AAAA,EACVC,eAAAA,IAAgBP;AACc,GAAS;AACvCD,EAAAA,EAAU,MAAM;AAEd,QAAI,CAACO,KAAWF,IAAc,KAAK,CAACD,GAAcK;AAChD;AAKF,UAAMC,IAFYN,EAAaK,QACPE,iBAAiBL,CAAY,EAC5BD,CAAW;AAEpC,IAAIK,KACFA,EAAWE,eAAeJ,CAAa;AAAA,EAE3C,GAAG,CAACH,GAAaD,GAAcE,GAAcC,GAASC,CAAa,CAAC;AACtE;"}
|