@sellmate/design-system 0.0.39 → 0.0.40

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.
@@ -0,0 +1 @@
1
+ {"version":3,"names":["registerInstance","createEvent","getElement","h","Host","Fragment","BaseDropdownEvent","SelectKeyboardNavigation","sdSelectMultipleGroupCss","SdSelectMultipleGroup","constructor","hostRef","super","this","sdChange","dropDownShow","el","value","label","options","placeholder","optionPlaceholder","width","dropdownHeight","disabled","clearable","searchable","useCheckbox","useAll","allCheckedLabel","allCheckOptionLabel","containerStyle","triggerStyle","dropdownStyle","optionStyle","labelStyle","optionRenderer","filteredOptions","isOpen","searchText","itemIndex","isScrolled","selectRef","searchRef","optionRef","dropdownRef","valueChanged","emit","optionsChanged","filterOptions","searchTextChanged","itemIndexChanged","newIndex","oldIndex","searchInput","getNativeInputElement","focus","matches","blur","optionElements","Array","from","querySelectorAll","currentItem","isOptionDisabled","isDisabled","scrollToOption","isOpenChanged","onDropdownToggle","selectedOption","getSelectedOption","indexOf","Promise","resolve","setTimeout","componentWillLoad","initializeEvent","disconnectedCallback","cleanupEvent","handleDocumentClick","event","contains","target","handleDocumentKeydown","keyboardEvent","stopPropagation","targetKey","includes","key","preventDefault","keyboardNavigation","nextIndex","getNextIndex","handleOptionSelection","handleTriggerClick","handleAllOptionClick","detail","isSelected","filterDisabledOptions","filter","opt","type","selected","some","valueSet","Set","handleOptionClick","option","handleGroupOptionClick","handleSubGroupOptionClick","childOptions","parent","forEach","subgroup","child","newSelections","trim","searchTerm","toLowerCase","matchedOptions","add","addParentGroups","has","matchedSet","parentOption","find","handleDropdownScroll","scrollTop","getNativeElement","isAlreadySelected","getAllItemsUnderOption","includeDisabled","filterChildrenWithParent","allItems","subgroupOptions","itemsUnderSubgroup","push","directItems","isAllChildrenSelected","groupOption","length","selectedItems","item","getChildrenOptions","selectedCount","val","totalCount","isAllOptionsSelected","selectableItems","selectedValues","map","v","every","getTriggerLabel","isAllChecked","join","closeDropdown","optionElement","dropdown","optionTop","offsetTop","optionHeight","offsetHeight","dropdownScrollTop","clientHeight","searchContainer","querySelector","searchOffset","visibleTop","visibleBottom","render","style","class","ref","renderLabel","renderTrigger","renderDropdown","tabindex","onClick","name","size","color","open","parentRef","onSdClose","onScroll","inputStyle","autofocus","onSdInput","String","onSdFocus","onKeyDown","e","code","slot","index","isFocused","onOptionClick","useIndicator","countInfo","watchers"],"sources":["0"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"sd-select-multiple-group.entry.esm.js","sources":["src/components/sd-select-multiple-group/sd-select-multiple-group.scss?tag=sd-select-multiple-group","src/components/sd-select-multiple-group/sd-select-multiple-group.tsx"],"sourcesContent":["@import 'variables';\n@import 'extend';\n\nsd-select-multiple-group {\n display: inline-block;\n height: fit-content;\n .sd-select-multiple-group {\n display: flex;\n flex-wrap: nowrap;\n width: var(--select-width, 200px);\n cursor: pointer;\n user-select: none;\n border: 1px solid $grey_55;\n border-radius: 4px;\n background-color: white;\n color: $grey_90;\n\n &:hover:not(.sd-select-multiple-group--disabled) {\n background: $grey_10;\n }\n\n &.sd-select-multiple-group--disabled {\n cursor: not-allowed;\n background-color: $grey_20;\n border-color: $grey_45;\n\n .sd-select-multiple-group__label {\n border-right: 1px solid $grey_45;\n }\n\n .sd-select-multiple-group__trigger {\n color: $grey_65;\n &:focus,\n &:focus-visible,\n &:focus-within {\n outline: none !important;\n }\n }\n }\n\n &__label {\n font-size: 12px;\n font-weight: 500;\n color: $grey_90;\n padding: 4px 12px;\n border-right: 1px solid $grey_45;\n border-radius: 4px 0 0 4px;\n background-color: $grey_10;\n }\n\n &__container {\n position: relative;\n width: 100%;\n display: flex;\n\n .sd-select-multiple-group__trigger {\n padding: 4px 20px 4px 12px;\n display: flex;\n width: 100%;\n align-items: center;\n\n .sd-select-multiple-group__value {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: 20px;\n font-size: 12px;\n font-weight: 400;\n }\n\n .sd-select-multiple-group__clear {\n margin: 0 4px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n outline: none;\n border: none;\n }\n }\n\n .sd-select-multiple-group__arrow {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 12px;\n height: 12px;\n color: $grey_65;\n transition: transform 0.3s ease;\n\n &--open {\n transform: rotate(180deg);\n }\n }\n }\n }\n}\n\n.sd-select-multiple-group__dropdown {\n @extend %scrollBar;\n width: var(--select-width, 200px);\n max-height: var(--select-dropdown-height, 260px);\n padding-bottom: 2px;\n background-color: white;\n box-shadow: 2px 2px 12px 2px rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n overflow-y: auto;\n color: $grey_90;\n\n .sd-select-multiple-group__search-container {\n position: sticky;\n top: 0;\n display: flex;\n width: 100%;\n background-color: white;\n align-items: center;\n padding: 4px 8px;\n\n sd-input {\n width: 100%;\n }\n\n &--scrolled {\n box-shadow: 2px 2px 8px 2px rgba(0, 0, 0, 0.2);\n }\n }\n\n .sd-select-multiple-group__option-placeholder {\n padding: 4px 12px;\n font-size: 12px;\n line-height: 20px;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Fragment,\n Host,\n Prop,\n State,\n Watch,\n h,\n} from '@stencil/core';\nimport { BaseDropdownEvent } from '../../utils/base-dropdown-event';\nimport { SelectMultipleEvents, SelectOption, SelectStyleProps } from '../sd-select/sd-select';\nimport { SelectKeyboardNavigation } from '../../utils/select-keyboard-navigation';\n\nexport interface SelectOptionGroup extends SelectOption {\n type: 'group' | 'subgroup' | 'item' | 'all';\n parent?: string;\n}\n\n@Component({\n tag: 'sd-select-multiple-group',\n styleUrl: 'sd-select-multiple-group.scss',\n})\nexport class SdSelectMultipleGroup extends BaseDropdownEvent {\n @Element() el!: HTMLElement;\n\n // props\n @Prop({ mutable: true }) value: SelectOptionGroup[] | null = null;\n @Prop() label: string = '';\n @Prop({ mutable: true }) options: SelectOptionGroup[] = [];\n @Prop() placeholder: string = '선택';\n @Prop() optionPlaceholder: string = '옵션이 없습니다.';\n @Prop() width: string = '200px';\n @Prop() dropdownHeight: string = '260px';\n @Prop() disabled: boolean = false;\n @Prop() clearable: boolean = false;\n @Prop() searchable: boolean = false;\n @Prop() useCheckbox: boolean = false;\n @Prop() useAll: boolean = false;\n @Prop() allCheckedLabel = '전체';\n @Prop() allCheckOptionLabel = '전체';\n\n // props - custom styles\n @Prop() containerStyle: SelectStyleProps['containerStyle'] = {};\n @Prop() triggerStyle: SelectStyleProps['triggerStyle'] = {};\n @Prop() dropdownStyle: SelectStyleProps['dropdownStyle'] = {};\n @Prop() optionStyle: SelectStyleProps['optionStyle'] = {};\n @Prop() labelStyle: SelectStyleProps['labelStyle'] = {};\n\n // props - custom slots\n @Prop() optionRenderer?: (option: SelectOption, index: number, isSelected: boolean) => any;\n\n // states\n @State() filteredOptions = this.options;\n @State() isOpen: boolean = false;\n @State() searchText: string | null = null;\n @State() itemIndex: number = -1;\n @State() isScrolled: boolean = false;\n\n // events\n @Event() sdChange?: EventEmitter<SelectMultipleEvents['sdChange']>;\n @Event() dropDownShow?: EventEmitter<SelectMultipleEvents['dropDownShow']>;\n\n private selectRef?: HTMLElement;\n private searchRef?: HTMLSdInputElement;\n private optionRef?: HTMLSdSelectOptionGroupElement;\n private dropdownRef?: HTMLElement;\n\n @Watch('value')\n valueChanged() {\n this.sdChange?.emit(this.value);\n }\n\n @Watch('options')\n optionsChanged() {\n this.filteredOptions = this.options;\n this.filterOptions();\n }\n\n @Watch('searchText')\n searchTextChanged() {\n this.filterOptions();\n }\n\n @Watch('itemIndex')\n async itemIndexChanged(newIndex: number, oldIndex: number) {\n if (this.searchable) {\n const searchInput = await this.getNativeInputElement();\n if (this.itemIndex === -1) {\n searchInput?.focus();\n return;\n } else if (searchInput?.matches(':focus')) {\n searchInput?.blur();\n }\n }\n\n const optionElements = Array.from(\n this.dropdownRef?.querySelectorAll(\n '.sd-select-multiple-group__dropdown sd-select-option-group',\n ) || [],\n );\n const currentItem = optionElements?.[this.itemIndex];\n\n if (!currentItem || !this.isOpen) return;\n\n this.optionRef = currentItem as HTMLSdSelectOptionGroupElement;\n const isOptionDisabled = await this.optionRef.isDisabled();\n\n if (isOptionDisabled) {\n newIndex > oldIndex ? this.itemIndex++ : this.itemIndex--;\n return;\n }\n\n this.scrollToOption(currentItem as HTMLElement);\n }\n\n @Watch('isOpen')\n async isOpenChanged() {\n // Base class의 이벤트 관리 호출 - 다른 select와의 이벤트 충돌 방지\n this.onDropdownToggle(this.isOpen);\n\n const selectedOption = this.getSelectedOption();\n if (!selectedOption) {\n this.itemIndex = -1;\n } else {\n this.itemIndex = this.options.indexOf(selectedOption[0]);\n }\n\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n\n if (this.isOpen === false) return;\n\n await new Promise(resolve => setTimeout(resolve, 10));\n\n const optionElements = Array.from(\n this.dropdownRef?.querySelectorAll('.sd-select-multiple__dropdown sd-select-item') || [],\n );\n const currentItem = optionElements?.[this.itemIndex];\n\n // 드롭다운이 열릴 때 검색 입력에 포커스\n if (this.searchable) {\n const searchInput = await this.getNativeInputElement();\n searchInput?.focus();\n }\n\n if (!currentItem) return;\n\n await new Promise(resolve => setTimeout(resolve, 10)); // 추가 딜레이\n this.scrollToOption(currentItem as HTMLElement);\n }\n\n componentWillLoad() {\n // props가 모두 설정된 후에 실행되므로 올바른 options 값을 가져올 수 있음\n this.filteredOptions = this.options;\n this.initializeEvent(); // global dropdown Manager에 등록 + 이벤트 핸들러 초기화\n }\n\n disconnectedCallback() {\n this.cleanupEvent(); // global dropdown Manager에서 제거 + 이벤트 정리\n }\n\n protected handleDocumentClick(event: Event): void {\n if (!this.selectRef?.contains(event.target as Node)) {\n this.isOpen = false;\n }\n }\n\n protected handleDocumentKeydown(keyboardEvent: KeyboardEvent): void {\n keyboardEvent.stopPropagation();\n const targetKey = ['ArrowDown', 'ArrowUp', 'Enter', 'Escape'];\n if (!targetKey.includes(keyboardEvent.key)) return;\n\n keyboardEvent.preventDefault();\n switch (keyboardEvent.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n const keyboardNavigation = new SelectKeyboardNavigation(this.searchable, this.filteredOptions);\n const nextIndex = keyboardNavigation.getNextIndex(this.itemIndex, keyboardEvent.key);\n this.itemIndex = nextIndex;\n break;\n case 'Enter':\n const selectedOption = this.filteredOptions[this.itemIndex];\n if (selectedOption && !selectedOption.disabled) {\n this.handleOptionSelection(selectedOption);\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n // event handlers\n handleTriggerClick = (event: Event) => {\n event.stopPropagation();\n\n if (!this.disabled) {\n this.isOpen = !this.isOpen;\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n }\n };\n\n handleAllOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n }) => {\n if (detail.isSelected) {\n // 이미 선택된 옵션인 경우, 선택 해제\n this.value = [];\n } else {\n // 새로운 옵션 선택\n this.value = [...this.filteredOptions.filter(opt => opt.type === 'item' && !opt.disabled)];\n }\n };\n\n handleOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n }) => {\n const { option, event } = detail;\n event.stopPropagation();\n\n if (option.type === 'group') this.handleGroupOptionClick(detail);\n if (option.type === 'subgroup') this.handleSubGroupOptionClick(detail);\n if (option.type === 'item') this.handleOptionSelection(option);\n };\n\n handleGroupOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n }) => {\n const { option, isSelected } = detail;\n const childOptions = this.filteredOptions.filter(\n opt => opt.parent === option.value && !opt.disabled,\n );\n\n childOptions.forEach(subgroup => {\n this.handleSubGroupOptionClick({\n option: subgroup,\n isSelected: isSelected || isSelected === null,\n });\n });\n };\n\n handleSubGroupOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n }) => {\n const { option, isSelected } = detail;\n\n const childOptions = this.filteredOptions.filter(\n opt => opt.parent === option.value && !opt.disabled,\n );\n\n if (isSelected || isSelected === null) {\n // 모든 자식 옵션이 선택된 경우, 모두 선택 해제\n this.value =\n this.value?.filter(selected => !childOptions.some(child => child.value === selected.value)) ||\n null;\n } else {\n // 일부 또는 전체 자식 옵션이 선택되지 않은 경우, 모두 선택\n const newSelections = childOptions.filter(\n child => !this.value?.some(selected => selected.value === child.value),\n );\n this.value = [...(this.value || []), ...newSelections];\n }\n };\n\n private filterOptions() {\n if (!this.searchText || this.searchText.trim() === '') {\n // 검색어가 없으면 전체 옵션 표시\n this.filteredOptions = this.options;\n return;\n }\n\n const searchTerm = this.searchText.toLowerCase();\n const matchedOptions = new Set<SelectOptionGroup>();\n\n // 1. 직접 매칭되는 옵션들 찾기\n this.options.forEach(option => {\n if (option.label.toLowerCase().includes(searchTerm)) {\n matchedOptions.add(option);\n\n // 매칭된 옵션의 상위 그룹들도 포함\n this.addParentGroups(option, matchedOptions);\n }\n });\n\n // 2. Set을 배열로 변환하고 원본 순서 유지\n this.filteredOptions = this.options.filter(option => matchedOptions.has(option));\n }\n\n private addParentGroups(option: SelectOptionGroup, matchedSet: Set<SelectOptionGroup>) {\n if (!option.parent) return;\n\n const parentOption = this.options.find(opt => opt.value === option.parent);\n if (parentOption && !matchedSet.has(parentOption)) {\n matchedSet.add(parentOption);\n // 재귀적으로 상위 그룹들도 추가\n this.addParentGroups(parentOption, matchedSet);\n }\n }\n\n private getSelectedOption(): SelectOptionGroup[] {\n return this.options.filter(option => this.value?.includes(option));\n }\n\n private handleDropdownScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n const scrollTop = target.scrollTop;\n\n // 스크롤이 조금이라도 되면 그림자 표시\n this.isScrolled = scrollTop > 0;\n };\n\n private async getNativeInputElement(): Promise<HTMLInputElement | null> {\n if (this.searchRef) {\n return this.searchRef.getNativeElement();\n }\n return null;\n }\n\n private handleOptionSelection = (option: SelectOptionGroup) => {\n if (!option || option.disabled) return;\n\n const isAlreadySelected = this.value?.some(opt => opt.value === option.value);\n if (isAlreadySelected) {\n // 이미 선택된 옵션인 경우, 선택 해제\n this.value = this.value?.filter(opt => opt.value !== option.value) || null;\n } else {\n // 새로운 옵션 선택\n this.value = [...(this.value || []), option];\n }\n };\n\n private getAllItemsUnderOption(parentOption: SelectOptionGroup): SelectOptionGroup[] {\n const childOptions = this.filteredOptions.filter(\n option => option.parent === parentOption.value && !option.disabled,\n );\n\n if (parentOption.type === 'group') {\n // Group - 모든 하위 item들을 수집\n const subgroupOptions = childOptions.filter(option => option.type === 'subgroup');\n const allItemsUnderGroup: SelectOptionGroup[] = [];\n\n // subgroup 하위의 모든 item\n subgroupOptions.forEach(subgroup => {\n const itemsUnderSubgroup = this.filteredOptions.filter(\n option => option.parent === subgroup.value && option.type === 'item' && !option.disabled,\n );\n allItemsUnderGroup.push(...itemsUnderSubgroup);\n });\n\n // Group 바로 하위 item\n const directItems = childOptions.filter(option => option.type === 'item');\n allItemsUnderGroup.push(...directItems);\n\n return allItemsUnderGroup;\n }\n\n return childOptions.filter(option => option.type === 'item');\n }\n\n private isAllChildrenSelected(groupOption: SelectOptionGroup): boolean | null {\n const allItems = this.getAllItemsUnderOption(groupOption);\n\n if (allItems.length === 0) return false;\n\n const selectedItems = allItems.filter(item =>\n this.value?.some(selected => selected.value === item.value),\n );\n\n if (selectedItems.length === allItems.length) return true;\n if (selectedItems.length > 0) return null;\n return false;\n }\n\n private getChildrenOptions(parentOption: SelectOptionGroup) {\n if (parentOption.type === 'group') {\n const allItems = this.getAllItemsUnderOption(parentOption);\n const selectedItems = allItems.filter(item =>\n this.value?.some(selected => selected.value === item.value),\n );\n\n return {\n selectedCount: selectedItems.length,\n totalCount: allItems.length,\n };\n }\n\n // Subgroup의 경우\n const children = this.filteredOptions.filter(option => option.parent === parentOption.value);\n return {\n selectedCount: children.filter(child => this.value?.some(val => val.value === child.value))\n .length,\n totalCount: children.length,\n };\n }\n\n private isAllOptionsSelected() {\n const selectedOption = this.getSelectedOption();\n return (\n selectedOption.length === this.options.filter(opt => !opt.disabled && opt.type === 'item').length\n );\n }\n\n private getTriggerLabel() {\n const selectedOption = this.getSelectedOption();\n if (!selectedOption) return '선택';\n\n if (selectedOption.length === 0) return this.placeholder;\n\n const isAllChecked = this.isAllOptionsSelected();\n\n return isAllChecked\n ? this.allCheckedLabel\n : selectedOption.map(option => option.label).join(', ');\n }\n\n closeDropdown() {\n this.isOpen = false;\n }\n\n private scrollToOption(optionElement: HTMLElement) {\n if (!this.dropdownRef || !optionElement) return;\n\n const dropdown = this.dropdownRef;\n const optionTop = optionElement.offsetTop;\n const optionHeight = optionElement.offsetHeight;\n const dropdownScrollTop = dropdown.scrollTop;\n const dropdownHeight = dropdown.clientHeight;\n\n const searchContainer = dropdown.querySelector('.sd-select__search-container');\n const searchOffset = searchContainer ? (searchContainer as HTMLElement).offsetHeight : 0;\n\n const visibleTop = dropdownScrollTop + searchOffset;\n const visibleBottom = dropdownScrollTop + dropdownHeight;\n\n if (optionTop < visibleTop) {\n dropdown.scrollTop = optionTop - searchOffset;\n } else if (optionTop + optionHeight > visibleBottom) {\n dropdown.scrollTop = optionTop + optionHeight - dropdownHeight + searchOffset;\n }\n }\n\n render() {\n const style = {\n '--select-width': this.width || '200px',\n '--select-dropdown-height': this.dropdownHeight || '260px',\n };\n\n return (\n <Host style={style}>\n <div\n class={{\n 'sd-select-multiple-group': true,\n 'sd-select-multiple-group--open': this.isOpen,\n 'sd-select-multiple-group--disabled': this.disabled,\n }}\n style={this.containerStyle}\n ref={el => (this.selectRef = el)}\n >\n {this.renderLabel(this.label, this.labelStyle)}\n <div class=\"sd-select-multiple-group__container\">\n {this.renderTrigger()}\n {this.renderDropdown()}\n </div>\n </div>\n </Host>\n );\n }\n\n private renderLabel(label?: string, labelStyle?: { [key: string]: string }) {\n if (!label) return null;\n\n return (\n <label class=\"sd-select-multiple-group__label\" style={labelStyle}>\n {label}\n </label>\n );\n }\n\n private renderTrigger() {\n const selectedOption = this.getSelectedOption();\n return (\n <div\n class=\"sd-select-multiple-group__trigger\"\n tabindex={this.disabled ? -1 : 0}\n onClick={this.handleTriggerClick}\n style={this.triggerStyle}\n >\n <span class=\"sd-select-multiple-group__value\">{this.getTriggerLabel()}</span>\n {this.clearable && selectedOption?.length > 0 && !this.disabled && (\n <sd-icon\n key=\"close-icon\"\n name=\"close\"\n size={10}\n color=\"#888\"\n class=\"sd-select-multiple-group__clear\"\n onClick={event => {\n event.stopPropagation();\n this.value = null;\n }}\n ></sd-icon>\n )}\n\n <sd-icon\n key=\"arrow-icon\"\n name=\"arrowDown\"\n color=\"#888\"\n class={{\n 'sd-select-multiple-group__arrow': true,\n 'sd-select-multiple-group__arrow--open': this.isOpen,\n }}\n ></sd-icon>\n </div>\n );\n }\n\n private renderDropdown() {\n const style = {\n '--select-width': this.width || '200px',\n '--select-dropdown-height': this.dropdownHeight || '260px',\n };\n\n if (this.isOpen === false) return null;\n\n return (\n <sd-portal open={this.isOpen} parentRef={this.selectRef} onSdClose={this.closeDropdown}>\n <div\n class=\"sd-select-multiple-group__dropdown\"\n style={{ ...style, ...this.dropdownStyle }}\n onScroll={this.handleDropdownScroll}\n ref={el => (this.dropdownRef = el)}\n >\n {this.searchable && (\n <div\n class={{\n 'sd-select-multiple-group__search-container': true,\n 'sd-select-multiple-group__search-container--scrolled': this.isScrolled,\n }}\n onClick={event => event.stopPropagation()}\n >\n <sd-input\n ref={el => (this.searchRef = el)}\n value={this.searchText}\n placeholder=\"검색\"\n clearable\n inputStyle={{ 'padding-left': '8px' }}\n autofocus\n onSdInput={event => {\n this.searchText = String(event?.detail);\n }}\n onSdFocus={() => {\n this.itemIndex = -1;\n }}\n onKeyDown={e => {\n if (e.code === 'Enter') e.stopPropagation();\n }}\n >\n <sd-icon name=\"search\" size={16} color=\"#737373\" slot=\"prefix\"></sd-icon>\n </sd-input>\n </div>\n )}\n\n {this.filteredOptions.length > 0 ? (\n <Fragment>\n {this.useAll && (\n <sd-select-option-group\n option={{ label: this.allCheckOptionLabel, value: '', type: 'all' }}\n index={0}\n isSelected={\n this.value?.length ===\n this.options.filter(opt => !opt.disabled && opt.type === 'item').length\n }\n isFocused={this.itemIndex === 0}\n optionStyle={this.optionStyle}\n onOptionClick={({\n detail,\n }: {\n detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n };\n }) => this.handleAllOptionClick(detail)}\n useCheckbox={this.useCheckbox}\n useIndicator={false}\n ></sd-select-option-group>\n )}\n {this.filteredOptions.map((option, index) => (\n <slot name={`option-${option.value}`}>\n <sd-select-option-group\n option={option}\n index={index}\n isSelected={\n option.type === 'item'\n ? this.value?.some(selected => selected.value === option.value)\n : this.isAllChildrenSelected(option)\n }\n isFocused={index === this.itemIndex}\n optionStyle={this.optionStyle}\n onOptionClick={({\n detail,\n }: {\n detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n };\n }) => {\n if (option.type !== 'item' && !this.useCheckbox) {\n return;\n }\n\n this.handleOptionClick(detail);\n }}\n useCheckbox={this.useCheckbox}\n {...(option.type !== 'item' && { countInfo: this.getChildrenOptions(option) })}\n ></sd-select-option-group>\n </slot>\n ))}\n </Fragment>\n ) : (\n <slot name=\"option-placeholder\">\n <div class={'sd-select-multiple-group__option-placeholder'} style={this.optionStyle}>\n {this.optionPlaceholder}\n </div>\n </slot>\n )}\n </div>\n </sd-portal>\n );\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-select-multiple-group.entry.esm.js","sources":["src/components/sd-select-multiple-group/sd-select-multiple-group.scss?tag=sd-select-multiple-group","src/components/sd-select-multiple-group/sd-select-multiple-group.tsx"],"sourcesContent":["@import 'variables';\n@import 'extend';\n\nsd-select-multiple-group {\n display: inline-block;\n height: fit-content;\n .sd-select-multiple-group {\n display: flex;\n flex-wrap: nowrap;\n width: var(--select-width, 200px);\n cursor: pointer;\n user-select: none;\n border: 1px solid $grey_55;\n border-radius: 4px;\n background-color: white;\n color: $grey_90;\n\n &:hover:not(.sd-select-multiple-group--disabled) {\n background: $grey_10;\n }\n\n &.sd-select-multiple-group--disabled {\n cursor: not-allowed;\n background-color: $grey_20;\n border-color: $grey_45;\n\n .sd-select-multiple-group__label {\n border-right: 1px solid $grey_45;\n }\n\n .sd-select-multiple-group__trigger {\n color: $grey_65;\n &:focus,\n &:focus-visible,\n &:focus-within {\n outline: none !important;\n }\n }\n }\n\n &__label {\n font-size: 12px;\n font-weight: 500;\n color: $grey_90;\n padding: 4px 12px;\n border-right: 1px solid $grey_45;\n border-radius: 4px 0 0 4px;\n background-color: $grey_10;\n }\n\n &__container {\n position: relative;\n width: 100%;\n display: flex;\n\n .sd-select-multiple-group__trigger {\n padding: 4px 20px 4px 12px;\n display: flex;\n width: 100%;\n align-items: center;\n\n .sd-select-multiple-group__value {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: 20px;\n font-size: 12px;\n font-weight: 400;\n }\n\n .sd-select-multiple-group__clear {\n margin: 0 4px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n outline: none;\n border: none;\n }\n }\n\n .sd-select-multiple-group__arrow {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 12px;\n height: 12px;\n color: $grey_65;\n transition: transform 0.3s ease;\n\n &--open {\n transform: rotate(180deg);\n }\n }\n }\n }\n}\n\n.sd-select-multiple-group__dropdown {\n @extend %scrollBar;\n width: var(--select-width, 200px);\n max-height: var(--select-dropdown-height, 260px);\n padding-bottom: 2px;\n background-color: white;\n box-shadow: 2px 2px 12px 2px rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n overflow-y: auto;\n color: $grey_90;\n\n .sd-select-multiple-group__search-container {\n position: sticky;\n top: 0;\n display: flex;\n width: 100%;\n background-color: white;\n align-items: center;\n padding: 4px 8px;\n\n sd-input {\n width: 100%;\n }\n\n &--scrolled {\n box-shadow: 2px 2px 8px 2px rgba(0, 0, 0, 0.2);\n }\n }\n\n .sd-select-multiple-group__option-placeholder {\n padding: 4px 12px;\n font-size: 12px;\n line-height: 20px;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Fragment,\n Host,\n Prop,\n State,\n Watch,\n h,\n} from '@stencil/core';\nimport { BaseDropdownEvent } from '../../utils/base-dropdown-event';\nimport { SelectMultipleEvents, SelectOption, SelectStyleProps } from '../sd-select/sd-select';\nimport { SelectKeyboardNavigation } from '../../utils/select-keyboard-navigation';\n\nexport interface SelectOptionGroup extends SelectOption {\n type: 'group' | 'subgroup' | 'item' | 'all';\n parent?: string;\n}\n\n@Component({\n tag: 'sd-select-multiple-group',\n styleUrl: 'sd-select-multiple-group.scss',\n})\nexport class SdSelectMultipleGroup extends BaseDropdownEvent {\n @Element() el!: HTMLElement;\n\n // props\n @Prop({ mutable: true }) value: SelectOptionGroup[] | null = null;\n @Prop() label: string = '';\n @Prop({ mutable: true }) options: SelectOptionGroup[] = [];\n @Prop() placeholder: string = '선택';\n @Prop() optionPlaceholder: string = '옵션이 없습니다.';\n @Prop() width: string = '200px';\n @Prop() dropdownHeight: string = '260px';\n @Prop() disabled: boolean = false;\n @Prop() clearable: boolean = false;\n @Prop() searchable: boolean = false;\n @Prop() useCheckbox: boolean = false;\n @Prop() useAll: boolean = false;\n @Prop() allCheckedLabel = '전체';\n @Prop() allCheckOptionLabel = '전체';\n\n // props - custom styles\n @Prop() containerStyle: SelectStyleProps['containerStyle'] = {};\n @Prop() triggerStyle: SelectStyleProps['triggerStyle'] = {};\n @Prop() dropdownStyle: SelectStyleProps['dropdownStyle'] = {};\n @Prop() optionStyle: SelectStyleProps['optionStyle'] = {};\n @Prop() labelStyle: SelectStyleProps['labelStyle'] = {};\n\n // props - custom slots\n @Prop() optionRenderer?: (option: SelectOption, index: number, isSelected: boolean) => any;\n\n // states\n @State() filteredOptions = this.options;\n @State() isOpen: boolean = false;\n @State() searchText: string | null = null;\n @State() itemIndex: number = -1;\n @State() isScrolled: boolean = false;\n\n // events\n @Event() sdChange?: EventEmitter<SelectMultipleEvents['sdChange']>;\n @Event() dropDownShow?: EventEmitter<SelectMultipleEvents['dropDownShow']>;\n\n private selectRef?: HTMLElement;\n private searchRef?: HTMLSdInputElement;\n private optionRef?: HTMLSdSelectOptionGroupElement;\n private dropdownRef?: HTMLElement;\n\n @Watch('value')\n valueChanged() {\n this.sdChange?.emit(this.value);\n }\n\n @Watch('options')\n optionsChanged() {\n this.filteredOptions = this.options;\n this.filterOptions();\n }\n\n @Watch('searchText')\n searchTextChanged() {\n this.filterOptions();\n }\n\n @Watch('itemIndex')\n async itemIndexChanged(newIndex: number, oldIndex: number) {\n if (this.searchable) {\n const searchInput = await this.getNativeInputElement();\n if (this.itemIndex === -1) {\n searchInput?.focus();\n return;\n } else if (searchInput?.matches(':focus')) {\n searchInput?.blur();\n }\n }\n\n const optionElements = Array.from(\n this.dropdownRef?.querySelectorAll(\n '.sd-select-multiple-group__dropdown sd-select-option-group',\n ) || [],\n );\n const currentItem = optionElements?.[this.itemIndex];\n\n if (!currentItem || !this.isOpen) return;\n\n this.optionRef = currentItem as HTMLSdSelectOptionGroupElement;\n const isOptionDisabled = await this.optionRef.isDisabled();\n\n if (isOptionDisabled) {\n newIndex > oldIndex ? this.itemIndex++ : this.itemIndex--;\n return;\n }\n\n this.scrollToOption(currentItem as HTMLElement);\n }\n\n @Watch('isOpen')\n async isOpenChanged() {\n // Base class의 이벤트 관리 호출 - 다른 select와의 이벤트 충돌 방지\n this.onDropdownToggle(this.isOpen);\n\n const selectedOption = this.getSelectedOption();\n if (!selectedOption) {\n this.itemIndex = -1;\n } else {\n this.itemIndex = this.options.indexOf(selectedOption[0]);\n }\n\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n\n if (this.isOpen === false) return;\n\n await new Promise(resolve => setTimeout(resolve, 10));\n\n const optionElements = Array.from(\n this.dropdownRef?.querySelectorAll('.sd-select-multiple__dropdown sd-select-item') || [],\n );\n const currentItem = optionElements?.[this.itemIndex];\n\n // 드롭다운이 열릴 때 검색 입력에 포커스\n if (this.searchable) {\n const searchInput = await this.getNativeInputElement();\n searchInput?.focus();\n }\n\n if (!currentItem) return;\n\n await new Promise(resolve => setTimeout(resolve, 10)); // 추가 딜레이\n this.scrollToOption(currentItem as HTMLElement);\n }\n\n componentWillLoad() {\n // props가 모두 설정된 후에 실행되므로 올바른 options 값을 가져올 수 있음\n this.filteredOptions = this.options;\n this.initializeEvent(); // global dropdown Manager에 등록 + 이벤트 핸들러 초기화\n }\n\n disconnectedCallback() {\n this.cleanupEvent(); // global dropdown Manager에서 제거 + 이벤트 정리\n }\n\n protected handleDocumentClick(event: Event): void {\n if (!this.selectRef?.contains(event.target as Node)) {\n this.isOpen = false;\n }\n }\n\n protected handleDocumentKeydown(keyboardEvent: KeyboardEvent): void {\n keyboardEvent.stopPropagation();\n const targetKey = ['ArrowDown', 'ArrowUp', 'Enter', 'Escape'];\n if (!targetKey.includes(keyboardEvent.key)) return;\n\n keyboardEvent.preventDefault();\n switch (keyboardEvent.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n const keyboardNavigation = new SelectKeyboardNavigation(this.searchable, this.filteredOptions);\n const nextIndex = keyboardNavigation.getNextIndex(this.itemIndex, keyboardEvent.key);\n this.itemIndex = nextIndex;\n break;\n case 'Enter':\n const selectedOption = this.filteredOptions[this.itemIndex];\n if (selectedOption && !selectedOption.disabled) {\n this.handleOptionSelection(selectedOption);\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n // event handlers\n handleTriggerClick = (event: Event) => {\n event.stopPropagation();\n\n if (!this.disabled) {\n this.isOpen = !this.isOpen;\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n }\n };\n\n handleAllOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n }) => {\n if (detail.isSelected) {\n // 이미 선택된 옵션인 경우, 선택 해제\n const filterDisabledOptions = this.filteredOptions.filter(\n opt => opt.type === 'item' && !opt.disabled,\n );\n this.value =\n this.value?.filter(\n selected => !filterDisabledOptions.some(opt => opt.value === selected.value),\n ) || this.value;\n } else {\n // 새로운 옵션 선택\n const valueSet = new Set([\n ...(this.value || []),\n ...this.filteredOptions.filter(opt => opt.type === 'item' && !opt.disabled),\n ]);\n this.value = Array.from(valueSet);\n }\n };\n\n handleOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n }) => {\n const { option, event } = detail;\n event.stopPropagation();\n\n if (option.type === 'group') this.handleGroupOptionClick(detail);\n if (option.type === 'subgroup') this.handleSubGroupOptionClick(detail);\n if (option.type === 'item') this.handleOptionSelection(option);\n };\n\n handleGroupOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n }) => {\n const { option, isSelected } = detail;\n const childOptions = this.filteredOptions.filter(\n opt => opt.parent === option.value && !opt.disabled,\n );\n\n childOptions.forEach(subgroup => {\n this.handleSubGroupOptionClick({\n option: subgroup,\n isSelected: isSelected || isSelected === null,\n });\n });\n };\n\n handleSubGroupOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n }) => {\n const { option, isSelected } = detail;\n\n const childOptions = this.filteredOptions.filter(\n opt => opt.parent === option.value && !opt.disabled,\n );\n\n if (isSelected || isSelected === null) {\n // 모든 자식 옵션이 선택된 경우, 모두 선택 해제\n this.value =\n this.value?.filter(selected => !childOptions.some(child => child.value === selected.value)) ||\n null;\n } else {\n // 일부 또는 전체 자식 옵션이 선택되지 않은 경우, 모두 선택\n const newSelections = childOptions.filter(\n child => !this.value?.some(selected => selected.value === child.value),\n );\n this.value = [...(this.value || []), ...newSelections];\n }\n };\n\n private filterOptions() {\n if (!this.searchText || this.searchText.trim() === '') {\n // 검색어가 없으면 전체 옵션 표시\n this.filteredOptions = this.options;\n return;\n }\n\n const searchTerm = this.searchText.toLowerCase();\n const matchedOptions = new Set<SelectOptionGroup>();\n\n // 1. 직접 매칭되는 옵션들 찾기\n this.options.forEach(option => {\n if (option.label.toLowerCase().includes(searchTerm)) {\n matchedOptions.add(option);\n\n // 매칭된 옵션의 상위 그룹들도 포함\n this.addParentGroups(option, matchedOptions);\n }\n });\n\n // 2. Set을 배열로 변환하고 원본 순서 유지\n this.filteredOptions = this.options.filter(option => matchedOptions.has(option));\n }\n\n private addParentGroups(option: SelectOptionGroup, matchedSet: Set<SelectOptionGroup>) {\n if (!option.parent) return;\n\n const parentOption = this.options.find(opt => opt.value === option.parent);\n if (parentOption && !matchedSet.has(parentOption)) {\n matchedSet.add(parentOption);\n // 재귀적으로 상위 그룹들도 추가\n this.addParentGroups(parentOption, matchedSet);\n }\n }\n\n private getSelectedOption(): SelectOptionGroup[] {\n return this.options.filter(option => this.value?.includes(option));\n }\n\n private handleDropdownScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n const scrollTop = target.scrollTop;\n\n // 스크롤이 조금이라도 되면 그림자 표시\n this.isScrolled = scrollTop > 0;\n };\n\n private async getNativeInputElement(): Promise<HTMLInputElement | null> {\n if (this.searchRef) {\n return this.searchRef.getNativeElement();\n }\n return null;\n }\n\n private handleOptionSelection = (option: SelectOptionGroup) => {\n if (!option || option.disabled) return;\n\n const isAlreadySelected = this.value?.some(opt => opt.value === option.value);\n if (isAlreadySelected) {\n // 이미 선택된 옵션인 경우, 선택 해제\n this.value = this.value?.filter(opt => opt.value !== option.value) || null;\n } else {\n // 새로운 옵션 선택\n this.value = [...(this.value || []), option];\n }\n };\n\n private getAllItemsUnderOption(\n parentOption: SelectOptionGroup,\n includeDisabled: boolean = false,\n ): SelectOptionGroup[] {\n const filterChildrenWithParent = (option: SelectOptionGroup) =>\n option.parent === parentOption.value && (includeDisabled || !option.disabled);\n\n if (parentOption.type === 'subgroup') {\n return this.filteredOptions.filter(\n option => filterChildrenWithParent(option) && option.type === 'item',\n );\n }\n\n const allItems: SelectOptionGroup[] = [];\n const childOptions = this.filteredOptions.filter(filterChildrenWithParent);\n const subgroupOptions = childOptions.filter(option => option.type === 'subgroup');\n subgroupOptions.forEach(subgroup => {\n const itemsUnderSubgroup = this.filteredOptions.filter(\n option =>\n option.parent === subgroup.value &&\n option.type === 'item' &&\n (includeDisabled ? true : !option.disabled),\n );\n allItems.push(...itemsUnderSubgroup);\n });\n const directItems = childOptions.filter(option => option.type === 'item');\n allItems.push(...directItems);\n\n return allItems;\n }\n\n private isAllChildrenSelected(groupOption: SelectOptionGroup): boolean | null {\n const allItems = this.getAllItemsUnderOption(groupOption);\n\n if (allItems.length === 0) return false;\n\n const selectedItems = allItems.filter(item =>\n this.value?.some(selected => selected.value === item.value),\n );\n\n if (selectedItems.length === allItems.length) return true;\n if (selectedItems.length > 0) return null;\n return false;\n }\n\n private getChildrenOptions(parentOption: SelectOptionGroup) {\n const allItems = this.getAllItemsUnderOption(parentOption, true);\n const selectedCount = allItems.filter(item =>\n this.value?.some(val => val.value === item.value),\n ).length;\n\n return {\n selectedCount,\n totalCount: allItems.length,\n };\n }\n\n private isAllOptionsSelected(): boolean {\n if (!this.value || this.value.length === 0) return false;\n\n const selectableItems = this.options.filter(opt => opt.type === 'item' && !opt.disabled);\n\n if (selectableItems.length === 0) return false;\n\n const selectedValues = new Set(this.value.map(v => v.value));\n return selectableItems.every(option => selectedValues.has(option.value));\n }\n\n private getTriggerLabel() {\n const selectedOption = this.getSelectedOption();\n if (!selectedOption) return '선택';\n\n if (selectedOption.length === 0) return this.placeholder;\n\n const isAllChecked = this.isAllOptionsSelected();\n\n return isAllChecked\n ? this.allCheckedLabel\n : selectedOption.map(option => option.label).join(', ');\n }\n\n closeDropdown() {\n this.isOpen = false;\n }\n\n private scrollToOption(optionElement: HTMLElement) {\n if (!this.dropdownRef || !optionElement) return;\n\n const dropdown = this.dropdownRef;\n const optionTop = optionElement.offsetTop;\n const optionHeight = optionElement.offsetHeight;\n const dropdownScrollTop = dropdown.scrollTop;\n const dropdownHeight = dropdown.clientHeight;\n\n const searchContainer = dropdown.querySelector('.sd-select__search-container');\n const searchOffset = searchContainer ? (searchContainer as HTMLElement).offsetHeight : 0;\n\n const visibleTop = dropdownScrollTop + searchOffset;\n const visibleBottom = dropdownScrollTop + dropdownHeight;\n\n if (optionTop < visibleTop) {\n dropdown.scrollTop = optionTop - searchOffset;\n } else if (optionTop + optionHeight > visibleBottom) {\n dropdown.scrollTop = optionTop + optionHeight - dropdownHeight + searchOffset;\n }\n }\n\n render() {\n const style = {\n '--select-width': this.width || '200px',\n '--select-dropdown-height': this.dropdownHeight || '260px',\n };\n\n return (\n <Host style={style}>\n <div\n class={{\n 'sd-select-multiple-group': true,\n 'sd-select-multiple-group--open': this.isOpen,\n 'sd-select-multiple-group--disabled': this.disabled,\n }}\n style={this.containerStyle}\n ref={el => (this.selectRef = el)}\n >\n {this.renderLabel(this.label, this.labelStyle)}\n <div class=\"sd-select-multiple-group__container\">\n {this.renderTrigger()}\n {this.renderDropdown()}\n </div>\n </div>\n </Host>\n );\n }\n\n private renderLabel(label?: string, labelStyle?: { [key: string]: string }) {\n if (!label) return null;\n\n return (\n <label class=\"sd-select-multiple-group__label\" style={labelStyle}>\n {label}\n </label>\n );\n }\n\n private renderTrigger() {\n const selectedOption = this.getSelectedOption();\n return (\n <div\n class=\"sd-select-multiple-group__trigger\"\n tabindex={this.disabled ? -1 : 0}\n onClick={this.handleTriggerClick}\n style={this.triggerStyle}\n >\n <span class=\"sd-select-multiple-group__value\">{this.getTriggerLabel()}</span>\n {this.clearable && selectedOption?.length > 0 && !this.disabled && (\n <sd-icon\n key=\"close-icon\"\n name=\"close\"\n size={10}\n color=\"#888\"\n class=\"sd-select-multiple-group__clear\"\n onClick={event => {\n event.stopPropagation();\n this.value = null;\n }}\n ></sd-icon>\n )}\n\n <sd-icon\n key=\"arrow-icon\"\n name=\"arrowDown\"\n color=\"#888\"\n class={{\n 'sd-select-multiple-group__arrow': true,\n 'sd-select-multiple-group__arrow--open': this.isOpen,\n }}\n ></sd-icon>\n </div>\n );\n }\n\n private renderDropdown() {\n const style = {\n '--select-width': this.width || '200px',\n '--select-dropdown-height': this.dropdownHeight || '260px',\n };\n\n if (this.isOpen === false) return null;\n\n return (\n <sd-portal open={this.isOpen} parentRef={this.selectRef} onSdClose={this.closeDropdown}>\n <div\n class=\"sd-select-multiple-group__dropdown\"\n style={{ ...style, ...this.dropdownStyle }}\n onScroll={this.handleDropdownScroll}\n ref={el => (this.dropdownRef = el)}\n >\n {this.searchable && (\n <div\n class={{\n 'sd-select-multiple-group__search-container': true,\n 'sd-select-multiple-group__search-container--scrolled': this.isScrolled,\n }}\n onClick={event => event.stopPropagation()}\n >\n <sd-input\n ref={el => (this.searchRef = el)}\n value={this.searchText}\n placeholder=\"검색\"\n clearable\n inputStyle={{ 'padding-left': '8px' }}\n autofocus\n onSdInput={event => {\n this.searchText = String(event?.detail);\n }}\n onSdFocus={() => {\n this.itemIndex = -1;\n }}\n onKeyDown={e => {\n if (e.code === 'Enter') e.stopPropagation();\n }}\n >\n <sd-icon name=\"search\" size={16} color=\"#737373\" slot=\"prefix\"></sd-icon>\n </sd-input>\n </div>\n )}\n\n {this.filteredOptions.length > 0 ? (\n <Fragment>\n {this.useAll && (\n <sd-select-option-group\n option={{ label: this.allCheckOptionLabel, value: '', type: 'all' }}\n index={0}\n isSelected={this.isAllOptionsSelected()}\n isFocused={this.itemIndex === 0}\n optionStyle={this.optionStyle}\n onOptionClick={({\n detail,\n }: {\n detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n };\n }) => this.handleAllOptionClick(detail)}\n useCheckbox={this.useCheckbox}\n useIndicator={false}\n ></sd-select-option-group>\n )}\n {this.filteredOptions.map((option, index) => (\n <slot name={`option-${option.value}`}>\n <sd-select-option-group\n option={option}\n index={index}\n isSelected={\n option.type === 'item'\n ? this.value?.some(selected => selected.value === option.value)\n : this.isAllChildrenSelected(option)\n }\n isFocused={index === this.itemIndex}\n optionStyle={this.optionStyle}\n onOptionClick={({\n detail,\n }: {\n detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n };\n }) => {\n if (option.type !== 'item' && !this.useCheckbox) {\n return;\n }\n\n this.handleOptionClick(detail);\n }}\n useCheckbox={this.useCheckbox}\n {...(option.type !== 'item' && { countInfo: this.getChildrenOptions(option) })}\n ></sd-select-option-group>\n </slot>\n ))}\n </Fragment>\n ) : (\n <slot name=\"option-placeholder\">\n <div class={'sd-select-multiple-group__option-placeholder'} style={this.optionStyle}>\n {this.optionPlaceholder}\n </div>\n </slot>\n )}\n </div>\n </sd-portal>\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -154,11 +154,17 @@ const SdSelectMultipleGroup = class extends BaseDropdownEvent {
154
154
  handleAllOptionClick = (detail) => {
155
155
  if (detail.isSelected) {
156
156
  // 이미 선택된 옵션인 경우, 선택 해제
157
- this.value = [];
157
+ const filterDisabledOptions = this.filteredOptions.filter(opt => opt.type === 'item' && !opt.disabled);
158
+ this.value =
159
+ this.value?.filter(selected => !filterDisabledOptions.some(opt => opt.value === selected.value)) || this.value;
158
160
  }
159
161
  else {
160
162
  // 새로운 옵션 선택
161
- this.value = [...this.filteredOptions.filter(opt => opt.type === 'item' && !opt.disabled)];
163
+ const valueSet = new Set([
164
+ ...(this.value || []),
165
+ ...this.filteredOptions.filter(opt => opt.type === 'item' && !opt.disabled),
166
+ ]);
167
+ this.value = Array.from(valueSet);
162
168
  }
163
169
  };
164
170
  handleOptionClick = (detail) => {
@@ -253,23 +259,23 @@ const SdSelectMultipleGroup = class extends BaseDropdownEvent {
253
259
  this.value = [...(this.value || []), option];
254
260
  }
255
261
  };
256
- getAllItemsUnderOption(parentOption) {
257
- const childOptions = this.filteredOptions.filter(option => option.parent === parentOption.value && !option.disabled);
258
- if (parentOption.type === 'group') {
259
- // Group - 모든 하위 item들을 수집
260
- const subgroupOptions = childOptions.filter(option => option.type === 'subgroup');
261
- const allItemsUnderGroup = [];
262
- // subgroup 하위의 모든 item
263
- subgroupOptions.forEach(subgroup => {
264
- const itemsUnderSubgroup = this.filteredOptions.filter(option => option.parent === subgroup.value && option.type === 'item' && !option.disabled);
265
- allItemsUnderGroup.push(...itemsUnderSubgroup);
266
- });
267
- // Group 바로 하위 item
268
- const directItems = childOptions.filter(option => option.type === 'item');
269
- allItemsUnderGroup.push(...directItems);
270
- return allItemsUnderGroup;
262
+ getAllItemsUnderOption(parentOption, includeDisabled = false) {
263
+ const filterChildrenWithParent = (option) => option.parent === parentOption.value && (includeDisabled || !option.disabled);
264
+ if (parentOption.type === 'subgroup') {
265
+ return this.filteredOptions.filter(option => filterChildrenWithParent(option) && option.type === 'item');
271
266
  }
272
- return childOptions.filter(option => option.type === 'item');
267
+ const allItems = [];
268
+ const childOptions = this.filteredOptions.filter(filterChildrenWithParent);
269
+ const subgroupOptions = childOptions.filter(option => option.type === 'subgroup');
270
+ subgroupOptions.forEach(subgroup => {
271
+ const itemsUnderSubgroup = this.filteredOptions.filter(option => option.parent === subgroup.value &&
272
+ option.type === 'item' &&
273
+ (includeDisabled ? true : !option.disabled));
274
+ allItems.push(...itemsUnderSubgroup);
275
+ });
276
+ const directItems = childOptions.filter(option => option.type === 'item');
277
+ allItems.push(...directItems);
278
+ return allItems;
273
279
  }
274
280
  isAllChildrenSelected(groupOption) {
275
281
  const allItems = this.getAllItemsUnderOption(groupOption);
@@ -283,25 +289,21 @@ const SdSelectMultipleGroup = class extends BaseDropdownEvent {
283
289
  return false;
284
290
  }
285
291
  getChildrenOptions(parentOption) {
286
- if (parentOption.type === 'group') {
287
- const allItems = this.getAllItemsUnderOption(parentOption);
288
- const selectedItems = allItems.filter(item => this.value?.some(selected => selected.value === item.value));
289
- return {
290
- selectedCount: selectedItems.length,
291
- totalCount: allItems.length,
292
- };
293
- }
294
- // Subgroup의 경우
295
- const children = this.filteredOptions.filter(option => option.parent === parentOption.value);
292
+ const allItems = this.getAllItemsUnderOption(parentOption, true);
293
+ const selectedCount = allItems.filter(item => this.value?.some(val => val.value === item.value)).length;
296
294
  return {
297
- selectedCount: children.filter(child => this.value?.some(val => val.value === child.value))
298
- .length,
299
- totalCount: children.length,
295
+ selectedCount,
296
+ totalCount: allItems.length,
300
297
  };
301
298
  }
302
299
  isAllOptionsSelected() {
303
- const selectedOption = this.getSelectedOption();
304
- return (selectedOption.length === this.options.filter(opt => !opt.disabled && opt.type === 'item').length);
300
+ if (!this.value || this.value.length === 0)
301
+ return false;
302
+ const selectableItems = this.options.filter(opt => opt.type === 'item' && !opt.disabled);
303
+ if (selectableItems.length === 0)
304
+ return false;
305
+ const selectedValues = new Set(this.value.map(v => v.value));
306
+ return selectableItems.every(option => selectedValues.has(option.value));
305
307
  }
306
308
  getTriggerLabel() {
307
309
  const selectedOption = this.getSelectedOption();
@@ -341,11 +343,11 @@ const SdSelectMultipleGroup = class extends BaseDropdownEvent {
341
343
  '--select-width': this.width || '200px',
342
344
  '--select-dropdown-height': this.dropdownHeight || '260px',
343
345
  };
344
- return (h(Host, { key: '3657f1c9c91e6ef006acb50bd83790f45ec38ccd', style: style }, h("div", { key: '9bb5379eb59eef6dc706686fb08f8bd9f3c5eaab', class: {
346
+ return (h(Host, { key: 'b94c7ab29fd483d5e02b330465ca1ee52e633614', style: style }, h("div", { key: 'fa4f208be81c4c70f499d45bd353e17e852b00f1', class: {
345
347
  'sd-select-multiple-group': true,
346
348
  'sd-select-multiple-group--open': this.isOpen,
347
349
  'sd-select-multiple-group--disabled': this.disabled,
348
- }, style: this.containerStyle, ref: el => (this.selectRef = el) }, this.renderLabel(this.label, this.labelStyle), h("div", { key: '4f0a9205a38450ab205e57d3ec80b95ee3b028e0', class: "sd-select-multiple-group__container" }, this.renderTrigger(), this.renderDropdown()))));
350
+ }, style: this.containerStyle, ref: el => (this.selectRef = el) }, this.renderLabel(this.label, this.labelStyle), h("div", { key: 'fa4a306d932a9c182ae16c05192dce0c0d25d915', class: "sd-select-multiple-group__container" }, this.renderTrigger(), this.renderDropdown()))));
349
351
  }
350
352
  renderLabel(label, labelStyle) {
351
353
  if (!label)
@@ -379,8 +381,7 @@ const SdSelectMultipleGroup = class extends BaseDropdownEvent {
379
381
  }, onKeyDown: e => {
380
382
  if (e.code === 'Enter')
381
383
  e.stopPropagation();
382
- } }, h("sd-icon", { name: "search", size: 16, color: "#737373", slot: "prefix" })))), this.filteredOptions.length > 0 ? (h(Fragment, null, this.useAll && (h("sd-select-option-group", { option: { label: this.allCheckOptionLabel, value: '', type: 'all' }, index: 0, isSelected: this.value?.length ===
383
- this.options.filter(opt => !opt.disabled && opt.type === 'item').length, isFocused: this.itemIndex === 0, optionStyle: this.optionStyle, onOptionClick: ({ detail, }) => this.handleAllOptionClick(detail), useCheckbox: this.useCheckbox, useIndicator: false })), this.filteredOptions.map((option, index) => (h("slot", { name: `option-${option.value}` }, h("sd-select-option-group", { option: option, index: index, isSelected: option.type === 'item'
384
+ } }, h("sd-icon", { name: "search", size: 16, color: "#737373", slot: "prefix" })))), this.filteredOptions.length > 0 ? (h(Fragment, null, this.useAll && (h("sd-select-option-group", { option: { label: this.allCheckOptionLabel, value: '', type: 'all' }, index: 0, isSelected: this.isAllOptionsSelected(), isFocused: this.itemIndex === 0, optionStyle: this.optionStyle, onOptionClick: ({ detail, }) => this.handleAllOptionClick(detail), useCheckbox: this.useCheckbox, useIndicator: false })), this.filteredOptions.map((option, index) => (h("slot", { name: `option-${option.value}` }, h("sd-select-option-group", { option: option, index: index, isSelected: option.type === 'item'
384
385
  ? this.value?.some(selected => selected.value === option.value)
385
386
  : this.isAllChildrenSelected(option), isFocused: index === this.itemIndex, optionStyle: this.optionStyle, onOptionClick: ({ detail, }) => {
386
387
  if (option.type !== 'item' && !this.useCheckbox) {
@@ -1 +1 @@
1
- {"version":3,"file":"sd-select-multiple-group.entry.js","sources":["src/components/sd-select-multiple-group/sd-select-multiple-group.scss?tag=sd-select-multiple-group","src/components/sd-select-multiple-group/sd-select-multiple-group.tsx"],"sourcesContent":["@import 'variables';\n@import 'extend';\n\nsd-select-multiple-group {\n display: inline-block;\n height: fit-content;\n .sd-select-multiple-group {\n display: flex;\n flex-wrap: nowrap;\n width: var(--select-width, 200px);\n cursor: pointer;\n user-select: none;\n border: 1px solid $grey_55;\n border-radius: 4px;\n background-color: white;\n color: $grey_90;\n\n &:hover:not(.sd-select-multiple-group--disabled) {\n background: $grey_10;\n }\n\n &.sd-select-multiple-group--disabled {\n cursor: not-allowed;\n background-color: $grey_20;\n border-color: $grey_45;\n\n .sd-select-multiple-group__label {\n border-right: 1px solid $grey_45;\n }\n\n .sd-select-multiple-group__trigger {\n color: $grey_65;\n &:focus,\n &:focus-visible,\n &:focus-within {\n outline: none !important;\n }\n }\n }\n\n &__label {\n font-size: 12px;\n font-weight: 500;\n color: $grey_90;\n padding: 4px 12px;\n border-right: 1px solid $grey_45;\n border-radius: 4px 0 0 4px;\n background-color: $grey_10;\n }\n\n &__container {\n position: relative;\n width: 100%;\n display: flex;\n\n .sd-select-multiple-group__trigger {\n padding: 4px 20px 4px 12px;\n display: flex;\n width: 100%;\n align-items: center;\n\n .sd-select-multiple-group__value {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: 20px;\n font-size: 12px;\n font-weight: 400;\n }\n\n .sd-select-multiple-group__clear {\n margin: 0 4px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n outline: none;\n border: none;\n }\n }\n\n .sd-select-multiple-group__arrow {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 12px;\n height: 12px;\n color: $grey_65;\n transition: transform 0.3s ease;\n\n &--open {\n transform: rotate(180deg);\n }\n }\n }\n }\n}\n\n.sd-select-multiple-group__dropdown {\n @extend %scrollBar;\n width: var(--select-width, 200px);\n max-height: var(--select-dropdown-height, 260px);\n padding-bottom: 2px;\n background-color: white;\n box-shadow: 2px 2px 12px 2px rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n overflow-y: auto;\n color: $grey_90;\n\n .sd-select-multiple-group__search-container {\n position: sticky;\n top: 0;\n display: flex;\n width: 100%;\n background-color: white;\n align-items: center;\n padding: 4px 8px;\n\n sd-input {\n width: 100%;\n }\n\n &--scrolled {\n box-shadow: 2px 2px 8px 2px rgba(0, 0, 0, 0.2);\n }\n }\n\n .sd-select-multiple-group__option-placeholder {\n padding: 4px 12px;\n font-size: 12px;\n line-height: 20px;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Fragment,\n Host,\n Prop,\n State,\n Watch,\n h,\n} from '@stencil/core';\nimport { BaseDropdownEvent } from '../../utils/base-dropdown-event';\nimport { SelectMultipleEvents, SelectOption, SelectStyleProps } from '../sd-select/sd-select';\nimport { SelectKeyboardNavigation } from '../../utils/select-keyboard-navigation';\n\nexport interface SelectOptionGroup extends SelectOption {\n type: 'group' | 'subgroup' | 'item' | 'all';\n parent?: string;\n}\n\n@Component({\n tag: 'sd-select-multiple-group',\n styleUrl: 'sd-select-multiple-group.scss',\n})\nexport class SdSelectMultipleGroup extends BaseDropdownEvent {\n @Element() el!: HTMLElement;\n\n // props\n @Prop({ mutable: true }) value: SelectOptionGroup[] | null = null;\n @Prop() label: string = '';\n @Prop({ mutable: true }) options: SelectOptionGroup[] = [];\n @Prop() placeholder: string = '선택';\n @Prop() optionPlaceholder: string = '옵션이 없습니다.';\n @Prop() width: string = '200px';\n @Prop() dropdownHeight: string = '260px';\n @Prop() disabled: boolean = false;\n @Prop() clearable: boolean = false;\n @Prop() searchable: boolean = false;\n @Prop() useCheckbox: boolean = false;\n @Prop() useAll: boolean = false;\n @Prop() allCheckedLabel = '전체';\n @Prop() allCheckOptionLabel = '전체';\n\n // props - custom styles\n @Prop() containerStyle: SelectStyleProps['containerStyle'] = {};\n @Prop() triggerStyle: SelectStyleProps['triggerStyle'] = {};\n @Prop() dropdownStyle: SelectStyleProps['dropdownStyle'] = {};\n @Prop() optionStyle: SelectStyleProps['optionStyle'] = {};\n @Prop() labelStyle: SelectStyleProps['labelStyle'] = {};\n\n // props - custom slots\n @Prop() optionRenderer?: (option: SelectOption, index: number, isSelected: boolean) => any;\n\n // states\n @State() filteredOptions = this.options;\n @State() isOpen: boolean = false;\n @State() searchText: string | null = null;\n @State() itemIndex: number = -1;\n @State() isScrolled: boolean = false;\n\n // events\n @Event() sdChange?: EventEmitter<SelectMultipleEvents['sdChange']>;\n @Event() dropDownShow?: EventEmitter<SelectMultipleEvents['dropDownShow']>;\n\n private selectRef?: HTMLElement;\n private searchRef?: HTMLSdInputElement;\n private optionRef?: HTMLSdSelectOptionGroupElement;\n private dropdownRef?: HTMLElement;\n\n @Watch('value')\n valueChanged() {\n this.sdChange?.emit(this.value);\n }\n\n @Watch('options')\n optionsChanged() {\n this.filteredOptions = this.options;\n this.filterOptions();\n }\n\n @Watch('searchText')\n searchTextChanged() {\n this.filterOptions();\n }\n\n @Watch('itemIndex')\n async itemIndexChanged(newIndex: number, oldIndex: number) {\n if (this.searchable) {\n const searchInput = await this.getNativeInputElement();\n if (this.itemIndex === -1) {\n searchInput?.focus();\n return;\n } else if (searchInput?.matches(':focus')) {\n searchInput?.blur();\n }\n }\n\n const optionElements = Array.from(\n this.dropdownRef?.querySelectorAll(\n '.sd-select-multiple-group__dropdown sd-select-option-group',\n ) || [],\n );\n const currentItem = optionElements?.[this.itemIndex];\n\n if (!currentItem || !this.isOpen) return;\n\n this.optionRef = currentItem as HTMLSdSelectOptionGroupElement;\n const isOptionDisabled = await this.optionRef.isDisabled();\n\n if (isOptionDisabled) {\n newIndex > oldIndex ? this.itemIndex++ : this.itemIndex--;\n return;\n }\n\n this.scrollToOption(currentItem as HTMLElement);\n }\n\n @Watch('isOpen')\n async isOpenChanged() {\n // Base class의 이벤트 관리 호출 - 다른 select와의 이벤트 충돌 방지\n this.onDropdownToggle(this.isOpen);\n\n const selectedOption = this.getSelectedOption();\n if (!selectedOption) {\n this.itemIndex = -1;\n } else {\n this.itemIndex = this.options.indexOf(selectedOption[0]);\n }\n\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n\n if (this.isOpen === false) return;\n\n await new Promise(resolve => setTimeout(resolve, 10));\n\n const optionElements = Array.from(\n this.dropdownRef?.querySelectorAll('.sd-select-multiple__dropdown sd-select-item') || [],\n );\n const currentItem = optionElements?.[this.itemIndex];\n\n // 드롭다운이 열릴 때 검색 입력에 포커스\n if (this.searchable) {\n const searchInput = await this.getNativeInputElement();\n searchInput?.focus();\n }\n\n if (!currentItem) return;\n\n await new Promise(resolve => setTimeout(resolve, 10)); // 추가 딜레이\n this.scrollToOption(currentItem as HTMLElement);\n }\n\n componentWillLoad() {\n // props가 모두 설정된 후에 실행되므로 올바른 options 값을 가져올 수 있음\n this.filteredOptions = this.options;\n this.initializeEvent(); // global dropdown Manager에 등록 + 이벤트 핸들러 초기화\n }\n\n disconnectedCallback() {\n this.cleanupEvent(); // global dropdown Manager에서 제거 + 이벤트 정리\n }\n\n protected handleDocumentClick(event: Event): void {\n if (!this.selectRef?.contains(event.target as Node)) {\n this.isOpen = false;\n }\n }\n\n protected handleDocumentKeydown(keyboardEvent: KeyboardEvent): void {\n keyboardEvent.stopPropagation();\n const targetKey = ['ArrowDown', 'ArrowUp', 'Enter', 'Escape'];\n if (!targetKey.includes(keyboardEvent.key)) return;\n\n keyboardEvent.preventDefault();\n switch (keyboardEvent.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n const keyboardNavigation = new SelectKeyboardNavigation(this.searchable, this.filteredOptions);\n const nextIndex = keyboardNavigation.getNextIndex(this.itemIndex, keyboardEvent.key);\n this.itemIndex = nextIndex;\n break;\n case 'Enter':\n const selectedOption = this.filteredOptions[this.itemIndex];\n if (selectedOption && !selectedOption.disabled) {\n this.handleOptionSelection(selectedOption);\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n // event handlers\n handleTriggerClick = (event: Event) => {\n event.stopPropagation();\n\n if (!this.disabled) {\n this.isOpen = !this.isOpen;\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n }\n };\n\n handleAllOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n }) => {\n if (detail.isSelected) {\n // 이미 선택된 옵션인 경우, 선택 해제\n this.value = [];\n } else {\n // 새로운 옵션 선택\n this.value = [...this.filteredOptions.filter(opt => opt.type === 'item' && !opt.disabled)];\n }\n };\n\n handleOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n }) => {\n const { option, event } = detail;\n event.stopPropagation();\n\n if (option.type === 'group') this.handleGroupOptionClick(detail);\n if (option.type === 'subgroup') this.handleSubGroupOptionClick(detail);\n if (option.type === 'item') this.handleOptionSelection(option);\n };\n\n handleGroupOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n }) => {\n const { option, isSelected } = detail;\n const childOptions = this.filteredOptions.filter(\n opt => opt.parent === option.value && !opt.disabled,\n );\n\n childOptions.forEach(subgroup => {\n this.handleSubGroupOptionClick({\n option: subgroup,\n isSelected: isSelected || isSelected === null,\n });\n });\n };\n\n handleSubGroupOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n }) => {\n const { option, isSelected } = detail;\n\n const childOptions = this.filteredOptions.filter(\n opt => opt.parent === option.value && !opt.disabled,\n );\n\n if (isSelected || isSelected === null) {\n // 모든 자식 옵션이 선택된 경우, 모두 선택 해제\n this.value =\n this.value?.filter(selected => !childOptions.some(child => child.value === selected.value)) ||\n null;\n } else {\n // 일부 또는 전체 자식 옵션이 선택되지 않은 경우, 모두 선택\n const newSelections = childOptions.filter(\n child => !this.value?.some(selected => selected.value === child.value),\n );\n this.value = [...(this.value || []), ...newSelections];\n }\n };\n\n private filterOptions() {\n if (!this.searchText || this.searchText.trim() === '') {\n // 검색어가 없으면 전체 옵션 표시\n this.filteredOptions = this.options;\n return;\n }\n\n const searchTerm = this.searchText.toLowerCase();\n const matchedOptions = new Set<SelectOptionGroup>();\n\n // 1. 직접 매칭되는 옵션들 찾기\n this.options.forEach(option => {\n if (option.label.toLowerCase().includes(searchTerm)) {\n matchedOptions.add(option);\n\n // 매칭된 옵션의 상위 그룹들도 포함\n this.addParentGroups(option, matchedOptions);\n }\n });\n\n // 2. Set을 배열로 변환하고 원본 순서 유지\n this.filteredOptions = this.options.filter(option => matchedOptions.has(option));\n }\n\n private addParentGroups(option: SelectOptionGroup, matchedSet: Set<SelectOptionGroup>) {\n if (!option.parent) return;\n\n const parentOption = this.options.find(opt => opt.value === option.parent);\n if (parentOption && !matchedSet.has(parentOption)) {\n matchedSet.add(parentOption);\n // 재귀적으로 상위 그룹들도 추가\n this.addParentGroups(parentOption, matchedSet);\n }\n }\n\n private getSelectedOption(): SelectOptionGroup[] {\n return this.options.filter(option => this.value?.includes(option));\n }\n\n private handleDropdownScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n const scrollTop = target.scrollTop;\n\n // 스크롤이 조금이라도 되면 그림자 표시\n this.isScrolled = scrollTop > 0;\n };\n\n private async getNativeInputElement(): Promise<HTMLInputElement | null> {\n if (this.searchRef) {\n return this.searchRef.getNativeElement();\n }\n return null;\n }\n\n private handleOptionSelection = (option: SelectOptionGroup) => {\n if (!option || option.disabled) return;\n\n const isAlreadySelected = this.value?.some(opt => opt.value === option.value);\n if (isAlreadySelected) {\n // 이미 선택된 옵션인 경우, 선택 해제\n this.value = this.value?.filter(opt => opt.value !== option.value) || null;\n } else {\n // 새로운 옵션 선택\n this.value = [...(this.value || []), option];\n }\n };\n\n private getAllItemsUnderOption(parentOption: SelectOptionGroup): SelectOptionGroup[] {\n const childOptions = this.filteredOptions.filter(\n option => option.parent === parentOption.value && !option.disabled,\n );\n\n if (parentOption.type === 'group') {\n // Group - 모든 하위 item들을 수집\n const subgroupOptions = childOptions.filter(option => option.type === 'subgroup');\n const allItemsUnderGroup: SelectOptionGroup[] = [];\n\n // subgroup 하위의 모든 item\n subgroupOptions.forEach(subgroup => {\n const itemsUnderSubgroup = this.filteredOptions.filter(\n option => option.parent === subgroup.value && option.type === 'item' && !option.disabled,\n );\n allItemsUnderGroup.push(...itemsUnderSubgroup);\n });\n\n // Group 바로 하위 item\n const directItems = childOptions.filter(option => option.type === 'item');\n allItemsUnderGroup.push(...directItems);\n\n return allItemsUnderGroup;\n }\n\n return childOptions.filter(option => option.type === 'item');\n }\n\n private isAllChildrenSelected(groupOption: SelectOptionGroup): boolean | null {\n const allItems = this.getAllItemsUnderOption(groupOption);\n\n if (allItems.length === 0) return false;\n\n const selectedItems = allItems.filter(item =>\n this.value?.some(selected => selected.value === item.value),\n );\n\n if (selectedItems.length === allItems.length) return true;\n if (selectedItems.length > 0) return null;\n return false;\n }\n\n private getChildrenOptions(parentOption: SelectOptionGroup) {\n if (parentOption.type === 'group') {\n const allItems = this.getAllItemsUnderOption(parentOption);\n const selectedItems = allItems.filter(item =>\n this.value?.some(selected => selected.value === item.value),\n );\n\n return {\n selectedCount: selectedItems.length,\n totalCount: allItems.length,\n };\n }\n\n // Subgroup의 경우\n const children = this.filteredOptions.filter(option => option.parent === parentOption.value);\n return {\n selectedCount: children.filter(child => this.value?.some(val => val.value === child.value))\n .length,\n totalCount: children.length,\n };\n }\n\n private isAllOptionsSelected() {\n const selectedOption = this.getSelectedOption();\n return (\n selectedOption.length === this.options.filter(opt => !opt.disabled && opt.type === 'item').length\n );\n }\n\n private getTriggerLabel() {\n const selectedOption = this.getSelectedOption();\n if (!selectedOption) return '선택';\n\n if (selectedOption.length === 0) return this.placeholder;\n\n const isAllChecked = this.isAllOptionsSelected();\n\n return isAllChecked\n ? this.allCheckedLabel\n : selectedOption.map(option => option.label).join(', ');\n }\n\n closeDropdown() {\n this.isOpen = false;\n }\n\n private scrollToOption(optionElement: HTMLElement) {\n if (!this.dropdownRef || !optionElement) return;\n\n const dropdown = this.dropdownRef;\n const optionTop = optionElement.offsetTop;\n const optionHeight = optionElement.offsetHeight;\n const dropdownScrollTop = dropdown.scrollTop;\n const dropdownHeight = dropdown.clientHeight;\n\n const searchContainer = dropdown.querySelector('.sd-select__search-container');\n const searchOffset = searchContainer ? (searchContainer as HTMLElement).offsetHeight : 0;\n\n const visibleTop = dropdownScrollTop + searchOffset;\n const visibleBottom = dropdownScrollTop + dropdownHeight;\n\n if (optionTop < visibleTop) {\n dropdown.scrollTop = optionTop - searchOffset;\n } else if (optionTop + optionHeight > visibleBottom) {\n dropdown.scrollTop = optionTop + optionHeight - dropdownHeight + searchOffset;\n }\n }\n\n render() {\n const style = {\n '--select-width': this.width || '200px',\n '--select-dropdown-height': this.dropdownHeight || '260px',\n };\n\n return (\n <Host style={style}>\n <div\n class={{\n 'sd-select-multiple-group': true,\n 'sd-select-multiple-group--open': this.isOpen,\n 'sd-select-multiple-group--disabled': this.disabled,\n }}\n style={this.containerStyle}\n ref={el => (this.selectRef = el)}\n >\n {this.renderLabel(this.label, this.labelStyle)}\n <div class=\"sd-select-multiple-group__container\">\n {this.renderTrigger()}\n {this.renderDropdown()}\n </div>\n </div>\n </Host>\n );\n }\n\n private renderLabel(label?: string, labelStyle?: { [key: string]: string }) {\n if (!label) return null;\n\n return (\n <label class=\"sd-select-multiple-group__label\" style={labelStyle}>\n {label}\n </label>\n );\n }\n\n private renderTrigger() {\n const selectedOption = this.getSelectedOption();\n return (\n <div\n class=\"sd-select-multiple-group__trigger\"\n tabindex={this.disabled ? -1 : 0}\n onClick={this.handleTriggerClick}\n style={this.triggerStyle}\n >\n <span class=\"sd-select-multiple-group__value\">{this.getTriggerLabel()}</span>\n {this.clearable && selectedOption?.length > 0 && !this.disabled && (\n <sd-icon\n key=\"close-icon\"\n name=\"close\"\n size={10}\n color=\"#888\"\n class=\"sd-select-multiple-group__clear\"\n onClick={event => {\n event.stopPropagation();\n this.value = null;\n }}\n ></sd-icon>\n )}\n\n <sd-icon\n key=\"arrow-icon\"\n name=\"arrowDown\"\n color=\"#888\"\n class={{\n 'sd-select-multiple-group__arrow': true,\n 'sd-select-multiple-group__arrow--open': this.isOpen,\n }}\n ></sd-icon>\n </div>\n );\n }\n\n private renderDropdown() {\n const style = {\n '--select-width': this.width || '200px',\n '--select-dropdown-height': this.dropdownHeight || '260px',\n };\n\n if (this.isOpen === false) return null;\n\n return (\n <sd-portal open={this.isOpen} parentRef={this.selectRef} onSdClose={this.closeDropdown}>\n <div\n class=\"sd-select-multiple-group__dropdown\"\n style={{ ...style, ...this.dropdownStyle }}\n onScroll={this.handleDropdownScroll}\n ref={el => (this.dropdownRef = el)}\n >\n {this.searchable && (\n <div\n class={{\n 'sd-select-multiple-group__search-container': true,\n 'sd-select-multiple-group__search-container--scrolled': this.isScrolled,\n }}\n onClick={event => event.stopPropagation()}\n >\n <sd-input\n ref={el => (this.searchRef = el)}\n value={this.searchText}\n placeholder=\"검색\"\n clearable\n inputStyle={{ 'padding-left': '8px' }}\n autofocus\n onSdInput={event => {\n this.searchText = String(event?.detail);\n }}\n onSdFocus={() => {\n this.itemIndex = -1;\n }}\n onKeyDown={e => {\n if (e.code === 'Enter') e.stopPropagation();\n }}\n >\n <sd-icon name=\"search\" size={16} color=\"#737373\" slot=\"prefix\"></sd-icon>\n </sd-input>\n </div>\n )}\n\n {this.filteredOptions.length > 0 ? (\n <Fragment>\n {this.useAll && (\n <sd-select-option-group\n option={{ label: this.allCheckOptionLabel, value: '', type: 'all' }}\n index={0}\n isSelected={\n this.value?.length ===\n this.options.filter(opt => !opt.disabled && opt.type === 'item').length\n }\n isFocused={this.itemIndex === 0}\n optionStyle={this.optionStyle}\n onOptionClick={({\n detail,\n }: {\n detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n };\n }) => this.handleAllOptionClick(detail)}\n useCheckbox={this.useCheckbox}\n useIndicator={false}\n ></sd-select-option-group>\n )}\n {this.filteredOptions.map((option, index) => (\n <slot name={`option-${option.value}`}>\n <sd-select-option-group\n option={option}\n index={index}\n isSelected={\n option.type === 'item'\n ? this.value?.some(selected => selected.value === option.value)\n : this.isAllChildrenSelected(option)\n }\n isFocused={index === this.itemIndex}\n optionStyle={this.optionStyle}\n onOptionClick={({\n detail,\n }: {\n detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n };\n }) => {\n if (option.type !== 'item' && !this.useCheckbox) {\n return;\n }\n\n this.handleOptionClick(detail);\n }}\n useCheckbox={this.useCheckbox}\n {...(option.type !== 'item' && { countInfo: this.getChildrenOptions(option) })}\n ></sd-select-option-group>\n </slot>\n ))}\n </Fragment>\n ) : (\n <slot name=\"option-placeholder\">\n <div class={'sd-select-multiple-group__option-placeholder'} style={this.optionStyle}>\n {this.optionPlaceholder}\n </div>\n </slot>\n )}\n </div>\n </sd-portal>\n );\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-select-multiple-group.entry.js","sources":["src/components/sd-select-multiple-group/sd-select-multiple-group.scss?tag=sd-select-multiple-group","src/components/sd-select-multiple-group/sd-select-multiple-group.tsx"],"sourcesContent":["@import 'variables';\n@import 'extend';\n\nsd-select-multiple-group {\n display: inline-block;\n height: fit-content;\n .sd-select-multiple-group {\n display: flex;\n flex-wrap: nowrap;\n width: var(--select-width, 200px);\n cursor: pointer;\n user-select: none;\n border: 1px solid $grey_55;\n border-radius: 4px;\n background-color: white;\n color: $grey_90;\n\n &:hover:not(.sd-select-multiple-group--disabled) {\n background: $grey_10;\n }\n\n &.sd-select-multiple-group--disabled {\n cursor: not-allowed;\n background-color: $grey_20;\n border-color: $grey_45;\n\n .sd-select-multiple-group__label {\n border-right: 1px solid $grey_45;\n }\n\n .sd-select-multiple-group__trigger {\n color: $grey_65;\n &:focus,\n &:focus-visible,\n &:focus-within {\n outline: none !important;\n }\n }\n }\n\n &__label {\n font-size: 12px;\n font-weight: 500;\n color: $grey_90;\n padding: 4px 12px;\n border-right: 1px solid $grey_45;\n border-radius: 4px 0 0 4px;\n background-color: $grey_10;\n }\n\n &__container {\n position: relative;\n width: 100%;\n display: flex;\n\n .sd-select-multiple-group__trigger {\n padding: 4px 20px 4px 12px;\n display: flex;\n width: 100%;\n align-items: center;\n\n .sd-select-multiple-group__value {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: 20px;\n font-size: 12px;\n font-weight: 400;\n }\n\n .sd-select-multiple-group__clear {\n margin: 0 4px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n outline: none;\n border: none;\n }\n }\n\n .sd-select-multiple-group__arrow {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 12px;\n height: 12px;\n color: $grey_65;\n transition: transform 0.3s ease;\n\n &--open {\n transform: rotate(180deg);\n }\n }\n }\n }\n}\n\n.sd-select-multiple-group__dropdown {\n @extend %scrollBar;\n width: var(--select-width, 200px);\n max-height: var(--select-dropdown-height, 260px);\n padding-bottom: 2px;\n background-color: white;\n box-shadow: 2px 2px 12px 2px rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n overflow-y: auto;\n color: $grey_90;\n\n .sd-select-multiple-group__search-container {\n position: sticky;\n top: 0;\n display: flex;\n width: 100%;\n background-color: white;\n align-items: center;\n padding: 4px 8px;\n\n sd-input {\n width: 100%;\n }\n\n &--scrolled {\n box-shadow: 2px 2px 8px 2px rgba(0, 0, 0, 0.2);\n }\n }\n\n .sd-select-multiple-group__option-placeholder {\n padding: 4px 12px;\n font-size: 12px;\n line-height: 20px;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Fragment,\n Host,\n Prop,\n State,\n Watch,\n h,\n} from '@stencil/core';\nimport { BaseDropdownEvent } from '../../utils/base-dropdown-event';\nimport { SelectMultipleEvents, SelectOption, SelectStyleProps } from '../sd-select/sd-select';\nimport { SelectKeyboardNavigation } from '../../utils/select-keyboard-navigation';\n\nexport interface SelectOptionGroup extends SelectOption {\n type: 'group' | 'subgroup' | 'item' | 'all';\n parent?: string;\n}\n\n@Component({\n tag: 'sd-select-multiple-group',\n styleUrl: 'sd-select-multiple-group.scss',\n})\nexport class SdSelectMultipleGroup extends BaseDropdownEvent {\n @Element() el!: HTMLElement;\n\n // props\n @Prop({ mutable: true }) value: SelectOptionGroup[] | null = null;\n @Prop() label: string = '';\n @Prop({ mutable: true }) options: SelectOptionGroup[] = [];\n @Prop() placeholder: string = '선택';\n @Prop() optionPlaceholder: string = '옵션이 없습니다.';\n @Prop() width: string = '200px';\n @Prop() dropdownHeight: string = '260px';\n @Prop() disabled: boolean = false;\n @Prop() clearable: boolean = false;\n @Prop() searchable: boolean = false;\n @Prop() useCheckbox: boolean = false;\n @Prop() useAll: boolean = false;\n @Prop() allCheckedLabel = '전체';\n @Prop() allCheckOptionLabel = '전체';\n\n // props - custom styles\n @Prop() containerStyle: SelectStyleProps['containerStyle'] = {};\n @Prop() triggerStyle: SelectStyleProps['triggerStyle'] = {};\n @Prop() dropdownStyle: SelectStyleProps['dropdownStyle'] = {};\n @Prop() optionStyle: SelectStyleProps['optionStyle'] = {};\n @Prop() labelStyle: SelectStyleProps['labelStyle'] = {};\n\n // props - custom slots\n @Prop() optionRenderer?: (option: SelectOption, index: number, isSelected: boolean) => any;\n\n // states\n @State() filteredOptions = this.options;\n @State() isOpen: boolean = false;\n @State() searchText: string | null = null;\n @State() itemIndex: number = -1;\n @State() isScrolled: boolean = false;\n\n // events\n @Event() sdChange?: EventEmitter<SelectMultipleEvents['sdChange']>;\n @Event() dropDownShow?: EventEmitter<SelectMultipleEvents['dropDownShow']>;\n\n private selectRef?: HTMLElement;\n private searchRef?: HTMLSdInputElement;\n private optionRef?: HTMLSdSelectOptionGroupElement;\n private dropdownRef?: HTMLElement;\n\n @Watch('value')\n valueChanged() {\n this.sdChange?.emit(this.value);\n }\n\n @Watch('options')\n optionsChanged() {\n this.filteredOptions = this.options;\n this.filterOptions();\n }\n\n @Watch('searchText')\n searchTextChanged() {\n this.filterOptions();\n }\n\n @Watch('itemIndex')\n async itemIndexChanged(newIndex: number, oldIndex: number) {\n if (this.searchable) {\n const searchInput = await this.getNativeInputElement();\n if (this.itemIndex === -1) {\n searchInput?.focus();\n return;\n } else if (searchInput?.matches(':focus')) {\n searchInput?.blur();\n }\n }\n\n const optionElements = Array.from(\n this.dropdownRef?.querySelectorAll(\n '.sd-select-multiple-group__dropdown sd-select-option-group',\n ) || [],\n );\n const currentItem = optionElements?.[this.itemIndex];\n\n if (!currentItem || !this.isOpen) return;\n\n this.optionRef = currentItem as HTMLSdSelectOptionGroupElement;\n const isOptionDisabled = await this.optionRef.isDisabled();\n\n if (isOptionDisabled) {\n newIndex > oldIndex ? this.itemIndex++ : this.itemIndex--;\n return;\n }\n\n this.scrollToOption(currentItem as HTMLElement);\n }\n\n @Watch('isOpen')\n async isOpenChanged() {\n // Base class의 이벤트 관리 호출 - 다른 select와의 이벤트 충돌 방지\n this.onDropdownToggle(this.isOpen);\n\n const selectedOption = this.getSelectedOption();\n if (!selectedOption) {\n this.itemIndex = -1;\n } else {\n this.itemIndex = this.options.indexOf(selectedOption[0]);\n }\n\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n\n if (this.isOpen === false) return;\n\n await new Promise(resolve => setTimeout(resolve, 10));\n\n const optionElements = Array.from(\n this.dropdownRef?.querySelectorAll('.sd-select-multiple__dropdown sd-select-item') || [],\n );\n const currentItem = optionElements?.[this.itemIndex];\n\n // 드롭다운이 열릴 때 검색 입력에 포커스\n if (this.searchable) {\n const searchInput = await this.getNativeInputElement();\n searchInput?.focus();\n }\n\n if (!currentItem) return;\n\n await new Promise(resolve => setTimeout(resolve, 10)); // 추가 딜레이\n this.scrollToOption(currentItem as HTMLElement);\n }\n\n componentWillLoad() {\n // props가 모두 설정된 후에 실행되므로 올바른 options 값을 가져올 수 있음\n this.filteredOptions = this.options;\n this.initializeEvent(); // global dropdown Manager에 등록 + 이벤트 핸들러 초기화\n }\n\n disconnectedCallback() {\n this.cleanupEvent(); // global dropdown Manager에서 제거 + 이벤트 정리\n }\n\n protected handleDocumentClick(event: Event): void {\n if (!this.selectRef?.contains(event.target as Node)) {\n this.isOpen = false;\n }\n }\n\n protected handleDocumentKeydown(keyboardEvent: KeyboardEvent): void {\n keyboardEvent.stopPropagation();\n const targetKey = ['ArrowDown', 'ArrowUp', 'Enter', 'Escape'];\n if (!targetKey.includes(keyboardEvent.key)) return;\n\n keyboardEvent.preventDefault();\n switch (keyboardEvent.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n const keyboardNavigation = new SelectKeyboardNavigation(this.searchable, this.filteredOptions);\n const nextIndex = keyboardNavigation.getNextIndex(this.itemIndex, keyboardEvent.key);\n this.itemIndex = nextIndex;\n break;\n case 'Enter':\n const selectedOption = this.filteredOptions[this.itemIndex];\n if (selectedOption && !selectedOption.disabled) {\n this.handleOptionSelection(selectedOption);\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n // event handlers\n handleTriggerClick = (event: Event) => {\n event.stopPropagation();\n\n if (!this.disabled) {\n this.isOpen = !this.isOpen;\n this.dropDownShow?.emit({ isOpen: this.isOpen });\n }\n };\n\n handleAllOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n }) => {\n if (detail.isSelected) {\n // 이미 선택된 옵션인 경우, 선택 해제\n const filterDisabledOptions = this.filteredOptions.filter(\n opt => opt.type === 'item' && !opt.disabled,\n );\n this.value =\n this.value?.filter(\n selected => !filterDisabledOptions.some(opt => opt.value === selected.value),\n ) || this.value;\n } else {\n // 새로운 옵션 선택\n const valueSet = new Set([\n ...(this.value || []),\n ...this.filteredOptions.filter(opt => opt.type === 'item' && !opt.disabled),\n ]);\n this.value = Array.from(valueSet);\n }\n };\n\n handleOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n }) => {\n const { option, event } = detail;\n event.stopPropagation();\n\n if (option.type === 'group') this.handleGroupOptionClick(detail);\n if (option.type === 'subgroup') this.handleSubGroupOptionClick(detail);\n if (option.type === 'item') this.handleOptionSelection(option);\n };\n\n handleGroupOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n }) => {\n const { option, isSelected } = detail;\n const childOptions = this.filteredOptions.filter(\n opt => opt.parent === option.value && !opt.disabled,\n );\n\n childOptions.forEach(subgroup => {\n this.handleSubGroupOptionClick({\n option: subgroup,\n isSelected: isSelected || isSelected === null,\n });\n });\n };\n\n handleSubGroupOptionClick = (detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n }) => {\n const { option, isSelected } = detail;\n\n const childOptions = this.filteredOptions.filter(\n opt => opt.parent === option.value && !opt.disabled,\n );\n\n if (isSelected || isSelected === null) {\n // 모든 자식 옵션이 선택된 경우, 모두 선택 해제\n this.value =\n this.value?.filter(selected => !childOptions.some(child => child.value === selected.value)) ||\n null;\n } else {\n // 일부 또는 전체 자식 옵션이 선택되지 않은 경우, 모두 선택\n const newSelections = childOptions.filter(\n child => !this.value?.some(selected => selected.value === child.value),\n );\n this.value = [...(this.value || []), ...newSelections];\n }\n };\n\n private filterOptions() {\n if (!this.searchText || this.searchText.trim() === '') {\n // 검색어가 없으면 전체 옵션 표시\n this.filteredOptions = this.options;\n return;\n }\n\n const searchTerm = this.searchText.toLowerCase();\n const matchedOptions = new Set<SelectOptionGroup>();\n\n // 1. 직접 매칭되는 옵션들 찾기\n this.options.forEach(option => {\n if (option.label.toLowerCase().includes(searchTerm)) {\n matchedOptions.add(option);\n\n // 매칭된 옵션의 상위 그룹들도 포함\n this.addParentGroups(option, matchedOptions);\n }\n });\n\n // 2. Set을 배열로 변환하고 원본 순서 유지\n this.filteredOptions = this.options.filter(option => matchedOptions.has(option));\n }\n\n private addParentGroups(option: SelectOptionGroup, matchedSet: Set<SelectOptionGroup>) {\n if (!option.parent) return;\n\n const parentOption = this.options.find(opt => opt.value === option.parent);\n if (parentOption && !matchedSet.has(parentOption)) {\n matchedSet.add(parentOption);\n // 재귀적으로 상위 그룹들도 추가\n this.addParentGroups(parentOption, matchedSet);\n }\n }\n\n private getSelectedOption(): SelectOptionGroup[] {\n return this.options.filter(option => this.value?.includes(option));\n }\n\n private handleDropdownScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n const scrollTop = target.scrollTop;\n\n // 스크롤이 조금이라도 되면 그림자 표시\n this.isScrolled = scrollTop > 0;\n };\n\n private async getNativeInputElement(): Promise<HTMLInputElement | null> {\n if (this.searchRef) {\n return this.searchRef.getNativeElement();\n }\n return null;\n }\n\n private handleOptionSelection = (option: SelectOptionGroup) => {\n if (!option || option.disabled) return;\n\n const isAlreadySelected = this.value?.some(opt => opt.value === option.value);\n if (isAlreadySelected) {\n // 이미 선택된 옵션인 경우, 선택 해제\n this.value = this.value?.filter(opt => opt.value !== option.value) || null;\n } else {\n // 새로운 옵션 선택\n this.value = [...(this.value || []), option];\n }\n };\n\n private getAllItemsUnderOption(\n parentOption: SelectOptionGroup,\n includeDisabled: boolean = false,\n ): SelectOptionGroup[] {\n const filterChildrenWithParent = (option: SelectOptionGroup) =>\n option.parent === parentOption.value && (includeDisabled || !option.disabled);\n\n if (parentOption.type === 'subgroup') {\n return this.filteredOptions.filter(\n option => filterChildrenWithParent(option) && option.type === 'item',\n );\n }\n\n const allItems: SelectOptionGroup[] = [];\n const childOptions = this.filteredOptions.filter(filterChildrenWithParent);\n const subgroupOptions = childOptions.filter(option => option.type === 'subgroup');\n subgroupOptions.forEach(subgroup => {\n const itemsUnderSubgroup = this.filteredOptions.filter(\n option =>\n option.parent === subgroup.value &&\n option.type === 'item' &&\n (includeDisabled ? true : !option.disabled),\n );\n allItems.push(...itemsUnderSubgroup);\n });\n const directItems = childOptions.filter(option => option.type === 'item');\n allItems.push(...directItems);\n\n return allItems;\n }\n\n private isAllChildrenSelected(groupOption: SelectOptionGroup): boolean | null {\n const allItems = this.getAllItemsUnderOption(groupOption);\n\n if (allItems.length === 0) return false;\n\n const selectedItems = allItems.filter(item =>\n this.value?.some(selected => selected.value === item.value),\n );\n\n if (selectedItems.length === allItems.length) return true;\n if (selectedItems.length > 0) return null;\n return false;\n }\n\n private getChildrenOptions(parentOption: SelectOptionGroup) {\n const allItems = this.getAllItemsUnderOption(parentOption, true);\n const selectedCount = allItems.filter(item =>\n this.value?.some(val => val.value === item.value),\n ).length;\n\n return {\n selectedCount,\n totalCount: allItems.length,\n };\n }\n\n private isAllOptionsSelected(): boolean {\n if (!this.value || this.value.length === 0) return false;\n\n const selectableItems = this.options.filter(opt => opt.type === 'item' && !opt.disabled);\n\n if (selectableItems.length === 0) return false;\n\n const selectedValues = new Set(this.value.map(v => v.value));\n return selectableItems.every(option => selectedValues.has(option.value));\n }\n\n private getTriggerLabel() {\n const selectedOption = this.getSelectedOption();\n if (!selectedOption) return '선택';\n\n if (selectedOption.length === 0) return this.placeholder;\n\n const isAllChecked = this.isAllOptionsSelected();\n\n return isAllChecked\n ? this.allCheckedLabel\n : selectedOption.map(option => option.label).join(', ');\n }\n\n closeDropdown() {\n this.isOpen = false;\n }\n\n private scrollToOption(optionElement: HTMLElement) {\n if (!this.dropdownRef || !optionElement) return;\n\n const dropdown = this.dropdownRef;\n const optionTop = optionElement.offsetTop;\n const optionHeight = optionElement.offsetHeight;\n const dropdownScrollTop = dropdown.scrollTop;\n const dropdownHeight = dropdown.clientHeight;\n\n const searchContainer = dropdown.querySelector('.sd-select__search-container');\n const searchOffset = searchContainer ? (searchContainer as HTMLElement).offsetHeight : 0;\n\n const visibleTop = dropdownScrollTop + searchOffset;\n const visibleBottom = dropdownScrollTop + dropdownHeight;\n\n if (optionTop < visibleTop) {\n dropdown.scrollTop = optionTop - searchOffset;\n } else if (optionTop + optionHeight > visibleBottom) {\n dropdown.scrollTop = optionTop + optionHeight - dropdownHeight + searchOffset;\n }\n }\n\n render() {\n const style = {\n '--select-width': this.width || '200px',\n '--select-dropdown-height': this.dropdownHeight || '260px',\n };\n\n return (\n <Host style={style}>\n <div\n class={{\n 'sd-select-multiple-group': true,\n 'sd-select-multiple-group--open': this.isOpen,\n 'sd-select-multiple-group--disabled': this.disabled,\n }}\n style={this.containerStyle}\n ref={el => (this.selectRef = el)}\n >\n {this.renderLabel(this.label, this.labelStyle)}\n <div class=\"sd-select-multiple-group__container\">\n {this.renderTrigger()}\n {this.renderDropdown()}\n </div>\n </div>\n </Host>\n );\n }\n\n private renderLabel(label?: string, labelStyle?: { [key: string]: string }) {\n if (!label) return null;\n\n return (\n <label class=\"sd-select-multiple-group__label\" style={labelStyle}>\n {label}\n </label>\n );\n }\n\n private renderTrigger() {\n const selectedOption = this.getSelectedOption();\n return (\n <div\n class=\"sd-select-multiple-group__trigger\"\n tabindex={this.disabled ? -1 : 0}\n onClick={this.handleTriggerClick}\n style={this.triggerStyle}\n >\n <span class=\"sd-select-multiple-group__value\">{this.getTriggerLabel()}</span>\n {this.clearable && selectedOption?.length > 0 && !this.disabled && (\n <sd-icon\n key=\"close-icon\"\n name=\"close\"\n size={10}\n color=\"#888\"\n class=\"sd-select-multiple-group__clear\"\n onClick={event => {\n event.stopPropagation();\n this.value = null;\n }}\n ></sd-icon>\n )}\n\n <sd-icon\n key=\"arrow-icon\"\n name=\"arrowDown\"\n color=\"#888\"\n class={{\n 'sd-select-multiple-group__arrow': true,\n 'sd-select-multiple-group__arrow--open': this.isOpen,\n }}\n ></sd-icon>\n </div>\n );\n }\n\n private renderDropdown() {\n const style = {\n '--select-width': this.width || '200px',\n '--select-dropdown-height': this.dropdownHeight || '260px',\n };\n\n if (this.isOpen === false) return null;\n\n return (\n <sd-portal open={this.isOpen} parentRef={this.selectRef} onSdClose={this.closeDropdown}>\n <div\n class=\"sd-select-multiple-group__dropdown\"\n style={{ ...style, ...this.dropdownStyle }}\n onScroll={this.handleDropdownScroll}\n ref={el => (this.dropdownRef = el)}\n >\n {this.searchable && (\n <div\n class={{\n 'sd-select-multiple-group__search-container': true,\n 'sd-select-multiple-group__search-container--scrolled': this.isScrolled,\n }}\n onClick={event => event.stopPropagation()}\n >\n <sd-input\n ref={el => (this.searchRef = el)}\n value={this.searchText}\n placeholder=\"검색\"\n clearable\n inputStyle={{ 'padding-left': '8px' }}\n autofocus\n onSdInput={event => {\n this.searchText = String(event?.detail);\n }}\n onSdFocus={() => {\n this.itemIndex = -1;\n }}\n onKeyDown={e => {\n if (e.code === 'Enter') e.stopPropagation();\n }}\n >\n <sd-icon name=\"search\" size={16} color=\"#737373\" slot=\"prefix\"></sd-icon>\n </sd-input>\n </div>\n )}\n\n {this.filteredOptions.length > 0 ? (\n <Fragment>\n {this.useAll && (\n <sd-select-option-group\n option={{ label: this.allCheckOptionLabel, value: '', type: 'all' }}\n index={0}\n isSelected={this.isAllOptionsSelected()}\n isFocused={this.itemIndex === 0}\n optionStyle={this.optionStyle}\n onOptionClick={({\n detail,\n }: {\n detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n };\n }) => this.handleAllOptionClick(detail)}\n useCheckbox={this.useCheckbox}\n useIndicator={false}\n ></sd-select-option-group>\n )}\n {this.filteredOptions.map((option, index) => (\n <slot name={`option-${option.value}`}>\n <sd-select-option-group\n option={option}\n index={index}\n isSelected={\n option.type === 'item'\n ? this.value?.some(selected => selected.value === option.value)\n : this.isAllChildrenSelected(option)\n }\n isFocused={index === this.itemIndex}\n optionStyle={this.optionStyle}\n onOptionClick={({\n detail,\n }: {\n detail: {\n option: SelectOptionGroup;\n isSelected: boolean | null;\n index: number;\n event: MouseEvent;\n };\n }) => {\n if (option.type !== 'item' && !this.useCheckbox) {\n return;\n }\n\n this.handleOptionClick(detail);\n }}\n useCheckbox={this.useCheckbox}\n {...(option.type !== 'item' && { countInfo: this.getChildrenOptions(option) })}\n ></sd-select-option-group>\n </slot>\n ))}\n </Fragment>\n ) : (\n <slot name=\"option-placeholder\">\n <div class={'sd-select-multiple-group__option-placeholder'} style={this.optionStyle}>\n {this.optionPlaceholder}\n </div>\n </slot>\n )}\n </div>\n </sd-portal>\n );\n }\n}\n"],"names":[],"mappings":"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"}