se-design 1.0.84-dev.0 → 1.0.85-dev.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index38.js","sources":["../src/components/DropdownWithInputTags/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, forwardRef, ForwardedRef, useImperativeHandle, KeyboardEvent, useCallback } from 'react';\nimport { Popover, PopoverHandle } from '../Popover';\nimport { Icon } from '../Icon';\nimport { Checkbox } from '../Checkbox';\nimport { Button } from '../Button';\nimport { useCombobox, getA11yNameAttributes } from '../../utils/a11y';\nimport { useLiveAnnouncer } from '../../utils/a11y/liveAnnouncer';\nimport { useStableId } from '../../utils/useStableId';\nimport './styles.scss';\n\nexport interface DropdownOption {\n id: string | number;\n label: string;\n value: string;\n [key: string]: any; // Allow additional properties\n}\n\nexport interface DropdownWithInputTagsHandle {\n toggleDropdown: () => void;\n}\n\nexport interface DropdownWithInputTagsProps {\n value: string[];\n onChange?: (tags: string[]) => void;\n placeholder?: string;\n className?: string;\n options?: DropdownOption[];\n renderOption?: (\n option: DropdownOption, \n props: { \n id: string; \n role: 'option'; \n 'aria-selected': boolean; \n onMouseEnter: () => void;\n className: string;\n },\n onSelect: (option: DropdownOption) => void\n ) => React.ReactNode;\n label?: string;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n automationId?: string;\n noOptionsMessage?: string;\n allowCustomTags?: boolean;\n disabled?: boolean;\n type?: 'select' | 'multi-select' |'multi-select-without-cta';\n showInput?: boolean;\n displayTagBy?: 'label' | 'value';\n isWithPortal?: boolean;\n}\n\nexport const DropdownWithInputTags = forwardRef<DropdownWithInputTagsHandle, DropdownWithInputTagsProps>(\n (\n {\n value,\n onChange,\n placeholder = \"Type to search or add custom tags...\",\n className = '',\n options = [],\n renderOption,\n label,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n automationId = '',\n noOptionsMessage = \"No options found\",\n allowCustomTags = true,\n disabled = false,\n type = 'select',\n showInput = true,\n displayTagBy = 'label',\n isWithPortal = false\n },\n ref: ForwardedRef<DropdownWithInputTagsHandle>\n ) => {\n // Define initValues at the top, right after props\n const initValues = (values: string[]) => {\n return values.map(val => {\n const found = options.find(opt => opt.value === val);\n return found ? { label: found.label, value: found.value } : { label: val, value: val };\n });\n };\n\n // Now use it in useState\n const [tags, setTags] = useState<{ label: string; value: string }[]>(() => {\n return initValues(value || []);\n });\n const [inputValue, setInputValue] = useState('');\n const [filteredOptions, setFilteredOptions] = useState<DropdownOption[]>(options);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const popoverRef = useRef<PopoverHandle>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const applyClickedRef = useRef<boolean>(false);\n \n const isMultiSelectWithoutCTA = type === 'multi-select-without-cta';\n const isMultiSelect = type === 'multi-select' ||isMultiSelectWithoutCTA;\n\n // Generate stable ID for listbox\n const listboxId = useStableId(automationId, 'dropdown-input-tags-listbox');\n\n const handleSelectOption = useCallback(\n (option: DropdownOption) => {\n if (disabled) return;\n\n const newTags = [...tags];\n if (!newTags.some((tag) => tag.value === option.value)) {\n newTags.push({ label: option.label, value: option.value });\n setTags(newTags);\n onChange?.(newTags.map((tag) => tag.value));\n }\n setInputValue('');\n setIsDropdownOpen(false);\n },\n [disabled, tags, onChange]\n );\n\n const handleMultiSelectDropdownOptionClick = useCallback(\n (isSelected: boolean, option: DropdownOption) => {\n let newSelectedTags: { label: string; value: string }[] = [];\n if (isSelected) {\n newSelectedTags = [...tags, { label: option.label, value: option.value }];\n } else {\n newSelectedTags = tags.filter((tag) => tag.value !== option.value);\n }\n setTags(newSelectedTags);\n setInputValue('');\n if (isMultiSelectWithoutCTA) {\n applyClickedRef.current = true;\n onChange?.(newSelectedTags.map((tag) => tag.value));\n }\n },\n [tags, isMultiSelectWithoutCTA, onChange]\n );\n\n const ADD_CUSTOM_TAG_VALUE = '__add_custom_tag__';\n\n const handleSelectFromDropdown = useCallback((option: DropdownOption) => {\n if (disabled) return;\n\n if (option.value === ADD_CUSTOM_TAG_VALUE) {\n const trimmed = inputValue.trim();\n if (!trimmed) return;\n const newTags = [...tags];\n if (!newTags.some((tag) => tag.value === trimmed)) {\n newTags.push({ label: trimmed, value: trimmed });\n setTags(newTags);\n onChange?.(newTags.map((tag) => tag.value));\n }\n setInputValue('');\n setIsDropdownOpen(false);\n return;\n }\n\n if (isMultiSelect) {\n const isSelected = tags.some(tag => tag.value === option.value);\n handleMultiSelectDropdownOptionClick(!isSelected, option);\n } else {\n handleSelectOption(option);\n }\n }, [disabled, isMultiSelect, tags, inputValue, onChange, handleMultiSelectDropdownOptionClick, handleSelectOption]);\n\n const effectiveItems: DropdownOption[] =\n filteredOptions.length > 0\n ? filteredOptions\n : allowCustomTags && inputValue.trim()\n ? [{ id: ADD_CUSTOM_TAG_VALUE, label: `Add \"${inputValue.trim()}\"`, value: ADD_CUSTOM_TAG_VALUE }]\n : [];\n\n // Combobox hook for keyboard navigation and ARIA\n const {\n containerProps,\n inputProps: comboboxInputProps,\n listboxProps,\n getOptionProps,\n highlightedIndex,\n setHighlightedIndex,\n isKeyboardFocused\n } = useCombobox({\n items: effectiveItems,\n isOpen: isDropdownOpen,\n onOpenChange: setIsDropdownOpen,\n onSelect: handleSelectFromDropdown,\n listboxId,\n hasItems: effectiveItems.length > 0,\n keepHighlightOnSelect: isMultiSelect,\n closeOnTab: type !== 'multi-select'\n });\n\n const getHighlightClass = (isHighlighted: boolean) =>\n isHighlighted ? `highlighted${isKeyboardFocused ? ' keyboard-highlight' : ''}` : '';\n\n useEffect(() => {\n if (applyClickedRef.current) {\n applyClickedRef.current = false;\n return;\n }\n setTags(initValues(value || []));\n }, [value, options, isDropdownOpen]);\n\n\n useEffect(() => {\n // const isInputEmpty = !inputValue.trim();\n const filtered = options.filter(option =>\n option.label.toLowerCase().includes(inputValue.toLowerCase()) ||\n option.value.toLowerCase().includes(inputValue.toLowerCase())\n );\n setFilteredOptions(filtered);\n }, [inputValue, options]);\n\n const { announce } = useLiveAnnouncer();\n\n useEffect(() => {\n if (isDropdownOpen && effectiveItems.length === 0 && inputValue.trim()) {\n announce(noOptionsMessage, { assertiveness: 'polite', batchId: 'dropdown-input-tags-empty-state', delay: 300 });\n }\n }, [effectiveItems.length, isDropdownOpen, inputValue]);\n\n const handleRemoveTag = (indexToRemove: number) => {\n if (disabled) return;\n \n const newTags = tags.filter((_, index) => index !== indexToRemove);\n setTags(newTags);\n \n //in multiselect if tag removed while dorpdownopen, do not call onchange\n if(!isMultiSelect || isMultiSelectWithoutCTA ||(isMultiSelect && !isDropdownOpen)) {\n onChange?.(newTags.map(tag => tag.value));\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n // Handle Backspace to remove last tag (preserve existing behavior)\n if (e.key === 'Backspace' && inputValue === \"\" && tags.length > 0) {\n e.preventDefault();\n const newTags = tags.slice(0, -1);\n setTags(newTags);\n onChange?.(newTags.map(tag => tag.value));\n return;\n }\n\n // Handle Enter for custom tags when no options match\n if (e.key === 'Enter' && inputValue.trim() && filteredOptions.length === 0 && allowCustomTags) {\n e.preventDefault();\n const newTags = [...tags];\n if (!newTags.some(tag => tag.value === inputValue.trim())) {\n newTags.push({ label: inputValue.trim(), value: inputValue.trim() });\n setTags(newTags);\n onChange?.(newTags.map(tag => tag.value));\n }\n setInputValue('');\n setHighlightedIndex(-1);\n setIsDropdownOpen(false);\n return;\n }\n\n // Let combobox hook handle all other keyboard events (Arrow keys, Enter, Escape, etc.)\n comboboxInputProps.onKeyDown(e);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n const newValue = e.target.value;\n setInputValue(newValue);\n setHighlightedIndex(-1); // Reset highlighted index when user types\n \n if (newValue.trim() && !isDropdownOpen) {\n setIsDropdownOpen(true);\n }\n };\n\n const handleInputFocus = () => {\n if (disabled) return;\n\n if (inputValue.trim() || options.length > 0) {\n setIsDropdownOpen(true);\n }\n };\n\n const handleInputContainerClick = (e: React.MouseEvent) => {\n if (disabled) return;\n\n e.stopPropagation();\n inputRef.current?.focus();\n if (!isDropdownOpen && (inputValue.trim() || options.length > 0)) {\n setIsDropdownOpen(true);\n }\n };\n\n const handlePopoverWrapperClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n \n const target = e.target as HTMLElement;\n const isInputArea = target.closest('.input-with-tags-container');\n if (isInputArea) {\n e.stopPropagation();\n }\n };\n\n const toggleDropdown = () => {\n if (disabled) return;\n setIsDropdownOpen(!isDropdownOpen);\n };\n\n useImperativeHandle(ref, () => ({ toggleDropdown }), []);\n\n const defaultRenderOption = (\n option: DropdownOption,\n index: number,\n onSelect: (option: DropdownOption) => void,\n disabled: boolean\n ) => {\n const isSelected = tags.some((tag) => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isSelected);\n \n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option ${getHighlightClass(isHighlighted)}`}\n onClick={() => !disabled && onSelect(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n data-automation-id={`${automationId}-option-${option.id}`}\n >\n <span className=\"option-label\">{option.label}</span>\n {option.value !== option.label && <span className=\"option-value\">{option.value}</span>}\n </div>\n );\n };\n const handleApplySelectedDropDownValues = () => {\n applyClickedRef.current = true;\n const newTagValues = tags.map(tag => tag.value);\n onChange?.(newTagValues);\n setIsDropdownOpen(false);\n };\n\n const clearSelectedDropDownValues = () => {\n setTags([]);\n };\n const multiSelectRenderOption = (option: DropdownOption, index: number) => {\n const isOptionSelected = tags.some(tag => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isOptionSelected);\n \n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option dropdown-with-input-tags-multi-select-option ${getHighlightClass(isHighlighted)}`}\n aria-checked={isOptionSelected}\n onClick={() => {\n if (disabled) return;\n handleMultiSelectDropdownOptionClick(!isOptionSelected, option);\n inputRef.current?.focus();\n }}\n onMouseEnter={() => setHighlightedIndex(index)}\n data-automation-id={`${automationId}-option-${option.id}`}\n >\n <Checkbox\n automationId=\"checkbox\"\n className=\"checkbox\"\n checked={isOptionSelected}\n onChange={() => {}}\n label={option.label}\n tabIndex={-1}\n />\n </div>\n );\n };\n\n const multiSelectRenderCTAs = () => {\n return (\n <div\n className=\"dropdown-with-input-tags-ctas-container\"\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Home' || e.key === 'End') {\n e.stopPropagation();\n }\n }}\n >\n <Button label=\"Clear\" type=\"link\" size=\"sm\" onClick={clearSelectedDropDownValues} automationId={`${automationId}-clear-button`} />\n <Button label=\"Apply\" type=\"primary\" size=\"sm\" onClick={handleApplySelectedDropDownValues} automationId={`${automationId}-apply-button`} />\n </div>\n );\n };\n\n \n\n return (\n <div\n className={`dropdown-with-input-tags-wrapper ${className} ${disabled ? 'disabled-wrapper' : ''}`}\n data-automation-id={automationId}\n {...containerProps}\n >\n {label && <label id={`${automationId}-label`} className=\"dropdown-with-input-tags-label\">{label}</label>}\n\n <div onClick={handlePopoverWrapperClick}>\n <Popover\n ref={popoverRef}\n className=\"dropdown-with-input-tags-popover\"\n contentWidth=\"full\"\n position=\"bottom-left\"\n isPopoverOpen={!disabled && isDropdownOpen}\n onPopoverToggle={disabled ? () => {} : setIsDropdownOpen}\n disableClickToggle={true}\n isWithPortal={isWithPortal}\n renderPopoverContents={({ closePopoverCb }) => (\n <>\n <div\n {...listboxProps}\n className=\"dropdown-with-input-tags-content\"\n {...(isMultiSelect && { 'aria-multiselectable': 'true' })}\n >\n {effectiveItems.length > 0 ? (\n effectiveItems.map((option, index) => {\n if (option.value === ADD_CUSTOM_TAG_VALUE) {\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, false);\n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option dropdown-with-input-tags-custom-option ${getHighlightClass(isHighlighted)}`}\n onClick={() => {\n if (disabled) return;\n handleSelectFromDropdown(option);\n closePopoverCb();\n }}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n Add \"{inputValue.trim()}\"\n </div>\n );\n }\n if (isMultiSelect) {\n return multiSelectRenderOption(option, index);\n }\n \n const isSelected = tags.some((tag) => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isSelected);\n const optionPropsWithHandlers = {\n ...optionProps,\n onMouseEnter: () => setHighlightedIndex(index),\n className: `dropdown-with-input-tags-option ${getHighlightClass(isHighlighted)}`\n };\n \n return renderOption\n ? renderOption(option, optionPropsWithHandlers, handleSelectOption)\n : defaultRenderOption(option, index, handleSelectOption, disabled);\n })\n ) : (\n <div className=\"dropdown-with-input-tags-no-options\">\n <div className=\"dropdown-with-input-tags-no-options-text\">\n {noOptionsMessage}\n </div>\n </div>\n )}\n </div>\n {isMultiSelect && !isMultiSelectWithoutCTA && multiSelectRenderCTAs()}\n </>\n )}\n renderPopoverSrcElement={() => (\n <div className=\"dropdown-with-input-tags-input-container\">\n <div\n className={`input-with-tags-container ${disabled ? 'disabled-input-with-tags-container' : ''} ${isKeyboardFocused ? 'keyboard-focused' : ''}`}\n onClick={handleInputContainerClick}\n onKeyDown={(e) => {\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n inputRef.current?.focus();\n }\n }}\n >\n {tags.map((tag, index) => (\n <span key={index} className=\"tag-in-inputwithtags\">\n {tag[displayTagBy]}\n {!disabled && (\n <Icon\n name=\"close\"\n className=\"close-icon-in-inputwithtags\"\n ariaLabel={`Remove tag ${tag[displayTagBy]}`}\n onClick={() => handleRemoveTag(index)}\n shouldStopPropagation\n />\n )}\n </span>\n ))}\n {(showInput || !tags.length || isMultiSelect) && (\n <input\n ref={inputRef}\n {...comboboxInputProps}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleInputFocus}\n placeholder={tags.length === 0 ? placeholder : ''}\n className={`input-with-tags-input${!showInput && tags.length > 0 && !inputValue ? ' sr-only' : ''}`}\n disabled={disabled}\n {...getA11yNameAttributes({\n ariaLabel: ariaLabel || label || 'Search and select options',\n ariaLabelledBy,\n ariaDescribedBy\n })}\n />\n )}\n </div>\n </div>\n )}\n automationId={automationId}\n popoverContentAutomationId={`${automationId}-content`}\n />\n </div>\n </div>\n );\n }\n); "],"names":["DropdownWithInputTags","value","onChange","placeholder","className","options","renderOption","label","ariaLabel","ariaLabelledBy","ariaDescribedBy","automationId","noOptionsMessage","allowCustomTags","disabled","type","showInput","displayTagBy","isWithPortal","ref","initValues","values","map","val","found","find","opt","tags","setTags","useState","inputValue","setInputValue","filteredOptions","setFilteredOptions","isDropdownOpen","setIsDropdownOpen","popoverRef","useRef","inputRef","applyClickedRef","isMultiSelectWithoutCTA","isMultiSelect","listboxId","useStableId","handleSelectOption","useCallback","option","newTags","some","tag","push","handleMultiSelectDropdownOptionClick","isSelected","newSelectedTags","filter","current","ADD_CUSTOM_TAG_VALUE","handleSelectFromDropdown","trimmed","trim","effectiveItems","length","id","containerProps","inputProps","comboboxInputProps","listboxProps","getOptionProps","highlightedIndex","setHighlightedIndex","isKeyboardFocused","useCombobox","items","isOpen","onOpenChange","onSelect","hasItems","keepHighlightOnSelect","closeOnTab","getHighlightClass","isHighlighted","useEffect","filtered","toLowerCase","includes","announce","useLiveAnnouncer","assertiveness","batchId","delay","handleRemoveTag","indexToRemove","_","index","handleKeyDown","e","key","preventDefault","slice","onKeyDown","handleInputChange","newValue","target","handleInputFocus","handleInputContainerClick","stopPropagation","focus","handlePopoverWrapperClick","closest","toggleDropdown","useImperativeHandle","defaultRenderOption","optionProps","React","createElement","_extends","onClick","onMouseEnter","handleApplySelectedDropDownValues","newTagValues","clearSelectedDropDownValues","multiSelectRenderOption","isOptionSelected","Checkbox","checked","tabIndex","multiSelectRenderCTAs","Button","size","Popover","contentWidth","position","isPopoverOpen","onPopoverToggle","disableClickToggle","renderPopoverContents","closePopoverCb","Fragment","optionPropsWithHandlers","renderPopoverSrcElement","ctrlKey","metaKey","altKey","Icon","name","shouldStopPropagation","onFocus","getA11yNameAttributes","popoverContentAutomationId"],"mappings":"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"}
1
+ {"version":3,"file":"index38.js","sources":["../src/components/DropdownWithInputTags/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, forwardRef, ForwardedRef, useImperativeHandle, KeyboardEvent, useCallback } from 'react';\nimport { Popover, PopoverHandle } from '../Popover';\nimport { Icon } from '../Icon';\nimport { Checkbox } from '../Checkbox';\nimport { Button } from '../Button';\nimport { useCombobox, getA11yNameAttributes } from '../../utils/a11y';\nimport { announce } from '../../utils/a11y/liveAnnouncer/LiveAnnouncer';\nimport { useStableId } from '../../utils/useStableId';\nimport './styles.scss';\n\nexport interface DropdownOption {\n id: string | number;\n label: string;\n value: string;\n [key: string]: any; // Allow additional properties\n}\n\nexport interface DropdownWithInputTagsHandle {\n toggleDropdown: () => void;\n}\n\nexport interface DropdownWithInputTagsProps {\n value: string[];\n onChange?: (tags: string[]) => void;\n placeholder?: string;\n className?: string;\n options?: DropdownOption[];\n renderOption?: (\n option: DropdownOption, \n props: { \n id: string; \n role: 'option'; \n 'aria-selected': boolean; \n onMouseEnter: () => void;\n className: string;\n },\n onSelect: (option: DropdownOption) => void\n ) => React.ReactNode;\n label?: string;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n automationId?: string;\n noOptionsMessage?: string;\n allowCustomTags?: boolean;\n disabled?: boolean;\n type?: 'select' | 'multi-select' |'multi-select-without-cta';\n showInput?: boolean;\n displayTagBy?: 'label' | 'value';\n isWithPortal?: boolean;\n}\n\nexport const DropdownWithInputTags = forwardRef<DropdownWithInputTagsHandle, DropdownWithInputTagsProps>(\n (\n {\n value,\n onChange,\n placeholder = \"Type to search or add custom tags...\",\n className = '',\n options = [],\n renderOption,\n label,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n automationId = '',\n noOptionsMessage = \"No options found\",\n allowCustomTags = true,\n disabled = false,\n type = 'select',\n showInput = true,\n displayTagBy = 'label',\n isWithPortal = false\n },\n ref: ForwardedRef<DropdownWithInputTagsHandle>\n ) => {\n // Define initValues at the top, right after props\n const initValues = (values: string[]) => {\n return values.map(val => {\n const found = options.find(opt => opt.value === val);\n return found ? { label: found.label, value: found.value } : { label: val, value: val };\n });\n };\n\n // Now use it in useState\n const [tags, setTags] = useState<{ label: string; value: string }[]>(() => {\n return initValues(value || []);\n });\n const [inputValue, setInputValue] = useState('');\n const [filteredOptions, setFilteredOptions] = useState<DropdownOption[]>(options);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const popoverRef = useRef<PopoverHandle>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const applyClickedRef = useRef<boolean>(false);\n \n const isMultiSelectWithoutCTA = type === 'multi-select-without-cta';\n const isMultiSelect = type === 'multi-select' ||isMultiSelectWithoutCTA;\n\n // Generate stable ID for listbox\n const listboxId = useStableId(automationId, 'dropdown-input-tags-listbox');\n\n const handleSelectOption = useCallback(\n (option: DropdownOption) => {\n if (disabled) return;\n\n const newTags = [...tags];\n if (!newTags.some((tag) => tag.value === option.value)) {\n newTags.push({ label: option.label, value: option.value });\n setTags(newTags);\n onChange?.(newTags.map((tag) => tag.value));\n }\n setInputValue('');\n setIsDropdownOpen(false);\n },\n [disabled, tags, onChange]\n );\n\n const handleMultiSelectDropdownOptionClick = useCallback(\n (isSelected: boolean, option: DropdownOption) => {\n let newSelectedTags: { label: string; value: string }[] = [];\n if (isSelected) {\n newSelectedTags = [...tags, { label: option.label, value: option.value }];\n } else {\n newSelectedTags = tags.filter((tag) => tag.value !== option.value);\n }\n setTags(newSelectedTags);\n setInputValue('');\n if (isMultiSelectWithoutCTA) {\n applyClickedRef.current = true;\n onChange?.(newSelectedTags.map((tag) => tag.value));\n }\n },\n [tags, isMultiSelectWithoutCTA, onChange]\n );\n\n const ADD_CUSTOM_TAG_VALUE = '__add_custom_tag__';\n\n const handleSelectFromDropdown = useCallback((option: DropdownOption) => {\n if (disabled) return;\n\n if (option.value === ADD_CUSTOM_TAG_VALUE) {\n const trimmed = inputValue.trim();\n if (!trimmed) return;\n const newTags = [...tags];\n if (!newTags.some((tag) => tag.value === trimmed)) {\n newTags.push({ label: trimmed, value: trimmed });\n setTags(newTags);\n onChange?.(newTags.map((tag) => tag.value));\n }\n setInputValue('');\n setIsDropdownOpen(false);\n return;\n }\n\n if (isMultiSelect) {\n const isSelected = tags.some(tag => tag.value === option.value);\n handleMultiSelectDropdownOptionClick(!isSelected, option);\n } else {\n handleSelectOption(option);\n }\n }, [disabled, isMultiSelect, tags, inputValue, onChange, handleMultiSelectDropdownOptionClick, handleSelectOption]);\n\n const effectiveItems: DropdownOption[] =\n filteredOptions.length > 0\n ? filteredOptions\n : allowCustomTags && inputValue.trim()\n ? [{ id: ADD_CUSTOM_TAG_VALUE, label: `Add \"${inputValue.trim()}\"`, value: ADD_CUSTOM_TAG_VALUE }]\n : [];\n\n // Combobox hook for keyboard navigation and ARIA\n const {\n containerProps,\n inputProps: comboboxInputProps,\n listboxProps,\n getOptionProps,\n highlightedIndex,\n setHighlightedIndex,\n isKeyboardFocused\n } = useCombobox({\n items: effectiveItems,\n isOpen: isDropdownOpen,\n onOpenChange: setIsDropdownOpen,\n onSelect: handleSelectFromDropdown,\n listboxId,\n hasItems: effectiveItems.length > 0,\n keepHighlightOnSelect: isMultiSelect,\n closeOnTab: type !== 'multi-select'\n });\n\n const getHighlightClass = (isHighlighted: boolean) =>\n isHighlighted ? `highlighted${isKeyboardFocused ? ' keyboard-highlight' : ''}` : '';\n\n useEffect(() => {\n if (applyClickedRef.current) {\n applyClickedRef.current = false;\n return;\n }\n setTags(initValues(value || []));\n }, [value, options, isDropdownOpen]);\n\n\n useEffect(() => {\n // const isInputEmpty = !inputValue.trim();\n const filtered = options.filter(option =>\n option.label.toLowerCase().includes(inputValue.toLowerCase()) ||\n option.value.toLowerCase().includes(inputValue.toLowerCase())\n );\n setFilteredOptions(filtered);\n }, [inputValue, options]);\n\n useEffect(() => {\n if (isDropdownOpen && effectiveItems.length === 0 && inputValue.trim()) {\n announce(noOptionsMessage, { assertiveness: 'polite', batchId: 'dropdown-input-tags-empty-state', delay: 300 });\n }\n }, [effectiveItems.length, isDropdownOpen, inputValue]);\n\n const handleRemoveTag = (indexToRemove: number) => {\n if (disabled) return;\n \n const newTags = tags.filter((_, index) => index !== indexToRemove);\n setTags(newTags);\n \n //in multiselect if tag removed while dorpdownopen, do not call onchange\n if(!isMultiSelect || isMultiSelectWithoutCTA ||(isMultiSelect && !isDropdownOpen)) {\n onChange?.(newTags.map(tag => tag.value));\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n // Handle Backspace to remove last tag (preserve existing behavior)\n if (e.key === 'Backspace' && inputValue === \"\" && tags.length > 0) {\n e.preventDefault();\n const newTags = tags.slice(0, -1);\n setTags(newTags);\n onChange?.(newTags.map(tag => tag.value));\n return;\n }\n\n // Handle Enter for custom tags when no options match\n if (e.key === 'Enter' && inputValue.trim() && filteredOptions.length === 0 && allowCustomTags) {\n e.preventDefault();\n const newTags = [...tags];\n if (!newTags.some(tag => tag.value === inputValue.trim())) {\n newTags.push({ label: inputValue.trim(), value: inputValue.trim() });\n setTags(newTags);\n onChange?.(newTags.map(tag => tag.value));\n }\n setInputValue('');\n setHighlightedIndex(-1);\n setIsDropdownOpen(false);\n return;\n }\n\n // Let combobox hook handle all other keyboard events (Arrow keys, Enter, Escape, etc.)\n comboboxInputProps.onKeyDown(e);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n const newValue = e.target.value;\n setInputValue(newValue);\n setHighlightedIndex(-1); // Reset highlighted index when user types\n \n if (newValue.trim() && !isDropdownOpen) {\n setIsDropdownOpen(true);\n }\n };\n\n const handleInputFocus = () => {\n if (disabled) return;\n\n if (inputValue.trim() || options.length > 0) {\n setIsDropdownOpen(true);\n }\n };\n\n const handleInputContainerClick = (e: React.MouseEvent) => {\n if (disabled) return;\n\n e.stopPropagation();\n inputRef.current?.focus();\n if (!isDropdownOpen && (inputValue.trim() || options.length > 0)) {\n setIsDropdownOpen(true);\n }\n };\n\n const handlePopoverWrapperClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n \n const target = e.target as HTMLElement;\n const isInputArea = target.closest('.input-with-tags-container');\n if (isInputArea) {\n e.stopPropagation();\n }\n };\n\n const toggleDropdown = () => {\n if (disabled) return;\n setIsDropdownOpen(!isDropdownOpen);\n };\n\n useImperativeHandle(ref, () => ({ toggleDropdown }), []);\n\n const defaultRenderOption = (\n option: DropdownOption,\n index: number,\n onSelect: (option: DropdownOption) => void,\n disabled: boolean\n ) => {\n const isSelected = tags.some((tag) => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isSelected);\n \n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option ${getHighlightClass(isHighlighted)}`}\n onClick={() => !disabled && onSelect(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n data-automation-id={`${automationId}-option-${option.id}`}\n >\n <span className=\"option-label\">{option.label}</span>\n {option.value !== option.label && <span className=\"option-value\">{option.value}</span>}\n </div>\n );\n };\n const handleApplySelectedDropDownValues = () => {\n applyClickedRef.current = true;\n const newTagValues = tags.map(tag => tag.value);\n onChange?.(newTagValues);\n setIsDropdownOpen(false);\n };\n\n const clearSelectedDropDownValues = () => {\n setTags([]);\n };\n const multiSelectRenderOption = (option: DropdownOption, index: number) => {\n const isOptionSelected = tags.some(tag => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isOptionSelected);\n \n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option dropdown-with-input-tags-multi-select-option ${getHighlightClass(isHighlighted)}`}\n aria-checked={isOptionSelected}\n onClick={() => {\n if (disabled) return;\n handleMultiSelectDropdownOptionClick(!isOptionSelected, option);\n inputRef.current?.focus();\n }}\n onMouseEnter={() => setHighlightedIndex(index)}\n data-automation-id={`${automationId}-option-${option.id}`}\n >\n <Checkbox\n automationId=\"checkbox\"\n className=\"checkbox\"\n checked={isOptionSelected}\n onChange={() => {}}\n label={option.label}\n tabIndex={-1}\n />\n </div>\n );\n };\n\n const multiSelectRenderCTAs = () => {\n return (\n <div\n className=\"dropdown-with-input-tags-ctas-container\"\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Home' || e.key === 'End') {\n e.stopPropagation();\n }\n }}\n >\n <Button label=\"Clear\" type=\"link\" size=\"sm\" onClick={clearSelectedDropDownValues} automationId={`${automationId}-clear-button`} />\n <Button label=\"Apply\" type=\"primary\" size=\"sm\" onClick={handleApplySelectedDropDownValues} automationId={`${automationId}-apply-button`} />\n </div>\n );\n };\n\n \n\n return (\n <div\n className={`dropdown-with-input-tags-wrapper ${className} ${disabled ? 'disabled-wrapper' : ''}`}\n data-automation-id={automationId}\n {...containerProps}\n >\n {label && <label id={`${automationId}-label`} className=\"dropdown-with-input-tags-label\">{label}</label>}\n\n <div onClick={handlePopoverWrapperClick}>\n <Popover\n ref={popoverRef}\n className=\"dropdown-with-input-tags-popover\"\n contentWidth=\"full\"\n position=\"bottom-left\"\n isPopoverOpen={!disabled && isDropdownOpen}\n onPopoverToggle={disabled ? () => {} : setIsDropdownOpen}\n disableClickToggle={true}\n isWithPortal={isWithPortal}\n renderPopoverContents={({ closePopoverCb }) => (\n <>\n <div\n {...listboxProps}\n className=\"dropdown-with-input-tags-content\"\n {...(isMultiSelect && { 'aria-multiselectable': 'true' })}\n >\n {effectiveItems.length > 0 ? (\n effectiveItems.map((option, index) => {\n if (option.value === ADD_CUSTOM_TAG_VALUE) {\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, false);\n return (\n <div\n key={option.id}\n {...optionProps}\n className={`dropdown-with-input-tags-option dropdown-with-input-tags-custom-option ${getHighlightClass(isHighlighted)}`}\n onClick={() => {\n if (disabled) return;\n handleSelectFromDropdown(option);\n closePopoverCb();\n }}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n Add \"{inputValue.trim()}\"\n </div>\n );\n }\n if (isMultiSelect) {\n return multiSelectRenderOption(option, index);\n }\n \n const isSelected = tags.some((tag) => tag.value === option.value);\n const isHighlighted = highlightedIndex === index;\n const optionProps = getOptionProps(index, isSelected);\n const optionPropsWithHandlers = {\n ...optionProps,\n onMouseEnter: () => setHighlightedIndex(index),\n className: `dropdown-with-input-tags-option ${getHighlightClass(isHighlighted)}`\n };\n \n return renderOption\n ? renderOption(option, optionPropsWithHandlers, handleSelectOption)\n : defaultRenderOption(option, index, handleSelectOption, disabled);\n })\n ) : (\n <div className=\"dropdown-with-input-tags-no-options\">\n <div className=\"dropdown-with-input-tags-no-options-text\">\n {noOptionsMessage}\n </div>\n </div>\n )}\n </div>\n {isMultiSelect && !isMultiSelectWithoutCTA && multiSelectRenderCTAs()}\n </>\n )}\n renderPopoverSrcElement={() => (\n <div className=\"dropdown-with-input-tags-input-container\">\n <div\n className={`input-with-tags-container ${disabled ? 'disabled-input-with-tags-container' : ''} ${isKeyboardFocused ? 'keyboard-focused' : ''}`}\n onClick={handleInputContainerClick}\n onKeyDown={(e) => {\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n inputRef.current?.focus();\n }\n }}\n >\n {tags.map((tag, index) => (\n <span key={index} className=\"tag-in-inputwithtags\">\n {tag[displayTagBy]}\n {!disabled && (\n <Icon\n name=\"close\"\n className=\"close-icon-in-inputwithtags\"\n ariaLabel={`Remove tag ${tag[displayTagBy]}`}\n onClick={() => handleRemoveTag(index)}\n shouldStopPropagation\n />\n )}\n </span>\n ))}\n {(showInput || !tags.length || isMultiSelect) && (\n <input\n ref={inputRef}\n {...comboboxInputProps}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleInputFocus}\n placeholder={tags.length === 0 ? placeholder : ''}\n className={`input-with-tags-input${!showInput && tags.length > 0 && !inputValue ? ' sr-only' : ''}`}\n disabled={disabled}\n {...getA11yNameAttributes({\n ariaLabel: ariaLabel || label || 'Search and select options',\n ariaLabelledBy,\n ariaDescribedBy\n })}\n />\n )}\n </div>\n </div>\n )}\n automationId={automationId}\n popoverContentAutomationId={`${automationId}-content`}\n />\n </div>\n </div>\n );\n }\n); "],"names":["DropdownWithInputTags","value","onChange","placeholder","className","options","renderOption","label","ariaLabel","ariaLabelledBy","ariaDescribedBy","automationId","noOptionsMessage","allowCustomTags","disabled","type","showInput","displayTagBy","isWithPortal","ref","initValues","values","map","val","found","find","opt","tags","setTags","useState","inputValue","setInputValue","filteredOptions","setFilteredOptions","isDropdownOpen","setIsDropdownOpen","popoverRef","useRef","inputRef","applyClickedRef","isMultiSelectWithoutCTA","isMultiSelect","listboxId","useStableId","handleSelectOption","useCallback","option","newTags","some","tag","push","handleMultiSelectDropdownOptionClick","isSelected","newSelectedTags","filter","current","ADD_CUSTOM_TAG_VALUE","handleSelectFromDropdown","trimmed","trim","effectiveItems","length","id","containerProps","inputProps","comboboxInputProps","listboxProps","getOptionProps","highlightedIndex","setHighlightedIndex","isKeyboardFocused","useCombobox","items","isOpen","onOpenChange","onSelect","hasItems","keepHighlightOnSelect","closeOnTab","getHighlightClass","isHighlighted","useEffect","filtered","toLowerCase","includes","announce","assertiveness","batchId","delay","handleRemoveTag","indexToRemove","_","index","handleKeyDown","e","key","preventDefault","slice","onKeyDown","handleInputChange","newValue","target","handleInputFocus","handleInputContainerClick","stopPropagation","focus","handlePopoverWrapperClick","closest","toggleDropdown","useImperativeHandle","defaultRenderOption","optionProps","React","createElement","_extends","onClick","onMouseEnter","handleApplySelectedDropDownValues","newTagValues","clearSelectedDropDownValues","multiSelectRenderOption","isOptionSelected","Checkbox","checked","tabIndex","multiSelectRenderCTAs","Button","size","Popover","contentWidth","position","isPopoverOpen","onPopoverToggle","disableClickToggle","renderPopoverContents","closePopoverCb","Fragment","optionPropsWithHandlers","renderPopoverSrcElement","ctrlKey","metaKey","altKey","Icon","name","shouldStopPropagation","onFocus","getA11yNameAttributes","popoverContentAutomationId"],"mappings":"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"}
package/dist/index4.js CHANGED
@@ -1,20 +1,20 @@
1
- import o, { forwardRef as I, useRef as L, useEffect as z } from "react";
2
- import { getA11yNameAttributes as D } from "./index81.js";
3
- import { useAccessiblePress as U } from "./index67.js";
1
+ import o, { forwardRef as F, useRef as G, useEffect as H } from "react";
2
+ import { getA11yNameAttributes as J } from "./index81.js";
3
+ import { useAccessiblePress as K } from "./index67.js";
4
4
  import "./index72.js";
5
- import { announce as q } from "./index75.js";
6
- import { Icon as b } from "./index6.js";
5
+ import { announce as L } from "./index75.js";
6
+ import { Icon as y } from "./index6.js";
7
7
  /* empty css */
8
- function c() {
9
- return c = Object.assign ? Object.assign.bind() : function(n) {
8
+ function u() {
9
+ return u = Object.assign ? Object.assign.bind() : function(n) {
10
10
  for (var s = 1; s < arguments.length; s++) {
11
11
  var r = arguments[s];
12
- for (var e in r) ({}).hasOwnProperty.call(r, e) && (n[e] = r[e]);
12
+ for (var t in r) ({}).hasOwnProperty.call(r, t) && (n[t] = r[t]);
13
13
  }
14
14
  return n;
15
- }, c.apply(null, arguments);
15
+ }, u.apply(null, arguments);
16
16
  }
17
- const a = "focus-outline", F = {
17
+ const a = "focus-outline", M = {
18
18
  primary: "primary-btn disabled-btn pointer-events-none cursor-not-allowed",
19
19
  secondary: "secondary-btn disabled-btn pointer-events-none cursor-not-allowed",
20
20
  ghost: "ghost-btn disabled-btn pointer-events-none cursor-not-allowed",
@@ -26,7 +26,7 @@ const a = "focus-outline", F = {
26
26
  // padding: 8px, 12px
27
27
  lg: "py-3 px-4 large"
28
28
  // padding: 12px, 16px
29
- }, f = {
29
+ }, h = {
30
30
  primary: `primary-btn ${a}`,
31
31
  secondary: `secondary-btn ${a}`,
32
32
  ghost: `ghost-btn ${a}`,
@@ -38,74 +38,83 @@ const a = "focus-outline", F = {
38
38
  // padding: 8px, 12px
39
39
  lg: "py-3 px-4 large"
40
40
  // padding: 12px, 16px
41
- }, G = {
41
+ }, Q = {
42
42
  blue: "theme-blue",
43
43
  red: "theme-red",
44
44
  yellow: "theme-yellow",
45
45
  green: "theme-green",
46
46
  ai: "theme-ai",
47
47
  white: "theme-white"
48
- }, H = /* @__PURE__ */ I(({
48
+ }, S = /* @__PURE__ */ F(({
49
49
  type: n = "primary",
50
50
  theme: s = "blue",
51
51
  size: r = "md",
52
- label: e = "",
53
- iconPosition: u = "left",
54
- disabled: y = !1,
55
- loading: t = !1,
56
- className: h = "",
57
- iconProps: i = {
52
+ label: t = "",
53
+ iconPosition: p = "left",
54
+ disabled: w = !1,
55
+ loading: e = !1,
56
+ loadingLabel: l,
57
+ className: g = "",
58
+ iconProps: m = {
58
59
  name: ""
59
60
  },
60
- automationId: g = "",
61
- autoFocus: w = !1,
62
- ariaLabel: N,
63
- ariaLabelledBy: v,
64
- ariaDescribedBy: x,
65
- isPressed: k,
66
- onClick: C,
67
- onKeyboardActivate: E,
68
- ...$
69
- }, P) => {
70
- const m = n === "unstyled", p = L(t);
71
- z(() => {
72
- t && !p.current && q(e ? `${e}, loading` : "Loading"), p.current = t;
73
- }, [t, e]);
61
+ automationId: v = "",
62
+ autoFocus: N = !1,
63
+ ariaLabel: x,
64
+ ariaLabelledBy: k,
65
+ ariaDescribedBy: C,
66
+ isPressed: E,
67
+ onClick: $,
68
+ onKeyboardActivate: P,
69
+ onPointerDown: R,
70
+ onMouseDown: j,
71
+ onTouchStart: A,
72
+ ...B
73
+ }, O) => {
74
+ const c = n === "unstyled", b = e && l ? l : t, f = G(e);
75
+ H(() => {
76
+ e && !f.current && L(l || (t ? `${t}, loading` : "Loading"), {
77
+ delay: 300
78
+ }), f.current = e;
79
+ }, [e, t, l]);
74
80
  const {
75
- pressProps: R,
81
+ pressProps: _,
76
82
  isDisabled: d
77
- } = U({
78
- disabled: y,
79
- loading: t,
83
+ } = K({
84
+ disabled: w,
85
+ loading: e,
80
86
  isNative: !0,
81
87
  // native <button> => hook does NOT add Enter/Space onKeyDown
82
- pressed: k,
83
- onClick: C,
84
- onKeyboardActivate: E
85
- }), j = !m && n !== "link" ? f[r] : "", A = m ? "" : G[s], B = d ? F[n] : f[n], l = i?.name ? {
86
- ...i,
87
- stroke: d ? "var(--color-gray-600)" : i.stroke
88
- } : void 0, O = ["se-design-button", A, j, B, h, m ? "" : "rounded-[6px] inline-flex gap-1 items-center min-w-fit"].filter(Boolean).join(" "), _ = D({
89
- ariaLabel: N,
90
- ariaLabelledBy: v,
91
- ariaDescribedBy: x
88
+ pressed: E,
89
+ onClick: $,
90
+ onKeyboardActivate: P,
91
+ onPointerDown: R,
92
+ onMouseDown: j,
93
+ onTouchStart: A
94
+ }), I = !c && n !== "link" ? h[r] : "", z = c ? "" : Q[s], D = d ? M[n] : h[n], i = m?.name ? {
95
+ ...m,
96
+ stroke: d ? "var(--color-gray-600)" : m.stroke
97
+ } : void 0, U = ["se-design-button", z, I, D, g, c ? "" : "rounded-[6px] inline-flex gap-1 items-center min-w-fit"].filter(Boolean).join(" "), q = J({
98
+ ariaLabel: x,
99
+ ariaLabelledBy: k,
100
+ ariaDescribedBy: C
92
101
  });
93
- return /* @__PURE__ */ o.createElement("button", c({
94
- ref: P,
102
+ return /* @__PURE__ */ o.createElement("button", u({
103
+ ref: O,
95
104
  type: "button",
96
- className: O,
105
+ className: U,
97
106
  disabled: d,
98
- autoFocus: w,
99
- "data-automation-id": g
100
- }, $, R, _), t && /* @__PURE__ */ o.createElement("div", {
107
+ autoFocus: N,
108
+ "data-automation-id": v
109
+ }, B, _, q), e && /* @__PURE__ */ o.createElement("div", {
101
110
  "aria-hidden": "true",
102
111
  className: "animate-spin w-4 h-4 border-2 border-current border-t-transparent rounded-full"
103
- }), !t && l?.name && u === "left" && /* @__PURE__ */ o.createElement(b, l), e && /* @__PURE__ */ o.createElement("span", {
112
+ }), !e && i?.name && p === "left" && /* @__PURE__ */ o.createElement(y, i), b && /* @__PURE__ */ o.createElement("span", {
104
113
  className: "button-label [font-weight:inherit]"
105
- }, e), !t && l?.name && u === "right" && /* @__PURE__ */ o.createElement(b, l));
114
+ }, b), !e && i?.name && p === "right" && /* @__PURE__ */ o.createElement(y, i));
106
115
  });
107
- H.displayName = "Button";
116
+ S.displayName = "Button";
108
117
  export {
109
- H as Button
118
+ S as Button
110
119
  };
111
120
  //# sourceMappingURL=index4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index4.js","sources":["../src/components/Button/index.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useRef } from 'react';\nimport { Map } from '../../utils/common.types';\nimport { useAccessiblePress, getA11yNameAttributes } from '../../utils/a11y';\nimport { announce } from '../../utils/a11y/liveAnnouncer';\nimport { Icon, IconProps } from '../Icon';\nimport './style.scss';\n\n/**\n * Allows native button attributes (aria-*, data-*, etc.) to be passed through,\n * but keeps our own onClick/disabled/type typing AND aria-label/aria-labelledby/aria-describedby.\n * Note: We omit 'type' because we use it for button variant, not HTML type attribute.\n * The HTML type is always set to 'button' internally.\n */\ntype NativeButtonProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onClick' | 'disabled' | 'type' | 'aria-label' | 'aria-labelledby' | 'aria-describedby' | 'aria-pressed'\n>;\n\nexport interface ButtonProps extends NativeButtonProps {\n /**\n * Type of the button. \n */\n type?: 'primary' | 'secondary' | 'ghost' | 'link' | 'unstyled';\n /**\n * Color pallet of the button\n */\n theme?: 'blue' | 'red' | 'yellow' | 'green' | 'ai' | 'white';\n /**\n * Size of the button\n */\n size?: 'sm' | 'md' | 'lg';\n /**\n * Button contents\n */\n label: string | '';\n /**\n * Icon props\n */\n iconProps?: IconProps;\n /**\n * Icon position\n */\n iconPosition?: 'left' | 'right';\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Loading state - will disable button and show spinner\n */\n loading?: boolean;\n /**\n * Optional click handler (called for pointer/mouse activations)\n */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Optional keyboard activation handler\n * Called when button is activated via keyboard (Enter/Space) or assistive technology virtual activation.\n * Use when you want to have different behavior for keyboard and pointer activations.\n * If not provided, onClick will be called for all activations.\n */\n onKeyboardActivate?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Custom class name\n */\n className?: string;\n /**\n * Automation ID for testing\n */\n automationId?: string;\n /**\n * If true, button will be focused on mount.\n * For programmatic focus control, use ref with .focus() instead.\n */\n autoFocus?: boolean;\n /**\n * Accessible name for the button. Use when there's no visible label (e.g., icon-only buttons).\n * Prefer ariaLabelledBy when a visible label exists.\n */\n ariaLabel?: string;\n /**\n * ID(s) of element(s) that label this button.\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 button.\n * Provides additional context announced after the accessible name.\n */\n ariaDescribedBy?: string;\n /**\n * When true, sets aria-pressed for toggle/pressed state \n */\n isPressed?: boolean;\n}\n\nconst focusClass = 'focus-outline';\nconst disabledClassNames: Map = {\n primary: 'primary-btn disabled-btn pointer-events-none cursor-not-allowed',\n secondary: 'secondary-btn disabled-btn pointer-events-none cursor-not-allowed',\n ghost: 'ghost-btn disabled-btn pointer-events-none cursor-not-allowed',\n link: 'link-btn w-fit disabled-btn pointer-events-none cursor-not-allowed',\n unstyled: 'unstyled-btn disabled-btn pointer-events-none cursor-not-allowed',\n sm: 'py-1 px-3 small', // padding: 4px, 12px\n md: 'py-2 px-3 medium', // padding: 8px, 12px\n lg: 'py-3 px-4 large' // padding: 12px, 16px\n};\nconst classNames: Map = {\n primary: `primary-btn ${focusClass}`,\n secondary: `secondary-btn ${focusClass}`,\n ghost: `ghost-btn ${focusClass}`,\n link: `link-btn w-fit ${focusClass}`,\n unstyled: `unstyled-btn ${focusClass}`,\n sm: 'py-1 px-3 small', // padding: 4px, 12px\n md: 'py-2 px-3 medium', // padding: 8px, 12px\n lg: 'py-3 px-4 large' // padding: 12px, 16px\n};\n\nconst colorPalletClassNames: Map = {\n blue: 'theme-blue',\n red: 'theme-red',\n yellow: 'theme-yellow',\n green: 'theme-green',\n ai: 'theme-ai',\n white: 'theme-white'\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n type = 'primary',\n theme = 'blue',\n size = 'md',\n label = '',\n iconPosition = 'left',\n disabled = false,\n loading = false,\n className = '',\n iconProps = { name: '' },\n automationId = '',\n autoFocus = false,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n isPressed,\n onClick,\n onKeyboardActivate,\n ...props\n },\n ref\n ) => {\n const isUnstyled = type === 'unstyled';\n const prevLoadingRef = useRef(loading);\n\n useEffect(() => {\n if (loading && !prevLoadingRef.current) {\n announce(label ? `${label}, loading` : 'Loading');\n }\n prevLoadingRef.current = loading;\n }, [loading, label]);\n\n // Use shared hook for activation handling (pointer vs keyboard/virtual click routing)\n const { pressProps, isDisabled } = useAccessiblePress({\n disabled,\n loading,\n isNative: true, // native <button> => hook does NOT add Enter/Space onKeyDown\n pressed: isPressed,\n onClick: onClick as (e: React.MouseEvent<HTMLElement>) => void,\n onKeyboardActivate: onKeyboardActivate as (e: React.MouseEvent<HTMLElement>) => void\n });\n\n // Skip size/color classes for unstyled variant\n const sizeClassName = !isUnstyled && type !== 'link' ? classNames[size] : '';\n const colorPalletClassName = !isUnstyled ? colorPalletClassNames[theme] : '';\n const typeClassName = isDisabled ? disabledClassNames[type] : classNames[type];\n\n // Avoid mutating incoming iconProps\n const computedIconProps: IconProps | undefined = iconProps?.name\n ? {\n ...iconProps,\n stroke: isDisabled ? 'var(--color-gray-600)' : iconProps.stroke\n }\n : undefined;\n\n const buttonClassName = [\n 'se-design-button',\n colorPalletClassName,\n sizeClassName,\n typeClassName,\n className,\n !isUnstyled ? 'rounded-[6px] inline-flex gap-1 items-center min-w-fit' : ''\n ]\n .filter(Boolean)\n .join(' ');\n\n // Compute accessible name/description props with correct precedence\n const accessibleNameProps = getA11yNameAttributes({\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n });\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={buttonClassName}\n disabled={isDisabled}\n autoFocus={autoFocus}\n data-automation-id={automationId}\n {...props}\n {...(pressProps as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...accessibleNameProps}\n >\n {loading && (\n <div\n aria-hidden=\"true\"\n className=\"animate-spin w-4 h-4 border-2 border-current border-t-transparent rounded-full\"\n />\n )}\n {!loading && computedIconProps?.name && iconPosition === 'left' && (\n <Icon {...computedIconProps} />\n )}\n {label && <span className=\"button-label [font-weight:inherit]\">{label}</span>}\n {!loading && computedIconProps?.name && iconPosition === 'right' && (\n <Icon {...computedIconProps} />\n )}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n"],"names":["focusClass","disabledClassNames","primary","secondary","ghost","link","unstyled","sm","md","lg","classNames","colorPalletClassNames","blue","red","yellow","green","ai","white","Button","type","theme","size","label","iconPosition","disabled","loading","className","iconProps","name","automationId","autoFocus","ariaLabel","ariaLabelledBy","ariaDescribedBy","isPressed","onClick","onKeyboardActivate","props","ref","isUnstyled","prevLoadingRef","useRef","useEffect","current","announce","pressProps","isDisabled","useAccessiblePress","isNative","pressed","sizeClassName","colorPalletClassName","typeClassName","computedIconProps","stroke","undefined","buttonClassName","filter","Boolean","join","accessibleNameProps","getA11yNameAttributes","React","createElement","_extends","Icon","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"index4.js","sources":["../src/components/Button/index.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useRef } from 'react';\nimport { Map } from '../../utils/common.types';\nimport { useAccessiblePress, getA11yNameAttributes } from '../../utils/a11y';\nimport { announce } from '../../utils/a11y/liveAnnouncer';\nimport { Icon, IconProps } from '../Icon';\nimport './style.scss';\n\n/**\n * Allows native button attributes (aria-*, data-*, etc.) to be passed through,\n * but keeps our own onClick/disabled/type typing AND aria-label/aria-labelledby/aria-describedby.\n * Note: We omit 'type' because we use it for button variant, not HTML type attribute.\n * The HTML type is always set to 'button' internally.\n */\ntype NativeButtonProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onClick' | 'disabled' | 'type' | 'aria-label' | 'aria-labelledby' | 'aria-describedby' | 'aria-pressed'\n>;\n\nexport interface ButtonProps extends NativeButtonProps {\n /**\n * Type of the button. \n */\n type?: 'primary' | 'secondary' | 'ghost' | 'link' | 'unstyled';\n /**\n * Color pallet of the button\n */\n theme?: 'blue' | 'red' | 'yellow' | 'green' | 'ai' | 'white';\n /**\n * Size of the button\n */\n size?: 'sm' | 'md' | 'lg';\n /**\n * Button contents\n */\n label: string | '';\n /**\n * Icon props\n */\n iconProps?: IconProps;\n /**\n * Icon position\n */\n iconPosition?: 'left' | 'right';\n /**\n * Disabled state\n */\n disabled?: boolean;\n /**\n * Loading state - will disable button and show spinner\n */\n loading?: boolean;\n /**\n * Custom label shown (both visually and announced to screen readers) when loading is true.\n * When omitted, the original label remains visible and SR announcement is \"${label}, loading\".\n */\n loadingLabel?: string;\n /**\n * Optional click handler (called for pointer/mouse activations)\n */\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Optional keyboard activation handler\n * Called when button is activated via keyboard (Enter/Space) or assistive technology virtual activation.\n * Use when you want to have different behavior for keyboard and pointer activations.\n * If not provided, onClick will be called for all activations.\n */\n onKeyboardActivate?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n /**\n * Custom class name\n */\n className?: string;\n /**\n * Automation ID for testing\n */\n automationId?: string;\n /**\n * If true, button will be focused on mount.\n * For programmatic focus control, use ref with .focus() instead.\n */\n autoFocus?: boolean;\n /**\n * Accessible name for the button. Use when there's no visible label (e.g., icon-only buttons).\n * Prefer ariaLabelledBy when a visible label exists.\n */\n ariaLabel?: string;\n /**\n * ID(s) of element(s) that label this button.\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 button.\n * Provides additional context announced after the accessible name.\n */\n ariaDescribedBy?: string;\n /**\n * When true, sets aria-pressed for toggle/pressed state \n */\n isPressed?: boolean;\n}\n\nconst focusClass = 'focus-outline';\nconst disabledClassNames: Map = {\n primary: 'primary-btn disabled-btn pointer-events-none cursor-not-allowed',\n secondary: 'secondary-btn disabled-btn pointer-events-none cursor-not-allowed',\n ghost: 'ghost-btn disabled-btn pointer-events-none cursor-not-allowed',\n link: 'link-btn w-fit disabled-btn pointer-events-none cursor-not-allowed',\n unstyled: 'unstyled-btn disabled-btn pointer-events-none cursor-not-allowed',\n sm: 'py-1 px-3 small', // padding: 4px, 12px\n md: 'py-2 px-3 medium', // padding: 8px, 12px\n lg: 'py-3 px-4 large' // padding: 12px, 16px\n};\nconst classNames: Map = {\n primary: `primary-btn ${focusClass}`,\n secondary: `secondary-btn ${focusClass}`,\n ghost: `ghost-btn ${focusClass}`,\n link: `link-btn w-fit ${focusClass}`,\n unstyled: `unstyled-btn ${focusClass}`,\n sm: 'py-1 px-3 small', // padding: 4px, 12px\n md: 'py-2 px-3 medium', // padding: 8px, 12px\n lg: 'py-3 px-4 large' // padding: 12px, 16px\n};\n\nconst colorPalletClassNames: Map = {\n blue: 'theme-blue',\n red: 'theme-red',\n yellow: 'theme-yellow',\n green: 'theme-green',\n ai: 'theme-ai',\n white: 'theme-white'\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n type = 'primary',\n theme = 'blue',\n size = 'md',\n label = '',\n iconPosition = 'left',\n disabled = false,\n loading = false,\n loadingLabel,\n className = '',\n iconProps = { name: '' },\n automationId = '',\n autoFocus = false,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n isPressed,\n onClick,\n onKeyboardActivate,\n onPointerDown,\n onMouseDown,\n onTouchStart,\n ...props\n },\n ref\n ) => {\n const isUnstyled = type === 'unstyled';\n const visibleLabel = loading && loadingLabel ? loadingLabel : label;\n const prevLoadingRef = useRef(loading);\n\n useEffect(() => {\n if (loading && !prevLoadingRef.current) {\n announce(loadingLabel || (label ? `${label}, loading` : 'Loading'), { delay: 300 });\n }\n prevLoadingRef.current = loading;\n }, [loading, label, loadingLabel]);\n\n // Use shared hook for activation handling (pointer vs keyboard/virtual click routing)\n const { pressProps, isDisabled } = useAccessiblePress({\n disabled,\n loading,\n isNative: true, // native <button> => hook does NOT add Enter/Space onKeyDown\n pressed: isPressed,\n onClick: onClick as (e: React.MouseEvent<HTMLElement>) => void,\n onKeyboardActivate: onKeyboardActivate as (e: React.MouseEvent<HTMLElement>) => void,\n onPointerDown: onPointerDown as (e: React.PointerEvent<HTMLElement>) => void,\n onMouseDown: onMouseDown as (e: React.MouseEvent<HTMLElement>) => void,\n onTouchStart: onTouchStart as (e: React.TouchEvent<HTMLElement>) => void\n });\n\n // Skip size/color classes for unstyled variant\n const sizeClassName = !isUnstyled && type !== 'link' ? classNames[size] : '';\n const colorPalletClassName = !isUnstyled ? colorPalletClassNames[theme] : '';\n const typeClassName = isDisabled ? disabledClassNames[type] : classNames[type];\n\n // Avoid mutating incoming iconProps\n const computedIconProps: IconProps | undefined = iconProps?.name\n ? {\n ...iconProps,\n stroke: isDisabled ? 'var(--color-gray-600)' : iconProps.stroke\n }\n : undefined;\n\n const buttonClassName = [\n 'se-design-button',\n colorPalletClassName,\n sizeClassName,\n typeClassName,\n className,\n !isUnstyled ? 'rounded-[6px] inline-flex gap-1 items-center min-w-fit' : ''\n ]\n .filter(Boolean)\n .join(' ');\n\n // Compute accessible name/description props with correct precedence\n const accessibleNameProps = getA11yNameAttributes({\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n });\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={buttonClassName}\n disabled={isDisabled}\n autoFocus={autoFocus}\n data-automation-id={automationId}\n {...props}\n {...(pressProps as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...accessibleNameProps}\n >\n {loading && (\n <div\n aria-hidden=\"true\"\n className=\"animate-spin w-4 h-4 border-2 border-current border-t-transparent rounded-full\"\n />\n )}\n {!loading && computedIconProps?.name && iconPosition === 'left' && (\n <Icon {...computedIconProps} />\n )}\n {visibleLabel && (\n <span className=\"button-label [font-weight:inherit]\">{visibleLabel}</span>\n )}\n {!loading && computedIconProps?.name && iconPosition === 'right' && (\n <Icon {...computedIconProps} />\n )}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n"],"names":["focusClass","disabledClassNames","primary","secondary","ghost","link","unstyled","sm","md","lg","classNames","colorPalletClassNames","blue","red","yellow","green","ai","white","Button","type","theme","size","label","iconPosition","disabled","loading","loadingLabel","className","iconProps","name","automationId","autoFocus","ariaLabel","ariaLabelledBy","ariaDescribedBy","isPressed","onClick","onKeyboardActivate","onPointerDown","onMouseDown","onTouchStart","props","ref","isUnstyled","visibleLabel","prevLoadingRef","useRef","useEffect","current","announce","delay","pressProps","isDisabled","useAccessiblePress","isNative","pressed","sizeClassName","colorPalletClassName","typeClassName","computedIconProps","stroke","undefined","buttonClassName","filter","Boolean","join","accessibleNameProps","getA11yNameAttributes","React","createElement","_extends","Icon","displayName"],"mappings":"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"}
package/dist/index67.js CHANGED
@@ -1,49 +1,58 @@
1
- import * as t from "react";
2
- import { isVirtualClick as w } from "./index78.js";
3
- function R({
4
- disabled: p = !1,
5
- loading: i = !1,
1
+ import * as s from "react";
2
+ import { isVirtualClick as x } from "./index78.js";
3
+ function I({
4
+ disabled: v = !1,
5
+ loading: l = !1,
6
6
  onClick: u,
7
- onKeyboardActivate: s,
8
- isNative: l = !0,
9
- role: d = "button",
10
- tabIndex: D = 0,
7
+ onKeyboardActivate: n,
8
+ isNative: o = !0,
9
+ role: y = "button",
10
+ tabIndex: C = 0,
11
11
  stopPropagation: c = !1,
12
12
  preventDefault: f = !1,
13
- pressed: P
13
+ pressed: P,
14
+ onPointerDown: k,
15
+ onMouseDown: b,
16
+ onTouchStart: p
14
17
  } = {}) {
15
- const e = p || i, n = t.useRef(!1), o = t.useCallback(() => {
16
- n.current = !0;
17
- }, []), m = t.useCallback((r) => {
18
+ const e = v || l, a = s.useRef(!1), t = s.useCallback(() => {
19
+ a.current = !0;
20
+ }, []), D = s.useCallback((r) => {
18
21
  if (e) return;
19
22
  c && r.stopPropagation(), f && r.preventDefault();
20
- const y = w(r.nativeEvent), C = n.current;
21
- n.current = !1;
22
- const b = y ? "virtual" : C ? "pointer" : "keyboard";
23
- if ((b === "keyboard" || b === "virtual") && s) {
24
- s(r);
23
+ const h = x(r.nativeEvent), w = a.current;
24
+ a.current = !1;
25
+ const m = h ? "virtual" : w ? "pointer" : "keyboard";
26
+ if ((m === "keyboard" || m === "virtual") && n) {
27
+ n(r);
25
28
  return;
26
29
  }
27
30
  u?.(r);
28
- }, [e, u, s, c, f]), v = t.useCallback((r) => {
31
+ }, [e, u, n, c, f]), R = s.useCallback((r) => {
29
32
  e || (r.key === "Enter" || r.key === " ") && (r.preventDefault(), r.currentTarget.click());
30
- }, [e]), k = {
31
- onPointerDown: o,
32
- onMouseDown: o,
33
- onTouchStart: o,
34
- onClick: m,
33
+ }, [e]), d = {
34
+ onPointerDown: k ? (r) => {
35
+ t(), k(r);
36
+ } : t,
37
+ onMouseDown: b ? (r) => {
38
+ t(), b(r);
39
+ } : t,
40
+ onTouchStart: p ? (r) => {
41
+ t(), p(r);
42
+ } : t,
43
+ onClick: D,
35
44
  "aria-disabled": e ? "true" : void 0,
36
- "aria-busy": i ? "true" : void 0,
45
+ "aria-busy": l ? "true" : void 0,
37
46
  "aria-pressed": P
38
47
  };
39
- l || (k.onKeyDown = v);
40
- const a = {
41
- pressProps: k,
48
+ o || (d.onKeyDown = R);
49
+ const i = {
50
+ pressProps: d,
42
51
  isDisabled: e
43
52
  };
44
- return l || (a.role = d, a.tabIndex = e ? -1 : D), a;
53
+ return o || (i.role = y, i.tabIndex = e ? -1 : C), i;
45
54
  }
46
55
  export {
47
- R as useAccessiblePress
56
+ I as useAccessiblePress
48
57
  };
49
58
  //# sourceMappingURL=index67.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index67.js","sources":["../src/utils/a11y/useAccessiblePress.ts"],"sourcesContent":["import * as React from 'react';\nimport { isVirtualClick } from '../virtualClick';\n\n/**\n * Hook for accessible press interactions (pointer vs keyboard vs virtual click).\n *\n * Handles:\n * - Pointer intent tracking (mouse/touch)\n * - Virtual click detection (NVDA browse mode, etc.)\n * - Routing to appropriate handler (onClick vs onKeyboardActivate)\n * - For non-native elements: Enter/Space → activation\n * - Optional stopPropagation and preventDefault\n *\n * @example\n * // Native button (isNative=true, the default)\n * const { pressProps } = useAccessiblePress({ onClick, disabled });\n * <button {...pressProps}>Click me</button>\n *\n * @example\n * // Non-native element (div acting as button)\n * const { pressProps, role, tabIndex } = useAccessiblePress({ onClick, isNative: false });\n * <div role={role} tabIndex={tabIndex} {...pressProps}>Click me</div>\n *\n * @example\n * // Element nested inside clickable parent (prevent event bubbling)\n * const { pressProps, tabIndex } = useAccessiblePress({ \n * onClick, \n * isNative: false, \n * stopPropagation: true \n * });\n * <div role=\"button\" tabIndex={tabIndex} {...pressProps}>Click me</div>\n */\n\ntype InputKind = 'pointer' | 'keyboard' | 'virtual';\n\nexport type UseAccessiblePressOptions = {\n /**\n * Whether the element is disabled\n */\n disabled?: boolean;\n\n /**\n * Whether the element is in a loading state (will also disable)\n */\n loading?: boolean;\n\n /**\n * Handler for pointer/touch activations (or all activations if onKeyboardActivate is not provided)\n */\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * Handler for keyboard + assistive tech virtual activation.\n * If omitted, onClick is used for all activations.\n */\n onKeyboardActivate?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * If true, this is a native <button> (or other native pressable) and we MUST NOT add Enter/Space handling.\n * Default: true\n */\n isNative?: boolean;\n\n /**\n * Only for non-native elements (div/span). Defaults to 'button'.\n */\n role?: string;\n\n /**\n * Only for non-native elements. Defaults to 0.\n */\n tabIndex?: number;\n\n /**\n * If true, calls e.stopPropagation() before invoking onClick handler.\n * Useful when element is nested inside another clickable element.\n * Default: false\n */\n stopPropagation?: boolean;\n\n /**\n * If true, calls e.preventDefault() before invoking onClick handler.\n * Note: For non-native elements, preventDefault is already called on Space/Enter keys.\n * Default: false\n */\n preventDefault?: boolean;\n\n /**\n * Toggle/pressed state. When true or false, sets aria-pressed on the element (e.g. selected color swatch).\n * Omit for non-toggle buttons.\n */\n pressed?: boolean;\n};\n\nexport type UseAccessiblePressReturn = {\n /**\n * Props to spread onto the element. Includes event handlers and ARIA attributes.\n * Does NOT include role/tabIndex — apply those separately.\n */\n pressProps: React.HTMLAttributes<HTMLElement> & {\n 'aria-disabled'?: 'true';\n 'aria-busy'?: 'true';\n 'aria-pressed'?: boolean;\n };\n\n /**\n * Combined disabled state (disabled || loading)\n */\n isDisabled: boolean;\n\n /**\n * Role for non-native elements (e.g., 'button', 'menuitem').\n * Only returned when isNative=false.\n */\n role?: string;\n\n /**\n * TabIndex for non-native elements.\n * Returns -1 when disabled, otherwise the provided tabIndex (default 0).\n * Only returned when isNative=false.\n */\n tabIndex?: number;\n};\n\nexport function useAccessiblePress({\n disabled = false,\n loading = false,\n onClick,\n onKeyboardActivate,\n isNative = true,\n role = 'button',\n tabIndex = 0,\n stopPropagation = false,\n preventDefault = false,\n pressed\n}: UseAccessiblePressOptions = {}): UseAccessiblePressReturn {\n const isDisabled = disabled || loading;\n const lastWasPointerRef = React.useRef(false);\n\n const markPointer = React.useCallback(() => {\n lastWasPointerRef.current = true;\n }, []);\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n if (isDisabled) return;\n\n // Handle event control flags\n if (stopPropagation) e.stopPropagation();\n if (preventDefault) e.preventDefault();\n\n const virtual = isVirtualClick(e.nativeEvent as any);\n const isPointer = lastWasPointerRef.current;\n lastWasPointerRef.current = false;\n\n const input: InputKind = virtual ? 'virtual' : isPointer ? 'pointer' : 'keyboard';\n\n // If we have a keyboard handler, route keyboard + virtual clicks there.\n if ((input === 'keyboard' || input === 'virtual') && onKeyboardActivate) {\n onKeyboardActivate(e);\n return;\n }\n\n onClick?.(e);\n },\n [isDisabled, onClick, onKeyboardActivate, stopPropagation, preventDefault]\n );\n\n // Only used for non-native elements: Enter/Space should trigger click(), reusing the same click routing.\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isDisabled) return;\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // Trigger native click event so all routing goes through handleClick\n (e.currentTarget as HTMLElement).click();\n }\n },\n [isDisabled]\n );\n\n const pressProps: UseAccessiblePressReturn['pressProps'] = {\n onPointerDown: markPointer,\n onMouseDown: markPointer,\n onTouchStart: markPointer,\n onClick: handleClick,\n 'aria-disabled': isDisabled ? 'true' : undefined,\n 'aria-busy': loading ? 'true' : undefined,\n 'aria-pressed': pressed\n };\n\n // For non-native elements, add Enter/Space handling\n if (!isNative) {\n pressProps.onKeyDown = handleKeyDown;\n }\n\n // Return role/tabIndex separately (only for non-native elements)\n const result: UseAccessiblePressReturn = { pressProps, isDisabled };\n\n if (!isNative) {\n result.role = role;\n result.tabIndex = isDisabled ? -1 : tabIndex;\n }\n\n return result;\n}\n\n"],"names":["React","isVirtualClick","useAccessiblePress","disabled","loading","onClick","onKeyboardActivate","isNative","role","tabIndex","stopPropagation","preventDefault","pressed","isDisabled","lastWasPointerRef","useRef","markPointer","useCallback","current","handleClick","e","virtual","nativeEvent","isPointer","input","handleKeyDown","key","currentTarget","click","pressProps","onPointerDown","onMouseDown","onTouchStart","undefined","onKeyDown","result"],"mappings":"AA4HO,YAAAA,OAAA;AAAA,SAAA,kBAAAC,SAAA;AAAA,SAASC,EAAmB;AAAA,EACjCC,UAAAA,IAAW;AAAA,EACXC,SAAAA,IAAU;AAAA,EACVC,SAAAA;AAAAA,EACAC,oBAAAA;AAAAA,EACAC,UAAAA,IAAW;AAAA,EACXC,MAAAA,IAAO;AAAA,EACPC,UAAAA,IAAW;AAAA,EACXC,iBAAAA,IAAkB;AAAA,EAClBC,gBAAAA,IAAiB;AAAA,EACjBC,SAAAA;AACyB,IAAI,IAA8B;AAC3D,QAAMC,IAAaV,KAAYC,GACzBU,IAAoBd,EAAMe,OAAO,EAAK,GAEtCC,IAAchB,EAAMiB,YAAY,MAAM;AAC1CH,IAAAA,EAAkBI,UAAU;AAAA,EAC9B,GAAG,CAAA,CAAE,GAECC,IAAcnB,EAAMiB,YACxB,CAACG,MAAqC;AACpC,QAAIP,EAAY;AAGhB,IAAIH,OAAmBA,gBAAAA,GACnBC,OAAkBA,eAAAA;AAEtB,UAAMU,IAAUpB,EAAemB,EAAEE,WAAkB,GAC7CC,IAAYT,EAAkBI;AACpCJ,IAAAA,EAAkBI,UAAU;AAE5B,UAAMM,IAAmBH,IAAU,YAAYE,IAAY,YAAY;AAGvE,SAAKC,MAAU,cAAcA,MAAU,cAAclB,GAAoB;AACvEA,MAAAA,EAAmBc,CAAC;AACpB;AAAA,IACF;AAEAf,IAAAA,IAAUe,CAAC;AAAA,EACb,GACA,CAACP,GAAYR,GAASC,GAAoBI,GAAiBC,CAAc,CAC3E,GAGMc,IAAgBzB,EAAMiB,YAC1B,CAACG,MAAwC;AACvC,IAAIP,MAEAO,EAAEM,QAAQ,WAAWN,EAAEM,QAAQ,SACjCN,EAAET,eAAAA,GAEDS,EAAEO,cAA8BC,MAAAA;AAAAA,EAErC,GACA,CAACf,CAAU,CACb,GAEMgB,IAAqD;AAAA,IACzDC,eAAed;AAAAA,IACfe,aAAaf;AAAAA,IACbgB,cAAchB;AAAAA,IACdX,SAASc;AAAAA,IACT,iBAAiBN,IAAa,SAASoB;AAAAA,IACvC,aAAa7B,IAAU,SAAS6B;AAAAA,IAChC,gBAAgBrB;AAAAA,EAAAA;AAIlB,EAAKL,MACHsB,EAAWK,YAAYT;AAIzB,QAAMU,IAAmC;AAAA,IAAEN,YAAAA;AAAAA,IAAYhB,YAAAA;AAAAA,EAAAA;AAEvD,SAAKN,MACH4B,EAAO3B,OAAOA,GACd2B,EAAO1B,WAAWI,IAAa,KAAKJ,IAG/B0B;AACT;"}
1
+ {"version":3,"file":"index67.js","sources":["../src/utils/a11y/useAccessiblePress.ts"],"sourcesContent":["import * as React from 'react';\nimport { isVirtualClick } from '../virtualClick';\n\n/**\n * Hook for accessible press interactions (pointer vs keyboard vs virtual click).\n *\n * Handles:\n * - Pointer intent tracking (mouse/touch)\n * - Virtual click detection (NVDA browse mode, etc.)\n * - Routing to appropriate handler (onClick vs onKeyboardActivate)\n * - For non-native elements: Enter/Space → activation\n * - Optional stopPropagation and preventDefault\n *\n * @example\n * // Native button (isNative=true, the default)\n * const { pressProps } = useAccessiblePress({ onClick, disabled });\n * <button {...pressProps}>Click me</button>\n *\n * @example\n * // Non-native element (div acting as button)\n * const { pressProps, role, tabIndex } = useAccessiblePress({ onClick, isNative: false });\n * <div role={role} tabIndex={tabIndex} {...pressProps}>Click me</div>\n *\n * @example\n * // Element nested inside clickable parent (prevent event bubbling)\n * const { pressProps, tabIndex } = useAccessiblePress({ \n * onClick, \n * isNative: false, \n * stopPropagation: true \n * });\n * <div role=\"button\" tabIndex={tabIndex} {...pressProps}>Click me</div>\n */\n\ntype InputKind = 'pointer' | 'keyboard' | 'virtual';\n\nexport type UseAccessiblePressOptions = {\n /**\n * Whether the element is disabled\n */\n disabled?: boolean;\n\n /**\n * Whether the element is in a loading state (will also disable)\n */\n loading?: boolean;\n\n /**\n * Handler for pointer/touch activations (or all activations if onKeyboardActivate is not provided)\n */\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * Handler for keyboard + assistive tech virtual activation.\n * If omitted, onClick is used for all activations.\n */\n onKeyboardActivate?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /**\n * If true, this is a native <button> (or other native pressable) and we MUST NOT add Enter/Space handling.\n * Default: true\n */\n isNative?: boolean;\n\n /**\n * Only for non-native elements (div/span). Defaults to 'button'.\n */\n role?: string;\n\n /**\n * Only for non-native elements. Defaults to 0.\n */\n tabIndex?: number;\n\n /**\n * If true, calls e.stopPropagation() before invoking onClick handler.\n * Useful when element is nested inside another clickable element.\n * Default: false\n */\n stopPropagation?: boolean;\n\n /**\n * If true, calls e.preventDefault() before invoking onClick handler.\n * Note: For non-native elements, preventDefault is already called on Space/Enter keys.\n * Default: false\n */\n preventDefault?: boolean;\n\n /**\n * Toggle/pressed state. When true or false, sets aria-pressed on the element (e.g. selected color swatch).\n * Omit for non-toggle buttons.\n */\n pressed?: boolean;\n\n /**\n * User-provided pointer/mouse/touch handlers. When provided, they are chained\n * after the internal pointer-intent tracking handler (markPointer), so both run.\n */\n onPointerDown?: (e: React.PointerEvent<HTMLElement>) => void;\n onMouseDown?: (e: React.MouseEvent<HTMLElement>) => void;\n onTouchStart?: (e: React.TouchEvent<HTMLElement>) => void;\n};\n\nexport type UseAccessiblePressReturn = {\n /**\n * Props to spread onto the element. Includes event handlers and ARIA attributes.\n * Does NOT include role/tabIndex — apply those separately.\n */\n pressProps: React.HTMLAttributes<HTMLElement> & {\n 'aria-disabled'?: 'true';\n 'aria-busy'?: 'true';\n 'aria-pressed'?: boolean;\n };\n\n /**\n * Combined disabled state (disabled || loading)\n */\n isDisabled: boolean;\n\n /**\n * Role for non-native elements (e.g., 'button', 'menuitem').\n * Only returned when isNative=false.\n */\n role?: string;\n\n /**\n * TabIndex for non-native elements.\n * Returns -1 when disabled, otherwise the provided tabIndex (default 0).\n * Only returned when isNative=false.\n */\n tabIndex?: number;\n};\n\nexport function useAccessiblePress({\n disabled = false,\n loading = false,\n onClick,\n onKeyboardActivate,\n isNative = true,\n role = 'button',\n tabIndex = 0,\n stopPropagation = false,\n preventDefault = false,\n pressed,\n onPointerDown,\n onMouseDown,\n onTouchStart\n}: UseAccessiblePressOptions = {}): UseAccessiblePressReturn {\n const isDisabled = disabled || loading;\n const lastWasPointerRef = React.useRef(false);\n\n const markPointer = React.useCallback(() => {\n lastWasPointerRef.current = true;\n }, []);\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n if (isDisabled) return;\n\n // Handle event control flags\n if (stopPropagation) e.stopPropagation();\n if (preventDefault) e.preventDefault();\n\n const virtual = isVirtualClick(e.nativeEvent as any);\n const isPointer = lastWasPointerRef.current;\n lastWasPointerRef.current = false;\n\n const input: InputKind = virtual ? 'virtual' : isPointer ? 'pointer' : 'keyboard';\n\n // If we have a keyboard handler, route keyboard + virtual clicks there.\n if ((input === 'keyboard' || input === 'virtual') && onKeyboardActivate) {\n onKeyboardActivate(e);\n return;\n }\n\n onClick?.(e);\n },\n [isDisabled, onClick, onKeyboardActivate, stopPropagation, preventDefault]\n );\n\n // Only used for non-native elements: Enter/Space should trigger click(), reusing the same click routing.\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (isDisabled) return;\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // Trigger native click event so all routing goes through handleClick\n (e.currentTarget as HTMLElement).click();\n }\n },\n [isDisabled]\n );\n\n const pressProps: UseAccessiblePressReturn['pressProps'] = {\n onPointerDown: onPointerDown\n ? (e: React.PointerEvent<HTMLElement>) => { markPointer(); onPointerDown(e); }\n : markPointer,\n onMouseDown: onMouseDown\n ? (e: React.MouseEvent<HTMLElement>) => { markPointer(); onMouseDown(e); }\n : markPointer,\n onTouchStart: onTouchStart\n ? (e: React.TouchEvent<HTMLElement>) => { markPointer(); onTouchStart(e); }\n : markPointer,\n onClick: handleClick,\n 'aria-disabled': isDisabled ? 'true' : undefined,\n 'aria-busy': loading ? 'true' : undefined,\n 'aria-pressed': pressed\n };\n\n // For non-native elements, add Enter/Space handling\n if (!isNative) {\n pressProps.onKeyDown = handleKeyDown;\n }\n\n // Return role/tabIndex separately (only for non-native elements)\n const result: UseAccessiblePressReturn = { pressProps, isDisabled };\n\n if (!isNative) {\n result.role = role;\n result.tabIndex = isDisabled ? -1 : tabIndex;\n }\n\n return result;\n}\n\n"],"names":["React","isVirtualClick","useAccessiblePress","disabled","loading","onClick","onKeyboardActivate","isNative","role","tabIndex","stopPropagation","preventDefault","pressed","onPointerDown","onMouseDown","onTouchStart","isDisabled","lastWasPointerRef","useRef","markPointer","useCallback","current","handleClick","e","virtual","nativeEvent","isPointer","input","handleKeyDown","key","currentTarget","click","pressProps","undefined","onKeyDown","result"],"mappings":"AAoIO,YAAAA,OAAA;AAAA,SAAA,kBAAAC,SAAA;AAAA,SAASC,EAAmB;AAAA,EACjCC,UAAAA,IAAW;AAAA,EACXC,SAAAA,IAAU;AAAA,EACVC,SAAAA;AAAAA,EACAC,oBAAAA;AAAAA,EACAC,UAAAA,IAAW;AAAA,EACXC,MAAAA,IAAO;AAAA,EACPC,UAAAA,IAAW;AAAA,EACXC,iBAAAA,IAAkB;AAAA,EAClBC,gBAAAA,IAAiB;AAAA,EACjBC,SAAAA;AAAAA,EACAC,eAAAA;AAAAA,EACAC,aAAAA;AAAAA,EACAC,cAAAA;AACyB,IAAI,IAA8B;AAC3D,QAAMC,IAAab,KAAYC,GACzBa,IAAoBjB,EAAMkB,OAAO,EAAK,GAEtCC,IAAcnB,EAAMoB,YAAY,MAAM;AAC1CH,IAAAA,EAAkBI,UAAU;AAAA,EAC9B,GAAG,CAAA,CAAE,GAECC,IAActB,EAAMoB,YACxB,CAACG,MAAqC;AACpC,QAAIP,EAAY;AAGhB,IAAIN,OAAmBA,gBAAAA,GACnBC,OAAkBA,eAAAA;AAEtB,UAAMa,IAAUvB,EAAesB,EAAEE,WAAkB,GAC7CC,IAAYT,EAAkBI;AACpCJ,IAAAA,EAAkBI,UAAU;AAE5B,UAAMM,IAAmBH,IAAU,YAAYE,IAAY,YAAY;AAGvE,SAAKC,MAAU,cAAcA,MAAU,cAAcrB,GAAoB;AACvEA,MAAAA,EAAmBiB,CAAC;AACpB;AAAA,IACF;AAEAlB,IAAAA,IAAUkB,CAAC;AAAA,EACb,GACA,CAACP,GAAYX,GAASC,GAAoBI,GAAiBC,CAAc,CAC3E,GAGMiB,IAAgB5B,EAAMoB,YAC1B,CAACG,MAAwC;AACvC,IAAIP,MAEAO,EAAEM,QAAQ,WAAWN,EAAEM,QAAQ,SACjCN,EAAEZ,eAAAA,GAEDY,EAAEO,cAA8BC,MAAAA;AAAAA,EAErC,GACA,CAACf,CAAU,CACb,GAEMgB,IAAqD;AAAA,IACzDnB,eAAeA,IACX,CAACU,MAAuC;AAAEJ,MAAAA,EAAAA,GAAeN,EAAcU,CAAC;AAAA,IAAG,IAC3EJ;AAAAA,IACJL,aAAaA,IACT,CAACS,MAAqC;AAAEJ,MAAAA,EAAAA,GAAeL,EAAYS,CAAC;AAAA,IAAG,IACvEJ;AAAAA,IACJJ,cAAcA,IACV,CAACQ,MAAqC;AAAEJ,MAAAA,EAAAA,GAAeJ,EAAaQ,CAAC;AAAA,IAAG,IACxEJ;AAAAA,IACJd,SAASiB;AAAAA,IACT,iBAAiBN,IAAa,SAASiB;AAAAA,IACvC,aAAa7B,IAAU,SAAS6B;AAAAA,IAChC,gBAAgBrB;AAAAA,EAAAA;AAIlB,EAAKL,MACHyB,EAAWE,YAAYN;AAIzB,QAAMO,IAAmC;AAAA,IAAEH,YAAAA;AAAAA,IAAYhB,YAAAA;AAAAA,EAAAA;AAEvD,SAAKT,MACH4B,EAAO3B,OAAOA,GACd2B,EAAO1B,WAAWO,IAAa,KAAKP,IAG/B0B;AACT;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "se-design",
3
- "version": "1.0.84-dev.0",
3
+ "version": "1.0.85-dev.1",
4
4
  "type": "module",
5
5
  "module": "dist/index.js",
6
6
  "exports": {