{"mappings":"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","names":["updateExplicitBooleanAttribute","$element","attrName","attrValue","isAttrTrue","getBooleanAttribute","updateBooleanAttribute","currentAttrValue","updateAttribute","getAttribute","defaultValue","isLiteralValue","literals","value","updateLiteralAttribute","getLiteralAttribute","DEFAULT_INTEGER_OPTIONS","applyRange","min","max","result","attrValueToInteger","options","itemSizeMultiplier","itemSpaceBetween","addExtraSpace","intValue","int","attrValueToPixels","updateIntegerAttribute","multiplier","getIntegerAttribute","setClass","elem","name","isSet","hasClass","getCssVar","element","variableName","cloneNode","el","deep","root","cloned","attr","i","clonedChild","shouldReduceMotion","isAttrEqual","oldVal","newVal","getScrollableParents","node","scrollableParents","parent","computedStyle","NectaryElementBase","version","pkg","nectaryDefinitions","nectaryRegistry","defineCustomElement","constructor","NectaryElement","#isDomConnected","templateHTML$1c","template$1c","Icon","#$icon","shadowRoot","_","typeValues$7","templateHTML$1b","template$1b","Text","#updateRole","isInline2","isEllipsis","isEmphasized","typeValues$6","templateHTML$1a","template$1a","Title","#$text","statusValues$1","templateHTML$19","template$19","AccordionItem","#$button","#$title","#$optionalText","isDisabled","CSV_DELIMITER","packCsv","values","unpackCsv","csv","updateCsv","setActive","index","getFirstCsvValue","acc","getReactEventHandler","handlerName","key","isTargetEqual","e","$elem","getTargetByAttribute","getTargetAttribute","getTargetIndexInParent","indexOf","origTgt","templateHTML$18","template$18","Accordion","#$slot","#controller","signal","#onSlotChange","#onOptionClick","#onChangeReactHandler","isMultiple","#onValueChange","target","$option","isChecked","templateHTML$17","template$17","ActionMenuOption","#$content","#onMouseDown","#onClickReactHandler","#dispatchClickEvent","isSinchActionMenuOption","contextNameToEventMap","shouldPersistContextValue","Context","#$root","#listeners","#name","#isListening","#lastContextValue","#onListenerConnect","#onListenerDisconnect","contextValue","subscribeContext","$el","cb","templateHTML$16","ITEM_HEIGHT$2","template$16","ActionMenu","#$optionSlot","#$listbox","#onListboxKeyDown","#onListboxBlur","#onListboxClick","#onContextKeyDown","#onContextVisibility","#selectOption","#handleKeydown","activeElement","#getDeepActiveElement","#getFirstOption","$opt","#findSelectedOption","#getPrevOption","#getNextOption","$options","#getOptionElements","#getLastOption","#getSelectedOptionIndex","hasRows","$op","isSelected","elements","vs16RegExp","zeroWidthJoiner","removeVS16s","rawEmoji","toCodePoints","unicodeSurrogates","points","char","previous","BASE_URL_ATTR","setEmojiBaseUrl","emojiEl","baseUrl","getEmojiBaseUrl","getEmojiUrl","codepoints","templateHTML$15","template$15","Emoji","#$img","#updateChar","templateHTML$14","template$14","CodeTag","templateHTML$13","template$13","Link","#$anchor","#onAnchorClick","#onAnchorFocus","#onAnchorBlur","#onFocusReactHandler","#onBlurReactHandler","shouldUseHistory","isExternal","isstandalone","isPrevented","regLinebreak","regParagraph","regEm3Star","regEm2Star","regEm1Star","regEm3Underscore","regEm2Underscore","regEm1Underscore","regCodeTag","regStrikethrough","regLink","regEmoji","regUList","regOList","regEscapedChars","allRegs","isEmojiString","data2","excludeRegs","regs","excluding","r","matchClosest","line","reg","res","match","INITIAL_CONTEXT","createLineParser","visitor","parseLine","md","context","groups","matchedStr","createBlockParser","listRegs","getListItemText","BLOCK_MODE_PARAGRAPH","BLOCK_MODE_ULIST","BLOCK_MODE_OLIST","parseBlock","lines","mode","listMatch","isOrderedList","listItemInitialIndent","listItemLines","listItemMatch","parseMarkdown","block","sizeValues$1","createParseVisitor$1","doc","emojiBaseUrl","url","$root","$p","$li","$lists","$text","emojiChar","$emoji","text","$codeTag","isBold","isItalic","isStrikethrough","$inline","$br","href","attributes","$link","isOrdered","$list","templateHTML$12","template$12","RichText","#wrapper","#parseVisitor","#updateText","#handleElementClick","_oldVal","_newVal","eventTarget","elementClickEvent","typeValues$5","templateHTML$11","template$11","Alert","DEFAULT_SIZE","sizeValues","sizeExValues","statusValues","getAvatarColorBg","id","getAvatarColorFg","templateHTML$10","template$10","Avatar","#$circle","#$image","#updateColor","colorName","bg","fg","isSlotElement","getFirstSlotElement","isDeep","getChildren","isFocusable","getFirstFocusableElement","child","resultEl","isElementFocused","getRect","x","y","width","height","rectOverlap","targetRect","contentRect","modeValues","templateHTML$$","template$$","Badge","#$badgeWrapper","#$badge","#observer","#onResize","#updatePosition","isHidden","selfRect","badgeRect","offsetMultX","offsetMultY","posX","posY","templateHTML$_","template$_","ButtonGroupItem","#$sinchButton","forwardEvent","isToggled","typeValues$4","formTypeValues","templateHTML$Z","template$Z","ButtonGroup","size","setFormValue","internals","formValue","requestSubmitForm","form","submitter","submitterProxy","CSVToFormData","formData","templateHTML$Y","template$Y","Button","#sizeContext","#internals","#onButtonClick","#onButtonFocus","#onButtonBlur","#onButtonKeydown","#onContextSize","#onSizeUpdate","#updateAriaDisabled","templateHTML$X","template$X","CardContainer","templateHTML$W","template$W","CardV2Title","bool","templateHTML$V","template$V","CLICK_EVENTS","CardV2","#$slots","#clickEventListeners","#setupEventListeners","#updateClickableState","type","listener","isInitial","#isClickEvent","#handleClickListenerAdded","#handleClickListenerRemoved","handleClick","handleReactClick","handleSlotChange","slot","isEmpty","hasClickHandler","listeners","set","titleElement","templateHTML$U","template$U","Checkbox","#$label","#onClick","#onFocus","#onBlur","#getFormValue","state","isIndeterminate","isInvalid","getChipColorBg","getChipColorFg","templateHTML$T","template$T","Chip","#onKeydown","isSmall","getSwatchColorBg","getSwatchColorFg","templateHTML$S","template$S","ColorSwatch","#$wrapper","createThrottle","delayFn","cancelFn","delayCallback","throttleAnimationFrame","orientationValues$2","bodyEl$1","disableOverscroll","enableOverscroll","templateHTML$R","template$R","Pop","#$targetWrapper","#$focus","#$dialog","#resizeThrottle","#resizeObserver","#$targetSlot","#$targetOpenSlot","#$contentSlot","#$targetOpenWrapper","#targetActiveElement","#keydownContext","#visibilityContext","#targetStyleValue","#modalWidth","#modalHeight","#scrollableParents","#updateOrientation","#onCancel","#onBackdropMouseDown","#onCloseReactHandler","#onExpand","#onCollapse","isModal","isOpen","inset","#getTargetRect","shouldOpen","item","#getFirstTargetElement","#stopEventPropagation","#captureRelatedActiveElement","$targetEl","targetElComputedStyle","marginLeft","marginRight","marginTop","marginBottom","matrix","activeSlot","#onTargetKeydown","#onContentSlotChange","#dispatchContentVisibility","isNonModal","#captureActiveElement","targetEl","updateWidth","orient","modalWidth","modalHeight","xPos","yPos","clampedXPos","clampedYPos","#isPopPointInViewport","targetLeftPos","targetTopPos","modalRect","shouldSetWidthToTarget","rect","#dispatchCloseEvent","isVisible2","clampedX","clampedY","TooltipState","#timerId","#state","#options","#switchToHideToShow","#switchToState","#onHideAnimationEnd","#switchToShowToHide","#onSwitchToShow","skipDelay","skipHideAnimation","#onShowToHideEnd","nextState","typeValues$3","orientationValues$1","textAlignValues","getPopOrientation$1","orientation","templateHTML$Q","TIP_SIZE$1","SHOW_DELAY_SLOW","SHOW_DELAY_FAST","HIDE_DELAY","ANIMATION_DURATION$1","template$Q","Tooltip","#$pop","#$tooltipText","#$contentWrapper","#$tip","#$target","#tooltipState","#animation","#shouldReduceMotion","#isSubscribed","#onStateShowStart","#onStateShowEnd","#onStateHideStart","#onStateHideEnd","#onPopClose","#onShowReactHandler","#onHideReactHandler","#isOpen","#resetTipOrientation","#updateTipOrientation","isOpenedAttr","#onMouseEnter","#onMouseLeave","#onScroll","#subscribeScroll","#subscribeMouseLeaveEvents","#dispatchShowEvent","#dispatchHideEvent","#unsubscribeMouseLeaveEvents","#unsubscribeScroll","diffX","diffY","#unsubscribeMouseEnterEvent","#subscribeMouseEnterEvent","templateHTML$P","template$P","ColorMenuOption","#$tooltip","#$swatch","templateHTML$O","NUM_COLS_DEFAULT","ITEM_WIDTH","ITEM_HEIGHT$1","template$O","ColorMenu","#$optionsSlot","#updateRows","#updateColumns","$item","rowsValue","colsValue","numItems","#dispatchChangeEvent","#findCheckedOption","#getNextRowOption","#getPrevRowOption","selectedIndex","numCols","numColsInLastRow","DAYS_IN_WEEK","pad$1","getCalendarMonth","date","firstDayOfWeek","firstDateOfMonth","lastDateOfMonth","firstWeekdayOfMonth","lastWeekdayOfMonth","daysInMonth","daysToPrepend","daysToAppend","month","week","dateToIso","isoToDate","today","today2","getDayNames","locale","formatter","dd","getMonthNames","mm","isValidDate","compareDates","a","b","clampMinDate","clampMaxDate","incMonth","currentDay","currentMonth","currentYear","nextMonth","nextYear","maxDayInNextMonth","targetDay","decMonth","prevMonth","prevYear","maxDayInPrevMonth","incYear","decYear","canGoPrevMonth","canGoNextMonth","canGoNextYear","canGoPrevYear","isDateBetween","areDatesEqual","cloneDate","sortDates","dateTuple","isDateOnScreen","uiDate","templateHTML$N","template$N","DatePicker","#$month","#$weeks","#$days","#$weekDayNames","#uiDate","#date1","#date2","#minDate","#maxDate","#$prevMonth","#$nextMonth","#$prevYear","#$nextYear","#$date","#monthNames","#isHoverSubscribed","day","#onPrevMonthClick","#onNextMonthClick","#onPrevYearClick","#onNextYearClick","#onDateClick","#unsubscribeRangeHover","prevValue","#render","names","$day","isRanged","indexOffset","rowIndex","colIndex","#onDateMouseEnter","hoverDateIso","hoverDate","todayDate","dayDate","dateIso","date2","#subscribeRangeHover","isoDates","date1","valueDate","wi","$week","isEmptyWeek","di","dayIso","StopEvents","events","event","#stopEvent","bodyEl","disableScroll","scrollWidth","enableScroll","templateHTML$M","template$M","Dialog","#$closeButton","#$caption","#$actionWrapper","#$actionSlot","#onCloseClick","#onActionSlotChange","caption","detail","cancelable","inputTypes","MASK_SYMBOL_LETTER","MASK_SYMBOL_DIGIT","EMPTY_CHAR","MASK_MODE_DIGIT","MASK_MODE_LETTER","MASK_MODE_EXACT","MASK_PLACEHOLDER_DELIMITER","MASK_PLACEHOLDER","testMaskedValue","maskSymbol","inputChar","isExactMode","isEmptyChar","getMaskSymbols","maskValue","mask","placeholder","maskSymbols","placeholderChars","maskIndex","placeholderIndex","clearCharsSelection","chars","selectionStart","selectionEnd","getPlaceholder","isMaskedInputComplete","getCharsFromInputValue","inputValue","c","isCursorAtTheBeginning","selectoinStart","getMergedValue","findLastNonEmptyCharIndex","compileResult","cursorPos","lastEmptyPos","deleteContentBackward$1","cusrsorPos","deleteContentForward","beginMaskedComposition","endMaskedComposition","wasValueInserted","dataChars","dataPos","data22","insertText$1","insertFromPaste$1","splitValueAndMask","getMergedValueSliced","templateHTML$L","template$L","Input","#$input","#$inputMask","#$iconSlot","#$iconWrapper","#$rightSlot","#$rightWrapper","#$leftSlot","#$leftWrapper","#selectionStart","#selectionEnd","#isCompositionInProgress","#compositionBeginValue","#wasClearedByMask","#maskSymbols","role","#setRole","#onKeyDown","#onInput","#onCut","#onCopy","#onPaste","#onCompositionStart","#onCompositionEnd","#onInputFocus","#onInputBlur","#onWheel","#onIconSlotChange","#onLeftSlotChange","#onRightSlotChange","#onCopyReactHandler","#onCutReactHandler","#onPasteReactHandler","#onWheelReactHandler","#formSubmitHandler","submitSelectors","formSubmitter","#resetAriaPlaceholder","nextVal","prevVal","#setSelectionRange","#updatePlaceholder","#updateMask","isAutofocus","start","end","direction","value2","mergedValue","#dispatchMaskClearChangeEvent","#onMaskBeforeInput","#handleMaskBeforeInput","inputType","#handleBeforeInput","nextValue","nextSelectionStart","nextSelectionEnd","#onMaskInputAutofillChange","copiedValue","replacedValue","replaceWith","pasteValue","orientationValues","getPopOrientation","templateHTML$K","TIP_SIZE","template$K","Popover","slottedTarget","#getFirstAssignedElementInSlot","slottedContent","popoverIdReference","#updateContentMaxWidth","hasTip","desiredX","desiredY","availableSpace","templateHTML$J","template$J","Tabs","#onOptionChange","templateHTML$I","template$I","TabsIconOption","createDebounce","debounceTimeout","ms","dataJson","templateHTML$H","groupLabels","data","template$H","MIN_SEARCH_LENGTH","SEARCH_DEBOUNCE_TIMEOUT","EmojiPicker","#$tabs","#$searchInput","#$searchClearButton","#$skinPopover","#$skinMenu","#$skinSwatch","#$skinButton","#$list","#$notFound","#$sh","#searchDebounce","#currentSkinTone","#prevTabsValue","#updateSearch","#onTabsChange","#onSearchChange","#onSearchClearClick","#onSkinButtonClick","#onSkinPopoverClose","#onSkinMenuChange","#onListClick","#updateTabs","#updateEmojis","#getDocumentRoot","#isSearchMode","currentActiveTab","#updateSearchEmojis","tabOptions","activeTabName","numTabs","group","tabOption","#iterateSearchEmojis","searchValue","skinTone","entry","hasSkins","skin","#iterateGroupEmojis","fragment","someFound","#createEmojiElement","activeGroup","group2","activeTab","emoji","btn","templateHTML$G","template$G","Field","#$additionalText","#$invalidText","#$inputSlot","#$tooltipWrapper","#$tooltipSlot","#onLabelClick","#onTooltipSlotChange","#onInputSlotChange","label","optionaltext","inputElement","labelText","doFilesSatisfySize$1","files","file","templateHTML$F","template$F","FilePicker","#onTargetSlotChange","#onInputChange","#onInvalidReactHandler","#onTargetClick","areFilesAccepted","accept","acceptValues","acceptValue","areItemsAccepted","doFilesSatisfySize","templateHTML$E","template$E","FileDrop","#$filePicker","#$dropArea","#$placeholder","#onDragEnter","#onDragLeave","#onDragOver","#onDrop","#onFilePickerChange","#onFilePickerInvalid","#setDragEffect","shouldEnable","isValid","isElementEnabled","items","isValidItems","itemsArray","dt","#dispatchInvalidEvent","templateHTML$D","template$D","Spinner","typeValues$2","templateHTML$C","template$C","FileStatus","#$filename","flagUrl","getFlagUrl","code","templateHTML$B","template$B","Flag","#updateCode","templateHTML$A","template$A","GridItem","templateHTML$z","template$z","Grid","templateHTML$y","template$y","HelpTooltip","#onTooltipShow","#onTooltipHide","#onTooltipShowReactHandler","#onTooltipHideReactHandler","typeValues$1","templateHTML$x","template$x","InlineAlert","#$closeWrapper","#$closeSlot","#onCloseSlotChange","templateHTML$w","template$w","ListItem","templateHTML$v","template$v","List","templateHTML$u","NUM_BUTTONS","MIDDLE_BTN_INDEX","FIRST_BTN_INDEX","LAST_BTN_INDEX","DOTS_LEFT_INDEX","DOTS_RIGHT_INDEX","template$u","Pagination","#$left","#$right","#$buttons","val","valueOffset","$b","btnText","isValueBad","btnIndex","#clamp","templateHTML$t","template$t","isVisible","elementStyle","observeDialogVisibilityManipulation","sinchDialogElement","intervalLength","dialogElement","PersistentOverlay","#$sinchDialog","#visibilityObserverInterval","#startObservingAlteration","#stopObservingAlteration","#onVisibilityAlteredReactHandler","#onVisibilityAltered","ATTR_PROGRESS_STEPPER_ITEM_CHECKED","ATTR_PROGRESS_STEPPER_ITEM_STATUS","ATTR_PROGRESS_STEPPER_ITEM_ACTIVE_DESCENDANT","isProgressStepperItemChecked","setProgressStepperItemChecked","isProgressStepperItemActive","setProgressStepperItemStatus","status","isProgressStepperItemActiveDescendant","setProgressStepperItemActiveDescendant","isActiveDescendant","templateHTML$s","template$s","ProgressStepperItem","#updateTabIndex","templateHTML$r","template$r","ProgressStepper","#$items","#currentActiveDescendantIndex","#isGoingToFocusItem","#onOptionKeydown","#onOptionBlur","#updateProgressValue","#resetActiveDescendant","#focusNextItem","nextIndex","#focusPrevItem","progressValue","$items","$progressValueIndex","it","#getCheckedItemIndex","#getFirstActiveItemIndex","templateHTML$q","template$q","Progress","#$bar","isDetailed","templateHTML$p","template$p","RadioOption","templateHTML$o","template$o","Radio","#onOptionKeyDown","#updateInvalid","option","#findRadioOptionElement","#getEnabledRadioElements","$selectedOption","currentIndex","TEXT_EMPTY_DATA","TEXT_WHITESPACE","isTextNode","$n","isEmptyText","isEmptyTextNode","getTextValue","isParagraph","isListItem","isUnorderedListItem","isOrderedListItem","isTextBlock","isEmoji","isInline","isRoot","assertNonNull","assertEquals","assertTextNode","assertTextBlock","assertListItem","markListItemAsBlock","isListItemMarkedArBlock","MAX_LISTITEM_LEVEL","removeListItemLevel","setListItemLevel","level","clampedLevel","getListItemLevel","assertInline","isTextContent","assertTextContent","createTextNode","createEmptyTextNode","createEmptyInline","getParentInline","isInsideList","$block","getParentTextBlock","isAllInsideList","$a","allSiblingsIncludingSatisfy","FORMAT_TYPE_TO_NAME","isFormatName","inlineName","isFormatBold","isFormatItalic","isFormatStrikethrough","isFormatCodetag","isFormatLink","isAllInsideFormatName","formatName","aBlock","bBlock","$currentBlock","$prevBlock","hasTextNodes","getFirstTextContent","$prev","getNextSiblingTextContent","getNextSiblingTextBlock","isAllInsideBold","isAllInsideItalic","isAllInsideStrikethrough","isAllInsideCodetag","isAllInsideLink","LINK_HREF_ATTR_NAME","copyFormatName","$source","$target","setInlineFormat","setAllInlineFormat","toggleInlineFormat","areSameInlineFormat","createInlineWithText","$res","createInlineWithTextOfType","createLink","EMOJI_CHAR_ATTR_NAME","createEmoji","PARAGRAPH_CLASSNAME","createActuallyEmptyParagraph","createEmptyParagraph","createParagraphWithChildren","children","ULI_CLASSNAME","OLI_CLASSNAME","createActuallyEmptyListItem","listLevel","createEmptyListItem","setListItemOrderedType","convertToListItem","convertToParagraph","ensureListItemLevelsAreCorrect","createListItemWithChildren","$node","childIndexOf","$parent","$child","getChildByIndex","afterLastChildIndex","isAfterLastChildIndex","getLastChild","n","getFirstChild","getPrevSibling","getNextSibling","getSiblingTextBlock","getSibling","$sib","getPrevSiblingTextBlock","getPrevSiblingTextContent","ensureValid","createCollapsedRange","cursor","offset","cursorToNodeWithOffset","createSpanningRange","aCursor","bCursor","startContainer","startOffset","endContainer","endOffset","removePrevSiblings","removeNextSiblings","removeSiblingsBetween","getCommonParent","$n0","$n1","removeNodesBetween","commonParent","$cpChildA","$cpChildB","ensureCorrectTextBlockIfEmpty","$firstChild","getChildText","getChildTextContent","getFirstOrLastChild","getLastTextContent","getFirstOrLastTextBlock","$lc","getLastTextBlock","mergeSiblingTextNodes","aContent","bContent","aContentLength","bContentLength","resultText","isEmptyResultText","mergeNextTextContentSibling","$aText","$bText","mergePrevTextContentSibling","mergeTextContentBetween","$newSib","mergeNextTextBlock","$lastChild","sliceChildren","splitTextBlock","childIndex","bChildren","splitTextNode","content","$aInline","$bInline","$before","$after","sliceTextNode","splitTextNodeAndInsertEmptyInline","formatInline","formatType","range","createIncomingCursorFromNodeWithOffset","createEndCursorFromTextContent","$newinline2","$newinline","aTrackingCursor2","createBeginCursorFromTextContent","bTrackingCursor2","areAllInline","aTrackingCursor","bTrackingCursor","aNode","bNode","func","currentNode","nextSib","tempNext","formatIndent","$iterateUpToNode","currentLevel","prevLevel","formatOutdent","$lastListItem","formatList","$iterateUpToNode2","$block2","createCursorFromTextNode","isAfterInline","removeContentInRange","nextContent","$nextSib","$prevSib","trackingCursor","deleteContentBackward","DEFAULT_ACTION_RESULT","insertLink","isAfterLastChild","insertLineBreak","isEmptyTextBlock","splitIndex","$bBlock","insertEmoji","insertText","$inline2","$newInline","insertFromPaste","$mdFragment","$fragment","$pasteLastChild","$aBlock","$lastBlock","handleEmojiMousedown","getEndRange","getSelectionInfo","isSelectionEqual","blockChildren","isEditorEmpty","rootChildren","serializeDescriptorReducer","text2","trailingSpaces","isACursorPointingHere","isBCursorPointingHere","leadingNonSpaceIndex","trailingSpaceIndex","MD_STRIKE_TOKEN","MD_EM3_STAR_TOKEN","MD_EM2_STAR_TOKEN","MD_EM1_STAR_TOKEN","MD_EM3_UNDERSCORE_TOKEN","MD_EM2_UNDERSCORE_TOKEN","MD_EM1_UNDERSCORE_TOKEN","MD_LINEBREAK_TOKEN","MD_CODETAG_TOKEN","MD_ULISTITEM_TOKEN","MD_OLISTITEM_TOKEN","MD_LISTITEM_JOIN","MD_PARAGRAPH_JOIN","serializeTextReducer","desc","descArray","chunks","prev","next","shouldUseUnderscores","serializeTextBlock","startIndex","endIndex","serializeListItemIndent","isOrderedStack","serializeListItem","listMdToken","serializeRoot","listChunks","listIsOrderedStack","paragraphChunks","flushListChunks","flushParagraphChunks","serializeMarkdown","createParseVisitor","listsStack","isFirstListItem","setBrowserCaret","selection","templateHTML$n","template$n","SUPPORTS_SHADOW_SELECTION","RichTextarea","#sh","#pendingRangePolyfill","#$bottomSlot","#$bottomWrapper","#$topSlot","#$topWrapper","#rangePolyfill","#cachedRange","#lastSelectionInfo","#prevDispatchedValue","#onBeforeInput","#onDragStart","#onBottomSlotChange","#onTopSlotChange","#onSelectionReactHandler","#onSelectionChange","#updateEditorEmptyClass","#handleInput","#getCurrentRange","#handleActionResult","#getSelectionRange","handleResult","selectionInfo","templateHTML$m","template$m","SegmentCollapse","templateHTML$l","template$l","SegmentedControlOption","getActualActiveElement","createKeyboardNavigation","enabledOptions","forward","optionsLength","templateHTML$k","template$k","SegmentedControl","#enabledOptions","#keyboardNav","#updateEnabledOptions","templateHTML$j","template$j","SegmentedIconControlOption","templateHTML$i","template$i","SegmentedIconControl","templateHTML$h","template$h","SelectButton","templateHTML$g","template$g","SelectMenuOption","isSelectMenuOption","templateHTML$f","ITEM_HEIGHT","NUM_ITEMS_SEARCH","template$f","SelectMenu","#$search","#$searchClear","#userManagedSearch","#updateSearchValue","#onOptionSlotChange","#onSearchChangeReactHandler","numberOfItems","maxNumberOfRows","#updateSearchList","isSearchable","searchableAttribute","autocomplete","newValue","searchChangedEvent","searchable","isSearchActive","templateHTML$e","template$e","SkeletonItem","getUid","byte","nextByte","templateHTML$d","template$d","ANIMATION_DURATION","BORDER_WIDTH","Skeleton","#shimmer","#slot","#clip","#borderWidth","#bb","entries","#updateAnimation","#handleSkeletonItemData","bgWidth","radiusStr","radius","bb","templateHTML$c","template$c","TableBody","alignValues","templateHTML$b","template$b","TableCell","templateHTML$a","template$a","TableHeadCell","isFit","templateHTML$9","template$9","TableHead","templateHTML$8","template$8","TableRow","isSticky","templateHTML$7","template$7","Table","templateHTML$6","template$6","TabsOption","getTagColorBg","getTagColorFg","templateHTML$5","template$5","Tag","#updateEllipsisTooltip","ellipsis","hasOverflow","templateHTML$4","template$4","Textarea","#$resizeHandle","#cursorPos","#isPendingDk","#prevContentHeight","#dragStartY","#intersectionObserver","#updateMinRows","isPrevCursorEnd","isShrinkingContent","nextContentHeight","isNewValTrue","isResizable","#calcMinRows","#intersectionObserverCallback","nextCursorPos","prevCursorPos","#onDragResize","#onDragEnd","dy","parseTime","timeParts","hours","minutes","pad","stringifyTime","hour","minute","stringifyHour","is24","stringifyHourFace","stringifyMinute","hourToIndex","getNeedleRotationDeg","getShortestCssDeg","currentDeg","nextDeg","diff","templateHTML$3","template$3","PICKER_RADIUS","MINUTE_DIGIT_SIZE","HOUR_12_DIGIT_SIZE","HOUR_24_DIGIT_SIZE","MINUTE_RADIUS","HOUR_12_RADIUS","HOUR_24_RADIUS","NEEDLE_HOUR_12_LENGTH","NEEDLE_HOUR_24_LENGTH","NEEDLE_MINUTE_LENGTH","TimePicker","#$pickerHours","#$pickerMinutes","#$pickerTouch","#$needleHour","#$needleMinute","#$headerHours","#$headerHoursText","#$headerMinutes","#$headerMinutesText","#$ampm","#$submitButton","#hour","#minute","MINUTE_DIGIT_RADIUS","HOUR_12_DIGIT_RADIUS","HOUR_24_DIGIT_RADIUS","hours12Frag","rad","hourDisplayValue","hours24Frag","minutesFrag","#onPickerClick","#onAmPmChange","#onSubmitButtonClick","#onHoursKeydown","#onMinutesKeydown","$am","$pm","$digit","#getClickDegree","touchRect","cx","cy","px","py","dx","len","cosRad","cssDeg","isHourRowClick","isHour24RowClick","digitIndex","#selectHour","#selectMinute","$hours","hourDigitIndex","currentCssDeg","hourCssDeg","$minutes","isNeedleSelected","minuteCssDeg","originValues","templateHTML$2","DURATION_ADD","DURATION_REMOVE","ITEMS_GAP","template$2","ToastManager","#map","#animations","#clear","nth","#onAnimateAdd","duration","addAnim","#storeAnimation","#onAnimateRemove","indexInQueue","heightAnim","opacityAnim","slotItems","listItems","removeIndex","orig","#unsubscribeChildren","addIndex","wrapper","#subscribeChildren","anim","onAnimEnd","#onCloneCloseClick","#onCloneActionClick","typeValues","templateHTML$1","TIMEOUT","template$1","Toast","#tid","#onTimeoutReactHandler","#updateTimeout","#clearTimeout","isPersistent","#onTimeout","templateHTML","template","Toggle","isLabeled"],"sources":["../esm/npm/@nectary/components@5.8.0/node_modules/@nectary/components/bundle.js"],"sourcesContent":["const updateExplicitBooleanAttribute = ($element, attrName, attrValue) =\u003e {\n  $element.setAttribute(attrName, attrValue === true ? \"true\" : \"false\");\n};\nconst isAttrTrue = (attrValue) =\u003e {\n  return attrValue !== null \u0026\u0026 attrValue !== \"false\";\n};\nconst getBooleanAttribute = ($element, attrName) =\u003e {\n  return isAttrTrue($element.getAttribute(attrName));\n};\nconst updateBooleanAttribute = ($element, attrName, attrValue) =\u003e {\n  const currentAttrValue = $element.getAttribute(attrName);\n  if (attrValue === true) {\n    if (!isAttrTrue(currentAttrValue)) {\n      $element.setAttribute(attrName, \"\");\n    }\n  } else if (currentAttrValue !== null) {\n    $element.removeAttribute(attrName);\n  }\n};\nconst updateAttribute = ($element, attrName, attrValue) =\u003e {\n  if (attrValue != null) {\n    $element.setAttribute(attrName, String(attrValue));\n  } else {\n    $element.removeAttribute(attrName);\n  }\n};\nfunction getAttribute($element, attrName, defaultValue = null) {\n  return $element.getAttribute(attrName) ?? defaultValue;\n}\nconst isLiteralValue = (literals, value) =\u003e {\n  return value != null \u0026\u0026 literals.includes(value);\n};\nconst updateLiteralAttribute = ($element, literals, attrName, attrValue) =\u003e {\n  if (isLiteralValue(literals, attrValue)) {\n    $element.setAttribute(attrName, attrValue);\n  } else {\n    $element.removeAttribute(attrName);\n  }\n};\nfunction getLiteralAttribute($element, literals, attrName, defaultValue) {\n  const attrValue = $element.getAttribute(attrName);\n  if (isLiteralValue(literals, attrValue)) {\n    return attrValue;\n  }\n  return defaultValue;\n}\nconst DEFAULT_INTEGER_OPTIONS = {\n  itemSizeMultiplier: 1,\n  itemSpaceBetween: 0,\n  defaultValue: null\n};\nconst applyRange = (value, { min, max }) =\u003e {\n  let result = value;\n  if (min != null) {\n    result = Math.max(min, result);\n  }\n  if (max != null) {\n    result = Math.min(max, result);\n  }\n  return result;\n};\nconst attrValueToInteger = (value, options = DEFAULT_INTEGER_OPTIONS) =\u003e {\n  const { defaultValue = null, itemSizeMultiplier = 1, itemSpaceBetween = 0, addExtraSpace = false } = options;\n  let intValue = defaultValue;\n  if (value !== null) {\n    const int = parseInt(value);\n    if (Number.isInteger(int)) {\n      intValue = applyRange(int, options);\n    }\n  }\n  if (intValue !== null) {\n    return intValue * itemSizeMultiplier + Math.max(intValue - 1, 0) * itemSpaceBetween + (addExtraSpace ? 0.5 * itemSizeMultiplier : 0);\n  }\n  return null;\n};\nconst attrValueToPixels = (value, options = DEFAULT_INTEGER_OPTIONS) =\u003e {\n  const int = attrValueToInteger(value, options);\n  return int === null ? \"unset\" : `${int}px`;\n};\nconst updateIntegerAttribute = ($element, attrName, attrValue, options = DEFAULT_INTEGER_OPTIONS) =\u003e {\n  const { defaultValue = null, itemSizeMultiplier: multiplier = 1 } = options;\n  let intValue = null;\n  if (typeof attrValue === \"string\") {\n    intValue = attrValueToInteger(attrValue, options);\n  } else if (typeof attrValue === \"number\") {\n    intValue = applyRange(attrValue, options) * multiplier;\n  } else {\n    intValue = defaultValue;\n  }\n  if (intValue === null) {\n    $element.removeAttribute(attrName);\n  } else {\n    $element.setAttribute(attrName, intValue.toFixed(0));\n  }\n};\nfunction getIntegerAttribute($element, attrName, defaultValue) {\n  return attrValueToInteger($element.getAttribute(attrName)) ?? defaultValue;\n}\nconst setClass = (elem, name, isSet) =\u003e {\n  isSet ? elem.classList.add(name) : elem.classList.remove(name);\n};\nconst hasClass = (elem, name) =\u003e {\n  return elem.classList.contains(name);\n};\nconst getCssVar = (element, variableName) =\u003e {\n  const result = getComputedStyle(element).getPropertyValue(variableName).trim();\n  return result === \"\" ? null : result;\n};\nconst cloneNode = (el, deep) =\u003e {\n  const root = el.getRootNode();\n  if (root !== document \u0026\u0026 Reflect.has(root, \"createElement\")) {\n    const cloned = root.createElement(el.tagName.toLowerCase());\n    for (const attr of el.getAttributeNames()) {\n      cloned.setAttribute(attr, el.getAttribute(attr));\n    }\n    {\n      for (let i = 0; i \u003c el.children.length; i++) {\n        const clonedChild = cloneNode(el.children[i], deep);\n        cloned.appendChild(clonedChild);\n      }\n    }\n    return cloned;\n  }\n  return el.cloneNode(deep);\n};\nconst shouldReduceMotion = () =\u003e window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\nconst isAttrEqual = (oldVal, newVal) =\u003e {\n  return oldVal === newVal || newVal === null \u0026\u0026 oldVal === \"false\" || newVal === \"\" \u0026\u0026 oldVal === \"true\";\n};\nconst getScrollableParents = (node) =\u003e {\n  const scrollableParents = [];\n  if (node == null) {\n    return scrollableParents;\n  }\n  let parent = node.parentElement;\n  while (parent != null) {\n    const computedStyle = getComputedStyle(parent);\n    if ((parent.scrollHeight \u003e parent.clientHeight || parent.scrollWidth \u003e parent.clientWidth) \u0026\u0026 (computedStyle.overflow === \"auto\" || computedStyle.overflow === \"scroll\" || computedStyle.overflowY === \"auto\" || computedStyle.overflowY === \"scroll\" || computedStyle.overflowX === \"auto\" || computedStyle.overflowX === \"scroll\")) {\n      scrollableParents.push(parent);\n    }\n    parent = parent.parentElement;\n  }\n  scrollableParents.push(document);\n  return scrollableParents;\n};\nclass NectaryElementBase extends HTMLElement {\n  static _isGlobal = false;\n  static get elementName() {\n    throw new Error(\n      `Class ${this.name} must implement static getter 'elementName'`\n    );\n  }\n  static get isGlobal() {\n    return this._isGlobal;\n  }\n  static set isGlobal(value) {\n    this._isGlobal = value;\n  }\n}\nconst version = \"5.0.1\";\nconst pkg = {\n  version\n};\nconst nectaryDefinitions = /* @__PURE__ */ new Map();\nlet nectaryRegistry = null;\nconst defineCustomElement = async (name, constructor) =\u003e {\n  nectaryDefinitions.set(name, constructor);\n  {\n    return;\n  }\n};\nclass NectaryElement extends NectaryElementBase {\n  attachShadow(options) {\n    return super.attachShadow({\n      mode: \"open\",\n      delegatesFocus: false,\n      customElements: nectaryRegistry,\n      ...options\n    });\n  }\n  version = pkg.version;\n  get focusable() {\n    return false;\n  }\n  #isDomConnected = false;\n  connectedCallback() {\n    this.#isDomConnected = true;\n  }\n  disconnectedCallback() {\n    this.#isDomConnected = false;\n  }\n  get isDomConnected() {\n    return this.#isDomConnected;\n  }\n}\nconst templateHTML$1c = '\u003cstyle\u003e:host{display:inline-block}#icon{display:block;font-weight:var(--sinch-comp-icon-font-weight);font-size:var(--sinch-global-size-icon, 24px);-webkit-font-smoothing:antialiased;line-height:1;white-space:nowrap;width:var(--sinch-global-size-icon,24px);height:var(--sinch-global-size-icon,24px);color:var(--sinch-global-color-icon,var(--sinch-sys-color-text-default));user-select:none;font-family:var(--sinch-comp-icon-font-family);font-feature-settings:var(--sinch-comp-icon-font-feature-settings)}#icon.zero-to-d{font-family:var(--sinch-comp-icon-font-family-zero-to-d)}#icon.e-to-o{font-family:var(--sinch-comp-icon-font-family-e-to-o)}#icon.p-to-z{font-family:var(--sinch-comp-icon-font-family-p-to-z)}\u003c/style\u003e\u003cspan id=\"icon\" role=\"img\"\u003e\u003c/span\u003e';\nconst template$1c = document.createElement(\"template\");\ntemplate$1c.innerHTML = templateHTML$1c;\nclass Icon extends NectaryElement {\n  #$icon;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$1c.content.cloneNode(true));\n    this.#$icon = shadowRoot.querySelector(\"#icon\");\n  }\n  static get observedAttributes() {\n    return [\"name\", \"icons-version\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"name\": {\n        this.#$icon.textContent = newVal;\n        updateAttribute(this.#$icon, \"aria-label\", newVal);\n        if (getAttribute(this, \"icons-version\", \"1\") !== \"1\") {\n          this._matchNameToFont();\n        }\n        break;\n      }\n      case \"icons-version\": {\n        if (getAttribute(this, \"icons-version\") !== \"1\") {\n          this._matchNameToFont();\n        }\n        break;\n      }\n    }\n  }\n  set name(value) {\n    updateAttribute(this, \"name\", value);\n  }\n  get name() {\n    return getAttribute(this, \"name\", \"\");\n  }\n  set iconsVersion(value) {\n    updateAttribute(this, \"icons-version\", value);\n  }\n  get iconsVersion() {\n    return getAttribute(this, \"icons-version\", \"1\");\n  }\n  _matchNameToFont() {\n    if (/^(fa-|(?!fa-))[0-9a-d]/.test(this.name)) {\n      return updateAttribute(this.#$icon, \"class\", \"zero-to-d\");\n    }\n    if (/^(fa-|(?!fa-))[e-o]/.test(this.name)) {\n      return updateAttribute(this.#$icon, \"class\", \"e-to-o\");\n    }\n    if (/^(fa-|(?!fa-))[p-z]/.test(this.name)) {\n      return updateAttribute(this.#$icon, \"class\", \"p-to-z\");\n    }\n  }\n}\ndefineCustomElement(\"sinch-icon\", Icon);\nconst typeValues$7 = [\"m\", \"s\", \"xs\", \"xxs\"];\nconst templateHTML$1b = '\u003cstyle\u003e:host{text-align:var(--sinch-comp-text-align);display:block;font:var(--sinch-comp-text-font);color:var(--sinch-global-color-text,var(--sinch-sys-color-text-default));--sinch-comp-text-font:var(--sinch-sys-font-body-m);--sinch-comp-text-align:unset}:host([inline]){display:inline}:host([type=\"s\"]){--sinch-comp-text-font:var(--sinch-sys-font-body-s)}:host([type=xs]){--sinch-comp-text-font:var(--sinch-sys-font-body-xs)}:host([type=xxs]){--sinch-comp-text-font:var(--sinch-sys-font-body-xxs)}:host([type=\"m\"][emphasized]){--sinch-comp-text-font:var(--sinch-sys-font-body-emphasize)}:host([type=\"s\"][emphasized]){--sinch-comp-text-font:var(--sinch-sys-font-body-emphasize-s)}:host([ellipsis]){overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--sinch-global-text-white-space:nowrap}\u003c/style\u003e\u003cslot\u003e\u003c/slot\u003e';\nconst template$1b = document.createElement(\"template\");\ntemplate$1b.innerHTML = templateHTML$1b;\nclass Text extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$1b.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.#updateRole();\n  }\n  static get observedAttributes() {\n    return [\"inline\", \"ellipsis\", \"emphasized\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"inline\": {\n        this.#updateRole();\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n      case \"ellipsis\":\n      case \"emphasized\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues$7, \"type\");\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues$7, \"type\", value);\n  }\n  set inline(isInline2) {\n    updateBooleanAttribute(this, \"inline\", isInline2);\n  }\n  get inline() {\n    return getBooleanAttribute(this, \"inline\");\n  }\n  set ellipsis(isEllipsis) {\n    updateBooleanAttribute(this, \"ellipsis\", isEllipsis);\n  }\n  get ellipsis() {\n    return getBooleanAttribute(this, \"ellipsis\");\n  }\n  set emphasized(isEmphasized) {\n    updateBooleanAttribute(this, \"emphasized\", isEmphasized);\n  }\n  get emphasized() {\n    return getBooleanAttribute(this, \"emphasized\");\n  }\n  #updateRole() {\n    this.setAttribute(\n      \"role\",\n      getBooleanAttribute(this, \"inline\") ? \"text\" : \"paragraph\"\n    );\n  }\n}\ndefineCustomElement(\"sinch-text\", Text);\nconst typeValues$6 = [\"xl\", \"l\", \"m\", \"s\", \"xs\"];\nconst templateHTML$1a = '\u003cstyle\u003e:host{display:block;--sinch-comp-title-font:var(--sinch-sys-font-desktop-title-m)}:host([type=xl]){--sinch-comp-title-font:var(--sinch-sys-font-desktop-title-xl)}:host([type=\"l\"]){--sinch-comp-title-font:var(--sinch-sys-font-desktop-title-l)}:host([type=\"m\"]){--sinch-comp-title-font:var(--sinch-sys-font-desktop-title-m)}:host([type=\"s\"]){--sinch-comp-title-font:var(--sinch-sys-font-desktop-title-s)}:host([type=xs]){--sinch-comp-title-font:var(--sinch-sys-font-desktop-title-xs)}#text{letter-spacing:-2%;color:var(--sinch-global-color-text,var(--sinch-sys-color-text-default));font:var(--sinch-comp-title-font)}:host([ellipsis]) #text{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\u003c/style\u003e\u003cspan id=\"text\"\u003e\u003c/span\u003e';\nconst template$1a = document.createElement(\"template\");\ntemplate$1a.innerHTML = templateHTML$1a;\nclass Title extends NectaryElement {\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$1a.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#text\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"heading\");\n  }\n  static get observedAttributes() {\n    return [\"text\", \"level\", \"ellipsis\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n      case \"level\": {\n        updateAttribute(this, \"aria-level\", newVal);\n        break;\n      }\n      case \"ellipsis\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          break;\n        }\n        updateBooleanAttribute(this, \"ellipsis\", isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues$6, \"type\", value);\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues$6, \"type\");\n  }\n  set ellipsis(isEllipsis) {\n    updateBooleanAttribute(this, \"ellipsis\", isEllipsis);\n  }\n  get ellipsis() {\n    return getBooleanAttribute(this, \"ellipsis\");\n  }\n}\ndefineCustomElement(\"sinch-title\", Title);\nconst statusValues$1 = [\"info\", \"success\", \"warn\", \"error\"];\nconst templateHTML$19 = '\u003cstyle\u003e:host{display:block;outline:0;min-height:48px}#wrapper{display:flex;flex-direction:column;position:relative;width:100%;height:100%;box-sizing:border-box;overflow:hidden;border-bottom:1px solid var(--sinch-comp-accordion-color-default-border-initial)}:host(:last-child)\u003e#wrapper{border-bottom:none}#button{all:initial;display:flex;position:relative;align-items:center;gap:8px;box-sizing:border-box;width:100%;height:48px;padding:0 4px 0 8px;cursor:pointer;--sinch-global-color-icon:var(--sinch-comp-accordion-color-default-icon-initial);--sinch-global-size-icon:var(--sinch-comp-accordion-size-icon)}#button\u003e*{pointer-events:none}#button:disabled{cursor:initial;--sinch-global-color-icon:var(--sinch-comp-accordion-color-disabled-icon-initial)}#button:focus-visible::after{content:\"\";position:absolute;inset:0;border:2px solid var(--sinch-comp-accordion-color-default-outline-focus);pointer-events:none}#status-wrapper{display:none;width:18px;height:24px;padding:8px 8px 8px 2px;box-sizing:border-box}#status{width:8px;height:8px;border-radius:50%}:host([status]:not([status=\"\"])) #status-wrapper{display:block}:host([status=success]) #status{background-color:var(--sinch-comp-accordion-color-default-status-success)}:host([status=warn]) #status{background-color:var(--sinch-comp-accordion-color-default-status-warning)}:host([status=error]) #status{background-color:var(--sinch-comp-accordion-color-default-status-error)}:host([status=info]) #status{background-color:var(--sinch-comp-accordion-color-default-status-info)}#title{flex:1;min-width:0;--sinch-comp-title-font:var(--sinch-comp-accordion-font-title);--sinch-global-color-text:var(--sinch-comp-accordion-color-default-title-initial)}#button:disabled\u003e#title{--sinch-global-color-text:var(--sinch-comp-accordion-color-disabled-title-initial)}#content{display:none;overflow-y:auto;flex-shrink:1;min-height:0;padding:0 8px 12px}#dropdown-icon{transform:rotate(0);will-change:transform;transition:transform .25s ease-in-out}#button[aria-expanded=true]\u003e#dropdown-icon{transform:rotate(180deg)}#button[aria-expanded=true]+#content{display:block}#optional{--sinch-comp-text-font:var(--sinch-comp-accordion-font-optional-text);--sinch-global-color-text:var(--sinch-comp-accordion-color-default-optional-text-initial)}#button:disabled\u003e#optional{--sinch-global-color-text:var(--sinch-comp-accordion-color-disabled-optional-text-initial)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cbutton id=\"button\" aria-controls=\"content\" aria-expanded=\"false\"\u003e\u003cdiv id=\"status-wrapper\"\u003e\u003cdiv id=\"status\"\u003e\u003c/div\u003e\u003c/div\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003csinch-title id=\"title\" level=\"3\" type=\"m\" ellipsis\u003e\u003c/sinch-title\u003e\u003csinch-text id=\"optional\" type=\"m\"\u003e\u003c/sinch-text\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-chevron-down\" id=\"dropdown-icon\"\u003e\u003c/sinch-icon\u003e\u003c/button\u003e\u003cdiv id=\"content\" role=\"region\" aria-labelledby=\"button\"\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$19 = document.createElement(\"template\");\ntemplate$19.innerHTML = templateHTML$19;\nclass AccordionItem extends NectaryElement {\n  #$button;\n  #$title;\n  #$optionalText;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: true });\n    shadowRoot.appendChild(template$19.content.cloneNode(true));\n    this.#$button = shadowRoot.querySelector(\"#button\");\n    this.#$title = shadowRoot.querySelector(\"#title\");\n    this.#$optionalText = shadowRoot.querySelector(\"#optional\");\n  }\n  connectedCallback() {\n  }\n  disconnectedCallback() {\n  }\n  static get observedAttributes() {\n    return [\"label\", \"disabled\", \"data-checked\", \"optionaltext\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"label\": {\n        updateAttribute(this.#$title, \"text\", newVal);\n        break;\n      }\n      case \"disabled\": {\n        this.#$button.disabled = isAttrTrue(newVal);\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n      case \"data-checked\": {\n        updateExplicitBooleanAttribute(\n          this.#$button,\n          \"aria-expanded\",\n          isAttrTrue(newVal)\n        );\n        break;\n      }\n      case \"optionaltext\": {\n        this.#$optionalText.textContent = newVal;\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set label(value) {\n    updateAttribute(this, \"label\", value);\n  }\n  get label() {\n    return getAttribute(this, \"label\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  get status() {\n    return getLiteralAttribute(this, statusValues$1, \"status\", null);\n  }\n  set status(value) {\n    updateLiteralAttribute(this, statusValues$1, \"status\", value);\n  }\n  set optionalText(value) {\n    updateAttribute(this, \"optionaltext\", value);\n  }\n  get optionalText() {\n    return getAttribute(this, \"optionaltext\");\n  }\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$button.focus();\n  }\n  blur() {\n    this.#$button.blur();\n  }\n}\ndefineCustomElement(\"sinch-accordion-item\", AccordionItem);\nconst CSV_DELIMITER = \",\";\nconst packCsv = (values) =\u003e {\n  return values.join(CSV_DELIMITER);\n};\nconst unpackCsv = (csv) =\u003e {\n  return csv.length === 0 ? [] : csv.split(CSV_DELIMITER);\n};\nconst updateCsv = (csv, value, setActive) =\u003e {\n  const values = unpackCsv(csv);\n  const index = values.indexOf(value);\n  if (setActive) {\n    if (index \u003c 0) {\n      values.push(value);\n    }\n  } else if (index \u003e= 0) {\n    values.splice(index, 1);\n  }\n  return packCsv(values);\n};\nconst getFirstCsvValue = (acc) =\u003e {\n  return acc.length === 0 ? null : unpackCsv(acc)[0];\n};\nconst getReactEventHandler = ($element, handlerName) =\u003e {\n  for (const key in $element) {\n    if (Object.hasOwn($element, key) \u0026\u0026 key.startsWith(\"__reactProps$\")) {\n      return $element[key][handlerName];\n    }\n  }\n  return null;\n};\nconst isTargetEqual = (e, $elem) =\u003e {\n  return e.target === $elem || e.originalTarget === $elem;\n};\nconst getTargetByAttribute = (e, attr) =\u003e {\n  if (e.target.hasAttribute(attr)) {\n    return e.target;\n  }\n  if (e.originalTarget?.hasAttribute(attr) === true) {\n    return e.originalTarget;\n  }\n  return null;\n};\nconst getTargetAttribute = (e, attr) =\u003e {\n  return e.target.getAttribute(attr) ?? e.originalTarget?.getAttribute(attr) ?? null;\n};\nconst getTargetIndexInParent = (e, parent) =\u003e {\n  const indexOf = Array.prototype.indexOf.call(parent.children, e.target);\n  if (indexOf \u003e= 0) {\n    return indexOf;\n  }\n  const origTgt = e.originalTarget;\n  if (origTgt != null) {\n    return Array.prototype.indexOf.call(parent.children, origTgt);\n  }\n  return -1;\n};\nconst templateHTML$18 = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:column;box-sizing:border-box;width:100%;height:100%}::slotted(sinch-accordion-item){flex-shrink:1}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$18 = document.createElement(\"template\");\ntemplate$18.innerHTML = templateHTML$18;\nclass Accordion extends NectaryElement {\n  #$slot;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$18.content.cloneNode(true));\n    this.#$slot = shadowRoot.querySelector(\"slot\");\n  }\n  static get observedAttributes() {\n    return [\"value\"];\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.#$slot.addEventListener(\"slotchange\", this.#onSlotChange, options);\n    this.#$slot.addEventListener(\"click\", this.#onOptionClick, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set multiple(isMultiple) {\n    updateBooleanAttribute(this, \"multiple\", isMultiple);\n  }\n  get multiple() {\n    return getBooleanAttribute(this, \"multiple\");\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"value\": {\n        this.#onValueChange(newVal ?? \"\");\n        break;\n      }\n    }\n  }\n  #onSlotChange = () =\u003e {\n    this.#onValueChange(this.value);\n  };\n  #onOptionClick = (e) =\u003e {\n    const target = getTargetByAttribute(e, \"value\");\n    if (target === null || getBooleanAttribute(target, \"disabled\")) {\n      return;\n    }\n    const isTargetInSlot = this.#$slot.assignedElements().includes(target);\n    if (!isTargetInSlot) {\n      return;\n    }\n    const value = getAttribute(target, \"value\", \"\");\n    const result = this.multiple ? updateCsv(this.value, value, !getBooleanAttribute(target, \"data-checked\")) : getBooleanAttribute(target, \"data-checked\") ? \"\" : value;\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail: result })\n    );\n  };\n  #onValueChange(csv) {\n    if (this.multiple) {\n      const values = unpackCsv(csv);\n      for (const $option of this.#$slot.assignedElements()) {\n        const isChecked = !getBooleanAttribute($option, \"disabled\") \u0026\u0026 values.includes(getAttribute($option, \"value\", \"\"));\n        updateBooleanAttribute($option, \"data-checked\", isChecked);\n      }\n    } else {\n      const value = getFirstCsvValue(csv);\n      for (const $option of this.#$slot.assignedElements()) {\n        const isChecked = !getBooleanAttribute($option, \"disabled\") \u0026\u0026 value === getAttribute($option, \"value\", \"\");\n        updateBooleanAttribute($option, \"data-checked\", isChecked);\n      }\n    }\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-accordion\", Accordion);\nconst templateHTML$17 = '\u003cstyle\u003e:host{display:block;cursor:pointer}:host([disabled]){cursor:initial}#wrapper{all:initial;display:flex;position:relative;box-sizing:border-box;height:40px;width:100%;padding:8px 16px;align-items:center;gap:10px;user-select:none;background-color:var(--sinch-comp-action-menu-color-default-background-initial);--sinch-global-color-text:var(--sinch-comp-action-menu-color-default-text-initial);--sinch-global-color-icon:var(--sinch-comp-action-menu-color-default-icon-initial);--sinch-global-size-icon:var(--sinch-comp-action-menu-size-icon)}:host([data-selected])\u003e#wrapper{background-color:var(--sinch-comp-action-menu-color-default-background-selected)}:host(:hover)\u003e#wrapper{background-color:var(--sinch-comp-action-menu-color-default-background-hover)}:host([disabled])\u003e#wrapper{pointer-events:none;background-color:var(--sinch-comp-action-menu-color-disabled-background-initial);--sinch-global-color-text:var(--sinch-comp-action-menu-color-disabled-text-initial);--sinch-global-color-icon:var(--sinch-comp-action-menu-color-disabled-icon-initial)}#content{flex:1;min-width:0;--sinch-comp-text-font:var(--sinch-comp-action-menu-font-option)}::slotted(*){margin-left:-6px}\u003c/style\u003e\u003cdiv id=\"wrapper\" inert\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003csinch-text id=\"content\" type=\"m\" ellipsis\u003e\u003c/sinch-text\u003e\u003c/div\u003e';\nconst template$17 = document.createElement(\"template\");\ntemplate$17.innerHTML = templateHTML$17;\nclass ActionMenuOption extends NectaryElement {\n  #$content;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$17.content.cloneNode(true));\n    this.#$content = shadowRoot.querySelector(\"#content\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.setAttribute(\"role\", \"option\");\n    this.addEventListener(\"mousedown\", this.#onMouseDown, { signal });\n    this.addEventListener(\"-click\", this.#onClickReactHandler, { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"text\", \"disabled\", \"data-selected\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$content.textContent = newVal;\n        break;\n      }\n      case \"disabled\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n      case \"data-selected\": {\n        const isDisabled = getBooleanAttribute(this, \"disabled\");\n        updateExplicitBooleanAttribute(this, \"aria-selected\", isAttrTrue(newVal) \u0026\u0026 !isDisabled);\n        break;\n      }\n    }\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  click() {\n    this.#dispatchClickEvent();\n  }\n  #onMouseDown = () =\u003e {\n    this.#dispatchClickEvent();\n  };\n  #dispatchClickEvent() {\n    this.dispatchEvent(\n      new CustomEvent(\"-click\")\n    );\n  }\n  #onClickReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-click\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-action-menu-option\", ActionMenuOption);\nconst isSinchActionMenuOption = (el) =\u003e {\n  return el instanceof Element \u0026\u0026 el.tagName === \"SINCH-ACTION-MENU-OPTION\";\n};\nconst contextNameToEventMap = {\n  keydown: \"-keydown\",\n  visibility: \"-visibility\",\n  size: \"-size\"\n};\nconst shouldPersistContextValue = {\n  keydown: false,\n  visibility: true,\n  size: true\n};\nclass Context {\n  #$root;\n  #listeners = /* @__PURE__ */ new Set();\n  #name;\n  #isListening = false;\n  #lastContextValue = null;\n  constructor($element, name) {\n    this.#$root = $element;\n    this.#name = name;\n  }\n  listen(signal) {\n    if (this.#isListening) {\n      return;\n    }\n    this.#$root.addEventListener(`-context-connect-${this.#name}`, this.#onListenerConnect, { signal });\n    this.#$root.addEventListener(`-context-disconnect-${this.#name}`, this.#onListenerDisconnect, { signal });\n    this.#isListening = true;\n    signal.addEventListener(\"abort\", () =\u003e {\n      this.#listeners.clear();\n      this.#isListening = false;\n      this.#lastContextValue = null;\n    }, { once: true });\n  }\n  dispatch(contextValue) {\n    for (const el of this.#listeners) {\n      el.dispatchEvent(\n        new CustomEvent(contextNameToEventMap[this.#name], { detail: contextValue })\n      );\n    }\n    if (shouldPersistContextValue[this.#name]) {\n      this.#lastContextValue = contextValue;\n    }\n  }\n  #onListenerConnect = (e) =\u003e {\n    e.stopPropagation();\n    this.#listeners.add(e.detail);\n    if (this.#lastContextValue !== null) {\n      e.detail.dispatchEvent(\n        new CustomEvent(contextNameToEventMap[this.#name], { detail: this.#lastContextValue })\n      );\n    }\n  };\n  #onListenerDisconnect = (e) =\u003e {\n    e.stopPropagation();\n    this.#listeners.delete(e.detail);\n  };\n}\nconst subscribeContext = ($el, name, cb, signal) =\u003e {\n  requestAnimationFrame(() =\u003e {\n    $el.dispatchEvent(\n      new CustomEvent(`-context-connect-${name}`, { bubbles: true, composed: true, detail: $el })\n    );\n  });\n  $el.addEventListener(contextNameToEventMap[name], cb, { signal });\n  signal.addEventListener(\"abort\", () =\u003e {\n    $el.dispatchEvent(\n      new CustomEvent(`-context-disconnect-${name}`, { bubbles: true, composed: true, detail: $el })\n    );\n  }, { once: true });\n};\nconst templateHTML$16 = '\u003cstyle\u003e:host{display:block;outline:0}#listbox{overflow-y:auto}\u003c/style\u003e\u003cdiv id=\"listbox\" role=\"presentation\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst ITEM_HEIGHT$2 = 40;\nconst template$16 = document.createElement(\"template\");\ntemplate$16.innerHTML = templateHTML$16;\nclass ActionMenu extends NectaryElement {\n  #$optionSlot;\n  #$listbox;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$16.content.cloneNode(true));\n    this.#$optionSlot = shadowRoot.querySelector(\"slot\");\n    this.#$listbox = shadowRoot.querySelector(\"#listbox\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.setAttribute(\"role\", \"listbox\");\n    this.setAttribute(\"tabindex\", \"0\");\n    this.addEventListener(\"keydown\", this.#onListboxKeyDown, { signal });\n    this.addEventListener(\"blur\", this.#onListboxBlur, { signal });\n    this.#$listbox.addEventListener(\"click\", this.#onListboxClick, { signal });\n    subscribeContext(this, \"keydown\", this.#onContextKeyDown, signal);\n    subscribeContext(this, \"visibility\", this.#onContextVisibility, signal);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"rows\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"rows\": {\n        this.#$listbox.style.maxHeight = attrValueToPixels(newVal, { min: 1, itemSizeMultiplier: ITEM_HEIGHT$2 });\n        break;\n      }\n    }\n  }\n  set rows(value) {\n    updateIntegerAttribute(this, \"rows\", value);\n  }\n  get rows() {\n    return getIntegerAttribute(this, \"rows\", null);\n  }\n  #onListboxBlur = () =\u003e {\n    this.#selectOption(null);\n  };\n  #onListboxClick = (e) =\u003e {\n    this.focus();\n    if (isSinchActionMenuOption(e.target)) {\n      this.#selectOption(e.target);\n    }\n  };\n  #onListboxKeyDown = (e) =\u003e {\n    this.#handleKeydown(e);\n  };\n  #onContextKeyDown = (e) =\u003e {\n    this.#handleKeydown(e.detail);\n  };\n  #onContextVisibility = (e) =\u003e {\n    if (!e.detail) {\n      this.#selectOption(null);\n      this.#$listbox.scrollTo({ top: 0, behavior: \"auto\" });\n    } else {\n      const activeElement = this.#getDeepActiveElement();\n      const isTextInput = activeElement !== null \u0026\u0026 activeElement.tagName === \"INPUT\";\n      if (!isTextInput) {\n        this.focus();\n        this.#selectOption(this.#getFirstOption());\n      }\n    }\n  };\n  #handleKeydown(e) {\n    switch (e.code) {\n      case \"Enter\":\n      case \"Space\": {\n        const $opt = this.#findSelectedOption();\n        if ($opt !== null) {\n          e.preventDefault();\n          $opt.click();\n        }\n        break;\n      }\n      case \"ArrowUp\": {\n        e.preventDefault();\n        this.#selectOption(this.#getPrevOption());\n        break;\n      }\n      case \"ArrowDown\": {\n        e.preventDefault();\n        this.#selectOption(this.#getNextOption());\n        break;\n      }\n    }\n  }\n  #getFirstOption() {\n    const $options = this.#getOptionElements();\n    for (let i = 0; i \u003c $options.length; i++) {\n      const el = $options[i];\n      if (!getBooleanAttribute(el, \"disabled\")) {\n        return el;\n      }\n    }\n    return null;\n  }\n  #getLastOption() {\n    const $options = this.#getOptionElements();\n    for (let i = $options.length - 1; i \u003e= 0; i--) {\n      const el = $options[i];\n      if (!getBooleanAttribute(el, \"disabled\")) {\n        return el;\n      }\n    }\n    return null;\n  }\n  #getNextOption() {\n    const index = this.#getSelectedOptionIndex();\n    if (index !== null) {\n      const $options = this.#getOptionElements();\n      for (let i = 1; i \u003c= $options.length; i++) {\n        const el = $options[(i + index) % $options.length];\n        if (!getBooleanAttribute(el, \"disabled\")) {\n          return el;\n        }\n      }\n    }\n    return this.#getFirstOption();\n  }\n  #getPrevOption() {\n    const index = this.#getSelectedOptionIndex();\n    if (index !== null) {\n      const $options = this.#getOptionElements();\n      for (let i = 1; i \u003c= $options.length; i++) {\n        const el = $options[(index - i + $options.length) % $options.length];\n        if (!getBooleanAttribute(el, \"disabled\")) {\n          return el;\n        }\n      }\n    }\n    return this.#getLastOption();\n  }\n  #getDeepActiveElement() {\n    let activeElement = this.ownerDocument.activeElement;\n    while (activeElement !== null \u0026\u0026 activeElement.shadowRoot !== null \u0026\u0026 activeElement.shadowRoot.activeElement !== null) {\n      activeElement = activeElement.shadowRoot.activeElement;\n    }\n    return activeElement;\n  }\n  #selectOption($option) {\n    const hasRows = this.hasAttribute(\"rows\");\n    for (const $op of this.#getOptionElements()) {\n      const isSelected = $op === $option;\n      updateBooleanAttribute($op, \"data-selected\", isSelected);\n      if (isSelected \u0026\u0026 Boolean(hasRows)) {\n        $op.scrollIntoView?.({ block: \"nearest\" });\n      }\n    }\n    if ($option !== null) {\n      $option.focus();\n      $option.onmouseover = (e) =\u003e {\n        if (e.defaultPrevented) {\n          return;\n        }\n        this.#selectOption(null);\n      };\n    }\n  }\n  #getOptionElements() {\n    return this.#$optionSlot.assignedElements();\n  }\n  #getSelectedOptionIndex() {\n    const elements = this.#getOptionElements();\n    for (let i = 0; i \u003c elements.length; i++) {\n      const el = elements[i];\n      if (!getBooleanAttribute(el, \"disabled\") \u0026\u0026 getBooleanAttribute(el, \"data-selected\")) {\n        return i;\n      }\n    }\n    return null;\n  }\n  #findSelectedOption() {\n    const elements = this.#getOptionElements();\n    for (const el of elements) {\n      if (getBooleanAttribute(el, \"data-selected\")) {\n        return el;\n      }\n    }\n    return null;\n  }\n  get focusable() {\n    return true;\n  }\n}\ndefineCustomElement(\"sinch-action-menu\", ActionMenu);\nconst vs16RegExp = /\\uFE0F/g;\nconst zeroWidthJoiner = String.fromCharCode(8205);\nconst removeVS16s = (rawEmoji) =\u003e rawEmoji.indexOf(zeroWidthJoiner) \u003c 0 ? rawEmoji.replace(vs16RegExp, \"\") : rawEmoji;\nfunction toCodePoints(unicodeSurrogates) {\n  const points = [];\n  let char = 0;\n  let previous = 0;\n  let i = 0;\n  while (i \u003c unicodeSurrogates.length) {\n    char = unicodeSurrogates.charCodeAt(i++);\n    if (previous !== 0) {\n      points.push((65536 + (previous - 55296 \u003c\u003c 10) + (char - 56320)).toString(16));\n      previous = 0;\n    } else if (char \u003e 55296 \u0026\u0026 char \u003c= 56319) {\n      previous = char;\n    } else {\n      points.push(char.toString(16));\n    }\n  }\n  return points;\n}\nconst BASE_URL_ATTR = \"data-emoji-base-url\";\nconst setEmojiBaseUrl = (emojiEl, baseUrl) =\u003e {\n  updateAttribute(emojiEl, BASE_URL_ATTR, baseUrl);\n};\nconst getEmojiBaseUrl = (root) =\u003e {\n  let baseUrl = getAttribute(root, BASE_URL_ATTR);\n  if (baseUrl !== null) {\n    return baseUrl;\n  }\n  baseUrl = getCssVar(root, \"--sinch-emoji-src-url\");\n  if (baseUrl !== null) {\n    return baseUrl.replaceAll('\"', \"\").trim();\n  }\n  return null;\n};\nconst getEmojiUrl = (baseUrl, char) =\u003e {\n  if (char === null || char.length === 0 || baseUrl === null) {\n    return \"\";\n  }\n  let codepoints = toCodePoints(removeVS16s(char)).join(\"-\");\n  if (codepoints === \"1f441-fe0f-200d-1f5e8-fe0f\") {\n    codepoints = \"1f441-200d-1f5e8\";\n  }\n  return baseUrl.replace(\"%s\", codepoints);\n};\nconst templateHTML$15 = '\u003cstyle\u003e:host{display:contents;--sinch-comp-emoji-vertical-align:initial}#image{vertical-align:var(--sinch-comp-emoji-vertical-align);pointer-events:none;width:var(--sinch-global-size-icon,48px);height:var(--sinch-global-size-icon,48px)}\u003c/style\u003e\u003cimg id=\"image\" src=\"\" alt=\"\" loading=\"lazy\"\u003e';\nconst template$15 = document.createElement(\"template\");\ntemplate$15.innerHTML = templateHTML$15;\nclass Emoji extends NectaryElement {\n  #$img;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$15.content.cloneNode(true));\n    this.#$img = shadowRoot.querySelector(\"#image\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#updateChar();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n  }\n  static get observedAttributes() {\n    return [\"char\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"char\": {\n        this.#$img.alt = newVal ?? \"\";\n        this.#updateChar();\n        break;\n      }\n    }\n  }\n  set char(value) {\n    updateAttribute(this, \"char\", value);\n  }\n  get char() {\n    return getAttribute(this, \"char\", \"\");\n  }\n  #updateChar() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    this.#$img.src = getEmojiUrl(getEmojiBaseUrl(this), this.char);\n  }\n}\ndefineCustomElement(\"sinch-emoji\", Emoji);\nconst templateHTML$14 = '\u003cstyle\u003e:host{display:inline}#content{font:var(--sinch-comp-code-tag-font-text);font-size:inherit;line-height:inherit;color:var(--sinch-comp-code-tag-color-default-text-initial);border:1px solid var(--sinch-comp-code-tag-color-default-border-initial);background-color:var(--sinch-comp-code-tag-color-default-background-initial);padding:0 .25em;border-radius:var(--sinch-comp-code-tag-shape-radius);white-space:var(--sinch-global-text-white-space,normal)}\u003c/style\u003e\u003cspan id=\"content\"\u003e\u003c/span\u003e';\nconst template$14 = document.createElement(\"template\");\ntemplate$14.innerHTML = templateHTML$14;\nclass CodeTag extends NectaryElement {\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$14.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#content\");\n  }\n  static get observedAttributes() {\n    return [\"text\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n    }\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n}\ndefineCustomElement(\"sinch-code-tag\", CodeTag);\nconst templateHTML$13 = '\u003cstyle\u003e:host{display:inline}a{font:var(--sinch-comp-link-default-font-initial);font-size:inherit;line-height:inherit;text-decoration:var(--sinch-comp-link-default-text-decoration-initial);color:var(--sinch-comp-link-color-default-text-initial);border-radius:.5em;white-space:nowrap;--sinch-global-color-icon:var(--sinch-comp-link-color-default-icon-initial)}a:hover{text-decoration:var(--sinch-comp-link-default-text-decoration-hover);color:var(--sinch-comp-link-color-default-text-hover);--sinch-global-color-icon:var(--sinch-comp-link-color-default-icon-hover)}a:focus-visible{outline:2px solid var(--sinch-comp-link-color-default-outline-focus);outline-offset:2px}:host([standalone]){display:block}:host([standalone]) a{display:block;font:var(--sinch-comp-link-standalone-font-initial);font-size:inherit;line-height:inherit;text-decoration:none;width:fit-content}#external-icon,#standalone-icon{display:none;height:1em}#icon-prefix{display:none;margin-left:-.25em}:host([external]:not([standalone])) #external-icon{display:inline-block;margin-left:.25em;vertical-align:-.2em;--sinch-global-size-icon:1em}:host([standalone][external]) #external-icon{display:inline-block;vertical-align:-.4em;--sinch-global-size-icon:1.5em}:host([standalone]) #icon-prefix{display:inline}:host([standalone]:not([external])) #standalone-icon{display:inline-block;vertical-align:-.4em;--sinch-global-size-icon:1.5em}:host([disabled]) a{color:var(--sinch-comp-link-color-disabled-text-initial);pointer-events:none;cursor:initial;text-decoration:var(--sinch-comp-link-default-text-decoration-disabled);--sinch-global-color-icon:var(--sinch-comp-link-color-disabled-icon-initial)}#content{white-space:var(--sinch-global-text-white-space,normal)}\u003c/style\u003e\u003ca referrerpolicy=\"no-referer\"\u003e\u003cspan id=\"content\"\u003e\u003c/span\u003e \u003cspan id=\"icon-prefix\"\u003e\u0026nbsp;\u003c/span\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-arrow-up-right\" id=\"external-icon\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-arrow-right\" id=\"standalone-icon\"\u003e\u003c/sinch-icon\u003e\u003c/a\u003e';\nconst template$13 = document.createElement(\"template\");\ntemplate$13.innerHTML = templateHTML$13;\nclass Link extends NectaryElement {\n  #$anchor;\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$13.content.cloneNode(true));\n    this.#$anchor = shadowRoot.querySelector(\"a\");\n    this.#$text = shadowRoot.querySelector(\"#content\");\n  }\n  connectedCallback() {\n    this.#$anchor.addEventListener(\"click\", this.#onAnchorClick);\n    this.#$anchor.addEventListener(\"focus\", this.#onAnchorFocus);\n    this.#$anchor.addEventListener(\"blur\", this.#onAnchorBlur);\n    this.addEventListener(\"-click\", this.#onClickReactHandler);\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler);\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler);\n  }\n  disconnectedCallback() {\n    this.#$anchor.removeEventListener(\"click\", this.#onAnchorClick);\n    this.#$anchor.removeEventListener(\"focus\", this.#onAnchorFocus);\n    this.#$anchor.removeEventListener(\"blur\", this.#onAnchorBlur);\n    this.removeEventListener(\"-click\", this.#onClickReactHandler);\n    this.removeEventListener(\"-focus\", this.#onFocusReactHandler);\n    this.removeEventListener(\"-blur\", this.#onBlurReactHandler);\n  }\n  static get observedAttributes() {\n    return [\n      \"text\",\n      \"href\",\n      \"use-history\",\n      \"external\",\n      \"standalone\",\n      \"disabled\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n      case \"href\": {\n        updateAttribute(this.#$anchor, \"href\", newVal);\n        break;\n      }\n      case \"use-history\": {\n        const shouldUseHistory = isAttrTrue(newVal);\n        if (shouldUseHistory) {\n          updateBooleanAttribute(this, \"preventdefault\", true);\n        }\n        updateBooleanAttribute(this, name, shouldUseHistory);\n        break;\n      }\n      case \"standalone\":\n      case \"disabled\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n      case \"external\": {\n        const isExternal = isAttrTrue(newVal);\n        updateAttribute(this.#$anchor, \"target\", isExternal ? \"_blank\" : null);\n        updateBooleanAttribute(this, name, isExternal);\n        break;\n      }\n    }\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get href() {\n    return getAttribute(this, \"href\", \"\");\n  }\n  set href(value) {\n    updateAttribute(this, \"href\", value);\n  }\n  set \"use-history\"(value) {\n    updateBooleanAttribute(this, \"use-history\", value);\n  }\n  get \"use-history\"() {\n    return getBooleanAttribute(this, \"use-history\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set external(isExternal) {\n    updateBooleanAttribute(this, \"external\", isExternal);\n  }\n  get external() {\n    return getBooleanAttribute(this, \"external\");\n  }\n  set standalone(isstandalone) {\n    updateBooleanAttribute(this, \"standalone\", isstandalone);\n  }\n  get standalone() {\n    return getBooleanAttribute(this, \"standalone\");\n  }\n  set preventDefault(isPrevented) {\n    updateBooleanAttribute(this, \"preventdefault\", isPrevented);\n  }\n  get preventDefault() {\n    return getBooleanAttribute(this, \"preventdefault\");\n  }\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$anchor.focus();\n  }\n  blur() {\n    this.#$anchor.blur();\n  }\n  #onAnchorClick = (e) =\u003e {\n    if (this.preventDefault) {\n      e.preventDefault();\n      if (this[\"use-history\"]) {\n        history.pushState({}, \"\", this.href);\n      }\n    }\n    this.dispatchEvent(\n      new CustomEvent(\"-click\")\n    );\n  };\n  #onAnchorFocus = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onAnchorBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n  #onClickReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-click\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-link\", Link);\nconst regLinebreak = /(?:\u003cbr\u003e\\n|\u003cbr\u003e|\\n)/;\nconst regParagraph = /\\n{2,}/;\nconst regEm3Star = new RegExp(\"(?\u003c!\\\\\\\\)\\\\*\\\\*\\\\*(?\u003cem3\u003e.+?)(?\u003c!\\\\\\\\)\\\\*\\\\*\\\\*\");\nconst regEm2Star = new RegExp(\"(?\u003c!\\\\\\\\)\\\\*\\\\*(?\u003cem2\u003e.+?)(?\u003c!\\\\\\\\)\\\\*\\\\*\");\nconst regEm1Star = new RegExp(\"(?\u003c!\\\\\\\\)\\\\*(?\u003cem1\u003e.+?)(?\u003c!\\\\\\\\)\\\\*\");\nconst regEm3Underscore = new RegExp(\"(?\u003c!\\\\\\\\)___(?\u003cem3\u003e.+?)(?\u003c!\\\\\\\\)___\");\nconst regEm2Underscore = new RegExp(\"(?\u003c!\\\\\\\\)__(?\u003cem2\u003e.+?)(?\u003c!\\\\\\\\)__\");\nconst regEm1Underscore = new RegExp(\"(?\u003c!\\\\\\\\)_(?\u003cem1\u003e.+?)(?\u003c!\\\\\\\\)_\");\nconst regCodeTag = new RegExp(\"(?\u003c!\\\\\\\\)`(?\u003ccode\u003e.+?)(?\u003c!\\\\\\\\)`\");\nconst regStrikethrough = new RegExp(\"(?\u003c!\\\\\\\\)~~(?\u003cstrike\u003e.+?)(?\u003c!\\\\\\\\)~~\");\nconst regLink = new RegExp(\"(?\u003c!\\\\\\\\)!?\\\\[(?\u003clinktext\u003e[^\\\\]]*?)\\\\]\\\\((?\u003clinkhref\u003e[^)]+?)\\\\)(\\\\{(?\u003clinkattrs\u003e[^)]+?)\\\\})?\");\nconst regEmoji = new RegExp(\"(?\u003cemoji\u003e(?![0-9*#])\\\\p{Emoji})\", \"u\");\nconst regUList = /^(?\u003cindent\u003e[\\t ]*?)[*+-][\\t ]+(?\u003cultext\u003e.*?)[\\t ]*?$/;\nconst regOList = /^(?\u003cindent\u003e[\\t ]*?)\\d+\\.[\\t ]+(?\u003coltext\u003e.*?)[\\t ]*?$/;\nconst regEscapedChars = /\\\\(?\u003cescaped\u003e[\\\\\\*_\\[\\]`~])/;\nconst allRegs = [\n  regEscapedChars,\n  regCodeTag,\n  regLink,\n  regEm3Star,\n  regEm2Star,\n  regEm1Star,\n  regEm3Underscore,\n  regEm2Underscore,\n  regEm1Underscore,\n  regStrikethrough,\n  regEmoji\n];\nconst isEmojiString = (data2) =\u003e regEmoji.test(data2);\nconst excludeRegs = (regs, ...excluding) =\u003e regs.filter((r) =\u003e !excluding.includes(r));\nconst matchClosest = (regs, line) =\u003e {\n  return regs.map((reg) =\u003e reg.exec(line)).reduce((res, match) =\u003e {\n    if (match === null) {\n      return res;\n    }\n    if (res === null || res.index \u003e match.index) {\n      return match;\n    }\n    return res;\n  }, null);\n};\nconst INITIAL_CONTEXT = {\n  isBold: false,\n  isItalic: false,\n  isStrikethrough: false\n};\nconst createLineParser = (visitor) =\u003e function parseLine(regs, md, context = INITIAL_CONTEXT) {\n  let line = md;\n  let match = null;\n  while ((match = matchClosest(regs, line)) !== null) {\n    const groups = match.groups;\n    const matchedStr = match[0];\n    if (match.index \u003e 0) {\n      visitor.inline(line.substring(0, match.index), context);\n    }\n    line = line.substring(match.index + matchedStr.length);\n    if (groups?.escaped != null) {\n      visitor.escaped(groups.escaped);\n      continue;\n    }\n    if (groups?.linkhref != null) {\n      visitor.link(groups.linktext, groups.linkhref, groups.linkattrs?.split(\" \"));\n    }\n    if (groups?.code != null) {\n      visitor.codetag(groups.code);\n    }\n    if (groups?.emoji != null) {\n      visitor.emoji(groups.emoji);\n    }\n    if (groups?.em1 != null) {\n      parseLine(\n        excludeRegs(regs, regEm1Star, regEm1Underscore),\n        groups.em1,\n        { ...context, isItalic: true }\n      );\n    }\n    if (groups?.em2 != null) {\n      parseLine(\n        excludeRegs(regs, regEm2Star, regEm2Underscore),\n        groups.em2,\n        { ...context, isBold: true }\n      );\n    }\n    if (groups?.em3 != null) {\n      parseLine(\n        excludeRegs(regs, regEm3Star, regEm3Underscore, regEm2Star, regEm2Underscore, regEm1Star, regEm1Underscore),\n        groups.em3,\n        { ...context, isBold: true, isItalic: true }\n      );\n    }\n    if (groups?.strike != null) {\n      parseLine(\n        excludeRegs(regs, regStrikethrough),\n        groups.strike,\n        { ...context, isStrikethrough: true }\n      );\n    }\n  }\n  if (line.length \u003e 0) {\n    visitor.inline(line, context);\n  }\n};\nconst createBlockParser = (visitor) =\u003e {\n  const parseLine = createLineParser(visitor);\n  const listRegs = [regUList, regOList];\n  const getListItemText = (match) =\u003e {\n    return match.groups.ultext ?? match.groups.oltext;\n  };\n  const BLOCK_MODE_PARAGRAPH = 1;\n  const BLOCK_MODE_ULIST = 2;\n  const BLOCK_MODE_OLIST = 2;\n  return function parseBlock(lines) {\n    let mode = 0;\n    for (let i = 0; i \u003c lines.length; ++i) {\n      const listMatch = matchClosest(listRegs, lines[i]);\n      const isListLine = listMatch !== null;\n      if (isListLine) {\n        const groups = listMatch.groups;\n        const isOrderedList = groups.oltext != null;\n        mode = isOrderedList ? BLOCK_MODE_OLIST : BLOCK_MODE_ULIST;\n        visitor.list(isOrderedList);\n        const listItemInitialIndent = groups.indent;\n        let listItemLines = [getListItemText(listMatch)];\n        visitor.listItem();\n        for (++i; i \u003c lines.length; ++i) {\n          const listItemMatch = isOrderedList ? regOList.exec(lines[i]) : regUList.exec(lines[i]);\n          if (listItemMatch !== null \u0026\u0026 listItemMatch.groups.indent === listItemInitialIndent) {\n            parseBlock(listItemLines);\n            listItemLines = [getListItemText(listItemMatch)];\n            visitor.listItem();\n          } else {\n            listItemLines.push(lines[i]);\n          }\n        }\n        parseBlock(listItemLines);\n        visitor.endList();\n        mode = 0;\n      } else {\n        if (mode === BLOCK_MODE_PARAGRAPH) {\n          visitor.linebreak();\n        }\n        if (mode !== BLOCK_MODE_PARAGRAPH) {\n          mode = BLOCK_MODE_PARAGRAPH;\n          visitor.paragraph();\n        }\n        parseLine(allRegs, lines[i]);\n      }\n    }\n  };\n};\nconst parseMarkdown = (md, visitor) =\u003e {\n  const parseBlock = createBlockParser(visitor);\n  for (const block of md.trim().split(regParagraph)) {\n    parseBlock(block.trim().split(regLinebreak));\n  }\n  return visitor.end();\n};\nconst sizeValues$1 = [\"m\", \"s\", \"xs\", \"xxs\"];\nconst createParseVisitor$1 = (doc) =\u003e {\n  let emojiBaseUrl = null;\n  return {\n    updateEmojiBaseUrl(url) {\n      emojiBaseUrl = url;\n    },\n    createVisitor() {\n      const $root = doc.createDocumentFragment();\n      let $p = null;\n      let $li = null;\n      const $lists = [];\n      return {\n        // Add new escaped method to handle escaped characters\n        escaped(char) {\n          const $text = doc.createTextNode(char);\n          if ($p != null) {\n            $p.appendChild($text);\n          } else {\n            this.paragraph();\n            $p.appendChild($text);\n          }\n        },\n        emoji(emojiChar) {\n          const $emoji = doc.createElement(\"sinch-emoji\");\n          setEmojiBaseUrl($emoji, emojiBaseUrl);\n          $emoji.setAttribute(\"char\", emojiChar);\n          $emoji.className = \"emoji\";\n          $p.appendChild($emoji);\n        },\n        codetag(text) {\n          const $codeTag = doc.createElement(\"sinch-code-tag\");\n          $codeTag.text = text;\n          $p.appendChild($codeTag);\n        },\n        inline(text, { isBold, isItalic, isStrikethrough }) {\n          const $inline = doc.createElement(\"SPAN\");\n          $inline.append(doc.createTextNode(text));\n          if (isItalic === true) {\n            $inline.classList.add(\"em1\");\n          }\n          if (isBold === true) {\n            $inline.classList.add(\"em2\");\n          }\n          if (isStrikethrough === true) {\n            $inline.classList.add(\"strikethrough\");\n          }\n          $p.appendChild($inline);\n        },\n        linebreak() {\n          const $br = doc.createElement(\"br\");\n          $p.appendChild($br);\n        },\n        link(text, href, attributes) {\n          const $link = doc.createElement(\"sinch-link\");\n          $link.text = text;\n          $link.href = href;\n          if (attributes != null) {\n            attributes.forEach((attr) =\u003e {\n              if (attr.startsWith(\"#\")) {\n                $link.id = attr.slice(1);\n              }\n              switch (attr) {\n                case \"prevent-default\":\n                  $link.preventDefault = true;\n                  break;\n                case \"use-history\":\n                  $link.useHistory = true;\n                  break;\n                case \"external\":\n                  $link.external = true;\n                  break;\n              }\n            });\n          }\n          $p.appendChild($link);\n        },\n        list(isOrdered) {\n          const $list = doc.createElement(isOrdered ? \"ol\" : \"ul\");\n          $list.classList.add(isOrdered ? \"ol\" : \"ul\");\n          if ($li !== null) {\n            $li.appendChild($list);\n            $li = null;\n          } else {\n            $root.appendChild($list);\n          }\n          $lists.push($list);\n        },\n        endList() {\n          $p = null;\n          $li = null;\n          $lists.length = $lists.length - 1;\n          if ($lists.length \u003e 0) {\n            $li = $lists.at(-1).lastChild;\n          }\n        },\n        listItem() {\n          $p = null;\n          $li = doc.createElement(\"li\");\n          $li.classList.add(\"li\");\n          $lists.at(-1).appendChild($li);\n        },\n        paragraph() {\n          $p = doc.createElement(\"p\");\n          $p.classList.add(\"p\");\n          if ($li !== null) {\n            $li.appendChild($p);\n          } else {\n            $root.appendChild($p);\n          }\n        },\n        end() {\n          return $root;\n        }\n      };\n    }\n  };\n};\nconst templateHTML$12 = '\u003cstyle\u003e:host{display:block;--sinch-comp-rich-text-font:var(--sinch-sys-font-body-m)}:host([size=\"s\"]){--sinch-comp-rich-text-font:var(--sinch-sys-font-body-s)}:host([size=xs]){--sinch-comp-rich-text-font:var(--sinch-sys-font-body-xs)}:host([size=xxs]){--sinch-comp-rich-text-font:var(--sinch-sys-font-body-xxs)}#wrapper{font:var(--sinch-comp-rich-text-font);color:var(--sinch-global-color-text,var(--sinch-sys-color-text-default))}.em1{font-style:italic}.em2{font-weight:var(--sinch-ref-typography-font-weight-700)}.strikethrough{text-decoration:line-through}.link{font:var(--sinch-comp-link-default-font-initial);color:var(--sinch-comp-link-color-default-text-initial);text-decoration:underline}.link:hover{color:var(--sinch-comp-link-color-default-text-hover);text-decoration:none}.code{font:var(--sinch-comp-code-tag-font-text);line-height:inherit;font-size:inherit;border:1px solid var(--sinch-comp-code-tag-color-default-border-initial);background-color:var(--sinch-comp-code-tag-color-default-background-initial);padding:0 .25em;border-radius:var(--sinch-comp-code-tag-shape-radius)}.emoji{--sinch-global-size-icon:1em;--sinch-comp-emoji-vertical-align:-0.2em}.ol,.p,.ul{margin:0}.ol,.ul{padding-left:1.5em}.ol+.p,.p+.ol,.p+.p,.p+.ul,.ul+.p{margin-top:.5em}.li\u003e.p+.ol,.li\u003e.p+.ul{margin-top:0}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003c/div\u003e';\nconst template$12 = document.createElement(\"template\");\ntemplate$12.innerHTML = templateHTML$12;\nclass RichText extends NectaryElement {\n  #wrapper;\n  #parseVisitor;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    if (typeof shadowRoot.createElement !== \"function\") {\n      Object.defineProperty(shadowRoot, \"createElement\", {\n        value: document.createElement.bind(shadowRoot.ownerDocument)\n      });\n    }\n    Object.defineProperty(shadowRoot, \"createTextNode\", {\n      value: document.createTextNode.bind(shadowRoot.ownerDocument)\n    });\n    Object.defineProperty(shadowRoot, \"createDocumentFragment\", {\n      value: document.createDocumentFragment.bind(shadowRoot.ownerDocument)\n    });\n    shadowRoot.appendChild(template$12.content.cloneNode(true));\n    this.#wrapper = shadowRoot.querySelector(\"#wrapper\");\n    this.#parseVisitor = createParseVisitor$1(shadowRoot);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    super.connectedCallback();\n    this.setAttribute(\"role\", \"paragraph\");\n    this.#parseVisitor.updateEmojiBaseUrl(getEmojiBaseUrl(this));\n    this.#updateText();\n    this.#wrapper.addEventListener(\"click\", this.#handleElementClick, { signal });\n    this.addEventListener(\"-element-click\", this.#onClickReactHandler, { signal });\n  }\n  disconnectedCallback() {\n    this.#controller?.abort();\n    this.#controller = null;\n    this.#wrapper.removeEventListener(\"click\", this.#handleElementClick);\n    this.removeEventListener(\"-element-click\", this.#onClickReactHandler);\n    super.disconnectedCallback();\n  }\n  static get observedAttributes() {\n    return [\"text\"];\n  }\n  attributeChangedCallback(name, _oldVal, _newVal) {\n    switch (name) {\n      case \"text\": {\n        this.#updateText();\n        break;\n      }\n    }\n  }\n  get size() {\n    return getLiteralAttribute(this, sizeValues$1, \"size\", \"m\");\n  }\n  set size(value) {\n    updateLiteralAttribute(this, sizeValues$1, \"size\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  #handleElementClick = (e) =\u003e {\n    const eventTarget = e.target;\n    const elementClickEvent = new CustomEvent(\"-element-click\");\n    Object.defineProperty(elementClickEvent, \"currentTarget\", { value: eventTarget });\n    this.dispatchEvent(elementClickEvent);\n  };\n  #updateText() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const text = this.text;\n    if (text === null) {\n      this.#wrapper.innerHTML = \"\";\n    } else {\n      this.#wrapper.replaceChildren(\n        parseMarkdown(text, this.#parseVisitor.createVisitor())\n      );\n    }\n  }\n  #onClickReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-element-click\")?.(e);\n    getReactEventHandler(this, \"onElementClick\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-rich-text\", RichText);\nconst typeValues$5 = [\"info\", \"warn\", \"error\"];\nconst templateHTML$11 = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:row;gap:8px;align-items:center;padding:8px 16px;box-sizing:border-box;width:100%;min-height:48px}:host([type=warn]) #wrapper{background-color:var(--sinch-comp-alert-color-warning-default-background)}:host([type=error]) #wrapper{background-color:var(--sinch-comp-alert-color-error-default-background)}:host([type=info]) #wrapper{background-color:var(--sinch-comp-alert-color-info-default-background)}#icon-error,#icon-info,#icon-warn{display:none}#icon-warn{--sinch-global-color-icon:var(--sinch-comp-alert-color-warning-default-icon)}#icon-error{--sinch-global-color-icon:var(--sinch-comp-alert-color-error-default-icon)}#icon-info{--sinch-global-color-icon:var(--sinch-comp-alert-color-info-default-icon)}:host([type=error]) #icon-error,:host([type=info]) #icon-info,:host([type=warn]) #icon-warn{display:block}#text{display:flex;flex-direction:column;gap:8px;flex:1;min-width:0;--sinch-comp-rich-text-font:var(--sinch-comp-alert-font-body)}:host([type=warn]) #text{--sinch-global-color-text:var(--sinch-comp-alert-color-warning-default-text)}:host([type=error]) #text{--sinch-global-color-text:var(--sinch-comp-alert-color-error-default-text)}:host([type=info]) #text{--sinch-global-color-text:var(--sinch-comp-alert-color-info-default-text)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003csinch-icon icons-version=\"2\" name=\"circle-info\" id=\"icon-info\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"triangle-exclamation\" id=\"icon-warn\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"octagon-exclamation\" id=\"icon-error\"\u003e\u003c/sinch-icon\u003e\u003csinch-rich-text id=\"text\"\u003e\u003c/sinch-rich-text\u003e\u003cslot name=\"action\"\u003e\u003c/slot\u003e\u003cslot name=\"close\"\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$11 = document.createElement(\"template\");\ntemplate$11.innerHTML = templateHTML$11;\nclass Alert extends NectaryElement {\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$11.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#text\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"role\", \"alert\");\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n  }\n  static get observedAttributes() {\n    return [\"text\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"text\": {\n        updateAttribute(this.#$text, \"text\", newVal);\n        break;\n      }\n    }\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues$5, \"type\");\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues$5, \"type\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n}\ndefineCustomElement(\"sinch-alert\", Alert);\nconst DEFAULT_SIZE = \"m\";\nconst sizeValues = [\"l\", \"m\", \"s\"];\nconst sizeExValues = [...sizeValues, \"xs\"];\nconst statusValues = [\"online\", \"busy\", \"away\", \"offline\"];\nconst getAvatarColorBg = (id) =\u003e {\n  return `var(--sinch-comp-avatar-container-color-${id}-background)`;\n};\nconst getAvatarColorFg = (id) =\u003e {\n  return `var(--sinch-comp-avatar-container-color-${id}-foreground)`;\n};\nconst templateHTML$10 = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle;outline:0}#wrapper{position:relative;width:var(--sinch-local-size);height:var(--sinch-local-size);border-radius:var(--sinch-comp-avatar-shape-radius);--sinch-local-size:var(--sinch-comp-avatar-size-m)}:host([size=\"l\"]) #wrapper{--sinch-local-size:var(--sinch-comp-avatar-size-l)}:host([size=\"s\"]) #wrapper{--sinch-local-size:var(--sinch-comp-avatar-size-s)}#text{display:block;width:100%;height:100%;font:var(--sinch-comp-avatar-container-font-size-m-text);line-height:calc(var(--sinch-local-size) - 2px);text-transform:uppercase;text-align:center}:host([size=\"l\"]) #text{font:var(--sinch-comp-avatar-container-font-size-l-text);line-height:calc(var(--sinch-local-size) - 2px)}:host([size=\"s\"]) #text{font:var(--sinch-comp-avatar-container-font-size-s-text);line-height:calc(var(--sinch-local-size) - 2px)}#circle{position:relative;width:calc(100% - 2px);height:calc(100% - 2px);left:1px;top:1px;border-radius:50%;-webkit-mask:linear-gradient(#fff,#000);mask:linear-gradient(#fff,#000);background-color:var(--sinch-comp-avatar-container-color-default-background);color:var(--sinch-comp-avatar-container-color-default-foreground)}#image{display:none;position:absolute;left:0;top:0;width:100%;height:100%;object-fit:contain}:host([src]:not([src=\"\"])) #image{display:block}#person{display:none;position:absolute;left:0;top:0;width:100%;height:100%;fill:var(--sinch-comp-avatar-container-color-default-foreground)}:host(:not([src]):is(:not([alt]),[alt=\"\"])) #person{display:block}#status-wrapper{position:absolute;left:calc(85% - 5px);top:calc(85% - 5px);width:10px;height:10px;padding:1px;box-sizing:border-box;border-radius:50%;background-color:var(--sinch-comp-avatar-status-color-border);display:none;pointer-events:none}#status{width:8px;height:8px;border-radius:50%}:host([status=away]) #status-wrapper,:host([status=busy]) #status-wrapper,:host([status=offline]) #status-wrapper,:host([status=online]) #status-wrapper{display:block}:host([status=online]) #status{background-color:var(--sinch-comp-avatar-status-color-online-default-background)}:host([status=away]) #status{background-color:var(--sinch-comp-avatar-status-color-away-default-background)}:host([status=busy]) #status{background-color:var(--sinch-comp-avatar-status-color-busy-default-background)}:host([status=offline]) #status{background-color:var(--sinch-comp-avatar-status-color-offline-default-background)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"circle\"\u003e\u003cspan id=\"text\"\u003e\u003c/span\u003e \u003cimg id=\"image\" alt=\"\"\u003e \u003csvg id=\"person\" viewBox=\"0 0 40 40\" fill=\"none\"\u003e\u003cpath d=\"M29.451 15.785a9.451 9.451 0 1 1-18.902 0 9.452 9.452 0 0 1 18.902 0ZM4.734 40.5c.119-7.085 5.899-12.792 13.012-12.792h4.508c7.113 0 12.893 5.707 13.012 12.792H4.734Z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\u003cdiv id=\"status-wrapper\"\u003e\u003cdiv id=\"status\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$10 = document.createElement(\"template\");\ntemplate$10.innerHTML = templateHTML$10;\nclass Avatar extends NectaryElement {\n  #$circle;\n  #$text;\n  #$image;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$10.content.cloneNode(true));\n    this.#$circle = shadowRoot.querySelector(\"#circle\");\n    this.#$text = shadowRoot.querySelector(\"#text\");\n    this.#$image = shadowRoot.querySelector(\"#image\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#updateColor();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n  }\n  static get observedAttributes() {\n    return [\"alt\", \"src\", \"color\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"alt\": {\n        this.#$text.textContent = newVal;\n        this.#$image.alt = newVal ?? \"\";\n        break;\n      }\n      case \"src\": {\n        this.#$image.src = newVal ?? \"\";\n        break;\n      }\n      case \"color\": {\n        this.#updateColor();\n        break;\n      }\n    }\n  }\n  get src() {\n    return getAttribute(this, \"src\");\n  }\n  set src(value) {\n    updateAttribute(this, \"src\", value);\n  }\n  get alt() {\n    return getAttribute(this, \"alt\", \"\");\n  }\n  set alt(value) {\n    updateAttribute(this, \"alt\", value);\n  }\n  get color() {\n    return getAttribute(this, \"color\");\n  }\n  set color(value) {\n    updateAttribute(this, \"color\", value);\n  }\n  get size() {\n    return getLiteralAttribute(this, sizeValues, \"size\", DEFAULT_SIZE);\n  }\n  set size(value) {\n    updateLiteralAttribute(this, sizeValues, \"size\", value);\n  }\n  get status() {\n    return getLiteralAttribute(this, statusValues, \"status\", null);\n  }\n  set status(value) {\n    updateLiteralAttribute(this, statusValues, \"status\", value);\n  }\n  #updateColor() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const colorName = this.color;\n    if (colorName !== null \u0026\u0026 colorName.length \u003e 0) {\n      const bg = getAvatarColorBg(colorName);\n      const fg = getAvatarColorFg(colorName);\n      this.#$circle.style.setProperty(\"background-color\", bg);\n      this.#$circle.style.setProperty(\"color\", fg);\n    } else {\n      this.#$circle.style.removeProperty(\"background-color\");\n      this.#$circle.style.removeProperty(\"color\");\n    }\n  }\n}\ndefineCustomElement(\"sinch-avatar\", Avatar);\nconst isSlotElement = (el) =\u003e {\n  return el.tagName === \"SLOT\";\n};\nconst getFirstSlotElement = (root, isDeep = false) =\u003e {\n  const el = root.assignedElements()[0];\n  if (el == null) {\n    return null;\n  }\n  if (isDeep \u0026\u0026 isSlotElement(el)) {\n    return getFirstSlotElement(el, isDeep);\n  }\n  return el;\n};\nconst getChildren = (root) =\u003e {\n  if (isSlotElement(root)) {\n    return root.assignedElements();\n  }\n  return Array.from(root.children);\n};\nconst isFocusable = (el) =\u003e {\n  return el.focusable === true;\n};\nconst getFirstFocusableElement = (root) =\u003e {\n  for (const child of getChildren(root)) {\n    if (isFocusable(child)) {\n      return child;\n    }\n    const resultEl = getFirstFocusableElement(child);\n    if (resultEl !== null) {\n      return resultEl;\n    }\n  }\n  return null;\n};\nconst isElementFocused = ($el) =\u003e {\n  return $el !== null \u0026\u0026 $el === $el.getRootNode().activeElement;\n};\nconst getRect = (el) =\u003e {\n  const { x, y, width, height } = el.getBoundingClientRect();\n  return { x, y, width, height };\n};\nconst rectOverlap = (targetRect, contentRect) =\u003e {\n  return targetRect.x \u003c contentRect.x + contentRect.width \u0026\u0026 targetRect.x + targetRect.width \u003e contentRect.x \u0026\u0026 targetRect.y \u003c contentRect.y + contentRect.height \u0026\u0026 targetRect.y + targetRect.height \u003e contentRect.y;\n};\nconst modeValues = [\"square\", \"circle\"];\nconst templateHTML$$ = '\u003cstyle\u003e:host{display:inline-flex;flex-direction:column;position:relative}#badge-wrapper{position:absolute;left:0;top:0;width:fit-content;border-radius:var(--sinch-comp-badge-shape-radius);padding:1px;pointer-events:none;background-color:var(--sinch-comp-badge-color-border)}#badge{box-sizing:border-box;color:var(--sinch-comp-badge-color-text);background-color:var(--sinch-comp-badge-color-background);width:20px;height:20px;border-radius:var(--sinch-comp-badge-shape-radius)}#badge.long{width:fit-content;padding:0 5px}#text{display:block;width:100%;height:100%;text-align:center;font:var(--sinch-comp-badge-font-size-l);line-height:20px;text-rendering:optimizelegibility}:host([size=\"m\"]) #badge-wrapper{left:calc(100% - 8px);top:-8px}:host([size=\"m\"]) #badge{width:14px;height:14px}:host([size=\"m\"]) #badge.long{width:fit-content;padding:0 3px}:host([size=\"m\"]) #text{font:var(--sinch-comp-badge-font-size-m);line-height:14px}:host([size=\"s\"]) #badge{width:8px;height:8px;padding:0}:host([size=\"s\"]) #text{display:none}:host([hidden]) #badge-wrapper{display:none}\u003c/style\u003e\u003cslot id=\"slot\"\u003e\u003c/slot\u003e\u003cdiv id=\"badge-wrapper\"\u003e\u003cdiv id=\"badge\"\u003e\u003cspan id=\"text\"\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$$ = document.createElement(\"template\");\ntemplate$$.innerHTML = templateHTML$$;\nclass Badge extends NectaryElement {\n  #$badgeWrapper;\n  #$badge;\n  #$text;\n  #observer;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$$.content.cloneNode(true));\n    this.#$badgeWrapper = shadowRoot.querySelector(\"#badge-wrapper\");\n    this.#$badge = shadowRoot.querySelector(\"#badge\");\n    this.#$text = shadowRoot.querySelector(\"#text\");\n    this.#observer = new ResizeObserver(this.#onResize);\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#observer.observe(this);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#observer.unobserve(this);\n  }\n  static get observedAttributes() {\n    return [\n      \"text\",\n      \"size\",\n      \"mode\",\n      \"hidden\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        setClass(this.#$badge, \"long\", newVal !== null \u0026\u0026 newVal.length \u003e 1);\n        break;\n      }\n      case \"size\": {\n        this.#updatePosition();\n        break;\n      }\n      case \"mode\": {\n        this.#updatePosition();\n        break;\n      }\n      case \"hidden\": {\n        this.#updatePosition();\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get size() {\n    return getLiteralAttribute(this, sizeValues, \"size\", DEFAULT_SIZE);\n  }\n  set size(value) {\n    updateLiteralAttribute(this, sizeValues, \"size\", value);\n  }\n  get mode() {\n    return getLiteralAttribute(this, modeValues, \"mode\", \"square\");\n  }\n  set mode(value) {\n    updateLiteralAttribute(this, modeValues, \"mode\", value);\n  }\n  get hidden() {\n    return getBooleanAttribute(this, \"hidden\");\n  }\n  set hidden(isHidden) {\n    updateBooleanAttribute(this, \"hidden\", isHidden);\n  }\n  get badgeRect() {\n    if (this.hidden) {\n      const selfRect = getRect(this);\n      return { x: selfRect.x + selfRect.width, y: selfRect.y, width: 0, height: 0 };\n    }\n    return getRect(this.#$badgeWrapper);\n  }\n  #updatePosition() {\n    if (this.hidden) {\n      return;\n    }\n    const mode = this.mode;\n    const targetRect = this.getBoundingClientRect();\n    const badgeRect = this.#$badgeWrapper.getBoundingClientRect();\n    const offsetMultX = mode === \"circle\" ? 0.85 : 1;\n    const offsetMultY = mode === \"circle\" ? 0.15 : 0;\n    const posX = Math.round(targetRect.width * offsetMultX - badgeRect.height / 2);\n    const posY = Math.round(targetRect.height * offsetMultY - badgeRect.height / 2);\n    this.#$badgeWrapper.style.setProperty(\"left\", `${posX}px`);\n    this.#$badgeWrapper.style.setProperty(\"top\", `${posY}px`);\n  }\n  #onResize = () =\u003e {\n    this.#updatePosition();\n  };\n}\ndefineCustomElement(\"sinch-badge\", Badge);\nconst templateHTML$_ = '\u003cstyle\u003e:host{display:block;--sinch-local-divider-color:var(--sinch-comp-button-color-secondary-default-text-initial)}#wrapper{display:flex;box-sizing:border-box;width:100%;height:100%;position:relative}:host(:is(:not(:first-of-type))) #wrapper::before{content:\"\";position:absolute;inset:0;background-color:var(--sinch-local-divider-color);opacity:.3;pointer-events:none;z-index:2;top:10%;bottom:10%;left:-.5px;width:1px}:host([type=primary]) #wrapper::before{--sinch-local-divider-color:var(--sinch-comp-button-color-primary-default-text-initial)}:host([type=secondary]) #wrapper::before{--sinch-local-divider-color:var(--sinch-comp-button-color-secondary-default-text-initial)}:host([type=subtle-primary]) #wrapper::before{--sinch-local-divider-color:var(--sinch-comp-button-color-subtle-primary-default-text-initial)}:host([type=subtle-secondary]) #wrapper::before{--sinch-local-divider-color:var(--sinch-comp-button-color-subtle-secondary-default-text-initial)}:host([type=cta-primary]) #wrapper::before{--sinch-local-divider-color:var(--sinch-comp-button-color-cta-primary-default-text-initial)}:host([type=cta-secondary]) #wrapper::before{--sinch-local-divider-color:var(--sinch-comp-button-color-cta-secondary-default-text-initial)}:host([type=destructive]) #wrapper::before{--sinch-local-divider-color:var(--sinch-comp-button-color-danger-default-text-initial)}#sinch-button-element{display:flex;box-sizing:border-box;width:100%;height:100%;--sinch-button-shape-radius-base:0;--sinch-button-shape-radius-top-right:0;--sinch-button-shape-radius-top-left:0;--sinch-button-shape-radius-bottom-right:0;--sinch-button-shape-radius-bottom-left:0}:host(:is(:first-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-left:var(--sinch-comp-button-shape-radius-size-m);--sinch-button-shape-radius-bottom-left:var(--sinch-comp-button-shape-radius-size-m)}:host(:is(:last-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-right:var(--sinch-comp-button-shape-radius-size-m);--sinch-button-shape-radius-bottom-right:var(--sinch-comp-button-shape-radius-size-m)}:host([size=\"l\"]:is(:first-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-left:var(--sinch-comp-button-shape-radius-size-l);--sinch-button-shape-radius-bottom-left:var(--sinch-comp-button-shape-radius-size-l)}:host([size=\"l\"]:is(:last-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-right:var(--sinch-comp-button-shape-radius-size-l);--sinch-button-shape-radius-bottom-right:var(--sinch-comp-button-shape-radius-size-l)}:host([size=\"m\"]:is(:first-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-left:var(--sinch-comp-button-shape-radius-size-m);--sinch-button-shape-radius-bottom-left:var(--sinch-comp-button-shape-radius-size-m)}:host([size=\"m\"]:is(:last-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-right:var(--sinch-comp-button-shape-radius-size-m);--sinch-button-shape-radius-bottom-right:var(--sinch-comp-button-shape-radius-size-m)}:host([size=\"s\"]:is(:first-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-left:var(--sinch-comp-button-shape-radius-size-s);--sinch-button-shape-radius-bottom-left:var(--sinch-comp-button-shape-radius-size-s)}:host([size=\"s\"]:is(:last-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-right:var(--sinch-comp-button-shape-radius-size-s);--sinch-button-shape-radius-bottom-right:var(--sinch-comp-button-shape-radius-size-s)}:host([size=xs]:is(:first-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-left:var(--sinch-comp-button-shape-radius-size-xs);--sinch-button-shape-radius-bottom-left:var(--sinch-comp-button-shape-radius-size-xs)}:host([size=xs]:is(:last-of-type)) #sinch-button-element{--sinch-button-shape-radius-top-right:var(--sinch-comp-button-shape-radius-size-xs);--sinch-button-shape-radius-bottom-right:var(--sinch-comp-button-shape-radius-size-xs)}:host(:is(:not(:first-of-type,:last-of-type))) #sinch-button-element:not(:active){--sinch-button-border-left:none;--sinch-button-border-right:none}:host(:is(:first-of-type)) #sinch-button-element:not(:active){--sinch-button-border-right:none}:host(:is(:last-of-type)) #sinch-button-element:not(:active){--sinch-button-border-left:none}:host(:is([text=\"\"],:not([text]))) :is(#left-icon,#right-icon,#text){display:none}::slotted(*){display:block}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003csinch-button id=\"sinch-button-element\"\u003e\u003cslot id=\"left-icon\" name=\"left-icon\" slot=\"left-icon\"\u003e\u003c/slot\u003e\u003cslot id=\"icon\" name=\"icon\" slot=\"icon\"\u003e\u003c/slot\u003e\u003cslot id=\"right-icon\" name=\"right-icon\" slot=\"right-icon\"\u003e\u003c/slot\u003e\u003c/sinch-button\u003e\u003c/div\u003e';\nconst template$_ = document.createElement(\"template\");\ntemplate$_.innerHTML = templateHTML$_;\nclass ButtonGroupItem extends NectaryElement {\n  #$sinchButton;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$_.content.cloneNode(true));\n    this.#$sinchButton = shadowRoot.querySelector(\"#sinch-button-element\");\n  }\n  static get observedAttributes() {\n    return [\"type\", \"size\", \"text\", \"disabled\", \"toggled\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    updateAttribute(this.#$sinchButton, name, newVal);\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.setAttribute(\"role\", \"button\");\n    const forwardEvent = (e) =\u003e this.dispatchEvent(new CustomEvent(e.type, { ...e }));\n    this.addEventListener(\"-click\", (e) =\u003e this.#onClickReactHandler(e), { signal });\n    this.addEventListener(\"-focus\", () =\u003e this.#onFocusReactHandler(), { signal });\n    this.addEventListener(\"-blur\", () =\u003e this.#onBlurReactHandler(), { signal });\n    this.#$sinchButton.addEventListener(\"-click\", (e) =\u003e forwardEvent(e), { signal });\n    this.#$sinchButton.addEventListener(\"-focus\", (e) =\u003e forwardEvent(e), { signal });\n    this.#$sinchButton.addEventListener(\"-blur\", (e) =\u003e forwardEvent(e), { signal });\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set toggled(isToggled) {\n    updateBooleanAttribute(this, \"toggled\", isToggled);\n  }\n  get toggled() {\n    return getBooleanAttribute(this, \"toggled\");\n  }\n  get focusable() {\n    return true;\n  }\n  #onClickReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-click\")?.(e);\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n}\ndefineCustomElement(\"sinch-button-group-item\", ButtonGroupItem);\nconst typeValues$4 = [\n  \"primary\",\n  \"secondary\",\n  \"subtle-primary\",\n  \"subtle-secondary\",\n  \"cta-primary\",\n  \"cta-secondary\",\n  \"destructive\"\n];\nconst formTypeValues = [\n  \"submit\",\n  \"reset\",\n  \"button\"\n];\nconst templateHTML$Z = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;box-sizing:border-box;width:100%;height:100%}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$Z = document.createElement(\"template\");\ntemplate$Z.innerHTML = templateHTML$Z;\nclass ButtonGroup extends NectaryElement {\n  #$slot;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$Z.content.cloneNode(true));\n    this.#$slot = shadowRoot.querySelector(\"slot\");\n  }\n  static get observedAttributes() {\n    return [\"size\", \"type\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"size\":\n        for (const $option of this.#$slot.assignedElements()) {\n          updateLiteralAttribute($option, sizeExValues, name, newVal);\n        }\n        break;\n      case \"type\":\n        for (const $option of this.#$slot.assignedElements()) {\n          updateLiteralAttribute($option, typeValues$4, name, newVal);\n        }\n        break;\n    }\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues$4, \"type\", value);\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues$4, \"type\", \"primary\");\n  }\n  set size(size) {\n    updateLiteralAttribute(this, sizeExValues, \"size\", size);\n  }\n  get size() {\n    return getLiteralAttribute(this, sizeExValues, \"size\", DEFAULT_SIZE);\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"group\");\n  }\n}\ndefineCustomElement(\"sinch-button-group\", ButtonGroup);\nconst setFormValue = (internals, value) =\u003e {\n  let formValue = value ?? \"\";\n  if (formValue instanceof FormData \u0026\u0026 [...formValue.keys()].length === 0) {\n    formValue = \"\";\n  }\n  if (formValue instanceof File \u0026\u0026 formValue.size === 0) {\n    formValue = \"\";\n  }\n  if (internals.form !== null) {\n    internals.setFormValue(formValue);\n  }\n};\nconst requestSubmitForm = (form, submitter) =\u003e {\n  const submitterProxy = document.createElement(\"button\");\n  submitterProxy.style.display = \"none\";\n  submitterProxy.type = submitter.formType;\n  Array.from(submitter.attributes).filter((attr) =\u003e attr.name.startsWith(\"aria-\")).forEach((attr) =\u003e {\n    submitterProxy.setAttribute(attr.name, attr.value);\n  });\n  form.appendChild(submitterProxy);\n  try {\n    form.requestSubmit(submitterProxy);\n  } finally {\n    form.removeChild(submitterProxy);\n  }\n};\nconst CSVToFormData = (name, csv) =\u003e {\n  if (csv.length === 0) {\n    return \"\";\n  }\n  const formData = new FormData();\n  csv.split(\",\").forEach((value) =\u003e {\n    formData.append(name, value);\n  });\n  return formData;\n};\nconst templateHTML$Y = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle;outline:0;cursor:pointer;user-select:none;--sinch-button-shape-radius-base:var(--sinch-comp-button-shape-radius-size-m);--sinch-local-shadow:var(--sinch-comp-button-shadow-secondary-initial);--sinch-button-border:1px solid;--sinch-button-border-top:var(--sinch-button-border);--sinch-button-border-bottom:var(--sinch-button-border);--sinch-button-border-left:var(--sinch-button-border);--sinch-button-border-right:var(--sinch-button-border);--sinch-button-shape-radius-top-right:unset;--sinch-button-shape-radius-top-left:unset;--sinch-button-shape-radius-bottom-right:unset;--sinch-button-shape-radius-bottom-left:unset}:host([disabled]){cursor:initial}#button{all:initial;display:block;position:relative;width:100%;height:var(--sinch-local-size);user-select:none;--sinch-local-size:var(--sinch-comp-button-size-container-m);--sinch-local-padding:16px;--sinch-local-font:var(--sinch-comp-button-font-size-m-text);--sinch-global-size-icon:var(--sinch-comp-button-size-icon-m);--sinch-global-color-icon:var(--sinch-local-color-icon)}:host([data-size=\"l\"])\u003e#button{--sinch-local-size:var(--sinch-comp-button-size-container-l);--sinch-button-set-size-shape-radius:var(--sinch-comp-button-shape-radius-size-l);--sinch-local-font:var(--sinch-comp-button-font-size-l-text);--sinch-global-size-icon:var(--sinch-comp-button-size-icon-l)}:host([data-size=\"m\"])\u003e#button{--sinch-local-size:var(--sinch-comp-button-size-container-m);--sinch-button-set-size-shape-radius:var(--sinch-comp-button-shape-radius-size-m);--sinch-local-font:var(--sinch-comp-button-font-size-m-text);--sinch-global-size-icon:var(--sinch-comp-button-size-icon-m)}:host([data-size=\"s\"])\u003e#button{--sinch-local-size:var(--sinch-comp-button-size-container-s);--sinch-button-set-size-shape-radius:var(--sinch-comp-button-shape-radius-size-s);--sinch-local-font:var(--sinch-comp-button-font-size-s-text);--sinch-global-size-icon:var(--sinch-comp-button-size-icon-s)}:host([data-size=xs])\u003e#button{--sinch-local-size:var(--sinch-comp-button-size-container-xs);--sinch-local-padding:8px;--sinch-button-set-size-shape-radius:var(--sinch-comp-button-shape-radius-size-xs);--sinch-local-font:var(--sinch-comp-button-font-size-s-text);--sinch-global-size-icon:var(--sinch-comp-button-size-icon-xs)}:host(:is([text=\"\"],:not([text])))\u003e#button{--sinch-local-padding:8px}:host([data-size=\"s\"]:is([text=\"\"],:not([text])))\u003e#button{--sinch-local-padding:4px}:host([data-size=xs]:is([text=\"\"],:not([text])))\u003e#button{--sinch-local-padding:4px}:host([type=primary])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-primary-default-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-primary-default-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-primary-default-text-initial);--sinch-local-color-icon:var(--sinch-comp-button-color-primary-default-icon-initial);--sinch-local-color-outline-focus:var(--sinch-comp-button-color-primary-default-outline-focus);--sinch-local-shadow:var(--sinch-comp-button-shadow-primary-initial)}:host(:not([type]))\u003e#button,:host([type=secondary])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-secondary-default-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-secondary-default-border-initial);--sinch-local-color-outline-focus:var(--sinch-comp-button-color-secondary-default-outline-focus);--sinch-local-color-text:var(--sinch-comp-button-color-secondary-default-text-initial);--sinch-local-color-icon:var(--sinch-comp-button-color-secondary-default-icon-initial)}:host([type=subtle-primary])\u003e#button,:host([type=tertiary])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-primary-default-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-subtle-primary-default-border-initial);--sinch-local-color-outline-focus:var(--sinch-comp-button-color-subtle-primary-default-outline-focus);--sinch-local-color-text:var(--sinch-comp-button-color-subtle-primary-default-text-initial);--sinch-local-color-icon:var(--sinch-comp-button-color-subtle-primary-default-icon-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-initial)}:host(:not([type]):is([text=\"\"],:not([text])))\u003e#button,:host([type=subtle-secondary])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-secondary-default-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-subtle-secondary-default-border-initial);--sinch-local-color-outline-focus:var(--sinch-comp-button-color-subtle-secondary-default-outline-focus);--sinch-local-color-text:var(--sinch-comp-button-color-subtle-secondary-default-text-initial);--sinch-local-color-icon:var(--sinch-comp-button-color-subtle-secondary-default-icon-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-initial)}:host([type=cta-primary])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-cta-primary-default-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-cta-primary-default-border-initial);--sinch-local-color-outline-focus:var(--sinch-comp-button-color-cta-primary-default-outline-focus);--sinch-local-color-text:var(--sinch-comp-button-color-cta-primary-default-text-initial);--sinch-local-color-icon:var(--sinch-comp-button-color-cta-primary-default-icon-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-primary-initial)}:host([type=cta-secondary])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-cta-secondary-default-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-cta-secondary-default-border-initial);--sinch-local-color-outline-focus:var(--sinch-comp-button-color-cta-secondary-default-outline-focus);--sinch-local-color-text:var(--sinch-comp-button-color-cta-secondary-default-text-initial);--sinch-local-color-icon:var(--sinch-comp-button-color-cta-secondary-default-icon-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-secondary-initial)}:host([type=destructive])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-danger-default-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-danger-default-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-danger-default-text-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-danger-initial);--sinch-global-color-icon:var(--sinch-comp-button-color-danger-default-icon-initial)}:host([type=primary]:focus-visible)\u003e#button{--sinch-local-shadow:var(--sinch-comp-button-shadow-primary-focus)}:host(:not([type]):focus-visible)\u003e#button,:host([type=secondary]:focus-visible)\u003e#button{--sinch-local-shadow:var(--sinch-comp-button-shadow-secondary-focus)}:host([type=subtle-primary]:focus-visible)\u003e#button,:host([type=tertiary]:focus-visible)\u003e#button{--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-focus)}:host(:not([type]):is([text=\"\"],:not([text])):focus-visible)\u003e#button,:host([type=subtle-secondary]:focus-visible)\u003e#button{--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-focus)}:host([type=cta-primary]:focus-visible)\u003e#button{--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-primary-focus)}:host([type=cta-secondary]:focus-visible)\u003e#button{--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-secondary-focus)}:host([type=destructive]:focus-visible)\u003e#button{--sinch-local-shadow:var(--sinch-comp-button-shadow-danger-focus)}:host([toggled]:not([disabled])[type=subtle-primary])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-primary-toggled-background-initial)}:host([toggled]:not([disabled]):not([type]):is([text=\"\"],:not([text])))\u003e#button,:host([toggled]:not([disabled])[type=subtle-secondary])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-secondary-toggled-background-initial)}:host([type=primary]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-primary-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-primary-hover)}:host([type=primary]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-primary-default-background-active);--sinch-local-shadow:var(--sinch-comp-button-shadow-primary-active)}:host(:not([type]):hover)\u003e#button,:host([type=secondary]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-secondary-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-secondary-hover)}:host(:not([type]):active)\u003e#button,:host([type=secondary]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-secondary-default-background-active)}:host([type=subtle-primary]:hover)\u003e#button,:host([type=tertiary]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-primary-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-hover)}:host([type=subtle-primary]:active)\u003e#button,:host([type=tertiary]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-primary-default-background-active);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-active)}:host(:not([type]):is([text=\"\"],:not([text])):hover)\u003e#button,:host([type=subtle-secondary]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-secondary-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-hover)}:host(:not([type]):is([text=\"\"],:not([text])):active)\u003e#button,:host([type=subtle-secondary]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-secondary-default-background-active);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-active)}:host([type=cta-primary]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-cta-primary-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-primary-hover)}:host([type=cta-primary]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-cta-primary-default-background-active);--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-primary-active)}:host([type=cta-secondary]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-cta-secondary-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-secondary-hover)}:host([type=cta-secondary]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-cta-secondary-default-background-active);--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-secondary-active)}:host([type=destructive]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-danger-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-danger-hover)}:host([type=destructive]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-danger-default-background-active);--sinch-local-shadow:var(--sinch-comp-button-shadow-danger-active)}:host([toggled]:not([disabled])[type=subtle-primary]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-primary-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-hover)}:host([toggled]:not([disabled])[type=subtle-primary]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-primary-default-background-active);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-active)}:host([toggled]:not([disabled]):not([type]):is([text=\"\"],:not([text])):hover)\u003e#button,:host([toggled]:not([disabled])[type=subtle-secondary]:hover)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-secondary-default-background-hover);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-hover)}:host([toggled]:not([disabled]):not([type]):is([text=\"\"],:not([text])):active)\u003e#button,:host([toggled]:not([disabled])[type=subtle-secondary]:active)\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-secondary-default-background-active);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-active)}:host([type=primary][disabled])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-primary-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-primary-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-primary-disabled-text-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-primary-disabled);--sinch-global-color-icon:var(--sinch-comp-button-color-primary-disabled-icon-initial)}:host(:not([type])[disabled])\u003e#button,:host([type=secondary][disabled])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-secondary-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-secondary-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-secondary-disabled-text-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-secondary-disabled);--sinch-global-color-icon:var(--sinch-comp-button-color-secondary-disabled-icon-initial)}:host([type=subtle-primary][disabled])\u003e#button,:host([type=tertiary][disabled])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-primary-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-subtle-primary-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-subtle-primary-disabled-text-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-disabled);--sinch-global-color-icon:var(--sinch-comp-button-color-subtle-primary-disabled-icon-initial)}:host(:not([type]):is([text=\"\"],:not([text]))[disabled])\u003e#button,:host([type=subtle-secondary][disabled])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-subtle-secondary-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-subtle-secondary-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-subtle-secondary-disabled-text-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-subtle-disabled);--sinch-global-color-icon:var(--sinch-comp-button-color-subtle-secondary-disabled-icon-initial)}:host([type=cta-primary][disabled])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-cta-primary-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-cta-primary-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-cta-primary-disabled-text-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-primary-disabled);--sinch-global-color-icon:var(--sinch-comp-button-color-cta-primary-disabled-icon-initial)}:host([type=cta-secondary][disabled])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-cta-secondary-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-cta-secondary-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-cta-secondary-disabled-text-initial);--sinch-local-shadow:var(--sinch-comp-button-shadow-cta-secondary-disabled);--sinch-global-color-icon:var(--sinch-comp-button-color-cta-secondary-disabled-icon-initial)}:host([type=destructive][disabled])\u003e#button{--sinch-local-color-background:var(--sinch-comp-button-color-danger-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-button-color-danger-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-button-color-danger-disabled-text-initial);--sinch-global-color-icon:var(--sinch-comp-button-color-danger-disabled-icon-initial)}#button::before{content:\"\";position:absolute;inset:0;background-color:var(--sinch-local-color-background);border-top:var(--sinch-button-border-top);border-bottom:var(--sinch-button-border-bottom);border-right:var(--sinch-button-border-right);border-left:var(--sinch-button-border-left);border-color:var(--sinch-local-color-border);border-top-right-radius:var(--sinch-button-shape-radius-top-right,var(--sinch-button-set-size-shape-radius,var(--sinch-button-shape-radius-base)));border-top-left-radius:var(--sinch-button-shape-radius-top-left,var(--sinch-button-set-size-shape-radius,var(--sinch-button-shape-radius-base)));border-bottom-right-radius:var(--sinch-button-shape-radius-bottom-right,var(--sinch-button-set-size-shape-radius,var(--sinch-button-shape-radius-base)));border-bottom-left-radius:var(--sinch-button-shape-radius-bottom-left,var(--sinch-button-set-size-shape-radius,var(--sinch-button-shape-radius-base)));box-shadow:var(--sinch-local-shadow);pointer-events:none}:host(:not([disabled]):active) #button::before{border-width:2px}:host(:focus-visible) #button::after{position:absolute;content:\"\";inset:-3px;border:2px solid var(--sinch-local-color-outline-focus);border-top-right-radius:calc(var(--sinch-button-shape-radius-top-right,var(--sinch-button-set-size-shape-radius,var(--sinch-button-shape-radius-base))) + 3px);border-top-left-radius:calc(var(--sinch-button-shape-radius-top-left,var(--sinch-button-set-size-shape-radius,var(--sinch-button-shape-radius-base))) + 3px);border-bottom-right-radius:calc(var(--sinch-button-shape-radius-bottom-right,var(--sinch-button-set-size-shape-radius,var(--sinch-button-shape-radius-base))) + 3px);border-bottom-left-radius:calc(var(--sinch-button-shape-radius-bottom-left,var(--sinch-button-set-size-shape-radius,var(--sinch-button-shape-radius-base))) + 3px);pointer-events:none}#content{position:relative;display:flex;align-items:center;justify-content:center;gap:12px;width:100%;height:100%;padding:0 var(--sinch-local-padding);box-sizing:border-box;pointer-events:none;overflow:hidden}#text{font:var(--sinch-local-font);color:var(--sinch-local-color-text);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex-shrink:1;min-width:0}:host(:is([text=\"\"],:not([text]))) :is(#left-icon,#right-icon,#text){display:none}::slotted(*){display:block}\u003c/style\u003e\u003cdiv id=\"button\" inert\u003e\u003cdiv id=\"content\"\u003e\u003cslot id=\"left-icon\" name=\"left-icon\"\u003e\u003c/slot\u003e\u003cslot id=\"icon\" name=\"icon\"\u003e\u003c/slot\u003e\u003cspan id=\"text\"\u003e\u003c/span\u003e\u003cslot id=\"right-icon\" name=\"right-icon\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$Y = document.createElement(\"template\");\ntemplate$Y.innerHTML = templateHTML$Y;\nclass Button extends NectaryElement {\n  #$button;\n  #$text;\n  #controller = null;\n  #sizeContext;\n  #internals;\n  static formAssociated = true;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$Y.content.cloneNode(true));\n    this.#internals = this.attachInternals();\n    this.#$button = shadowRoot.querySelector(\"#button\");\n    this.#$text = shadowRoot.querySelector(\"#text\");\n    this.#sizeContext = new Context(this.#$button, \"size\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.setAttribute(\"role\", \"button\");\n    this.#internals.role = \"button\";\n    this.tabIndex = 0;\n    this.addEventListener(\"click\", this.#onButtonClick, { signal });\n    this.addEventListener(\"focus\", this.#onButtonFocus, { signal });\n    this.addEventListener(\"blur\", this.#onButtonBlur, { signal });\n    this.addEventListener(\"keydown\", this.#onButtonKeydown, { signal });\n    this.addEventListener(\"-click\", this.#onClickReactHandler, { signal });\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, { signal });\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, { signal });\n    subscribeContext(this, \"size\", this.#onContextSize, signal);\n    this.#sizeContext.listen(signal);\n    this.#onSizeUpdate();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\n      \"text\",\n      \"disabled\",\n      \"toggled\",\n      \"size\",\n      \"data-size\",\n      \"data-managed-aria-disabled\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n      case \"data-managed-aria-disabled\": {\n        this.#updateAriaDisabled(newVal);\n        break;\n      }\n      case \"disabled\": {\n        if (!isAttrEqual(oldVal, newVal)) {\n          updateBooleanAttribute(this, \"disabled\", isAttrTrue(newVal));\n        }\n        if (!this.hasAttribute(\"data-managed-aria-disabled\")) {\n          this.#updateAriaDisabled(newVal);\n        }\n        break;\n      }\n      case \"toggled\": {\n        if (!isAttrEqual(oldVal, newVal)) {\n          updateBooleanAttribute(this, \"toggled\", isAttrTrue(newVal));\n        }\n        this.ariaPressed = isAttrTrue(newVal).toString();\n        this.#internals.ariaPressed = isAttrTrue(newVal).toString();\n        break;\n      }\n      case \"size\": {\n        updateAttribute(this, \"data-size\", newVal);\n        break;\n      }\n      case \"data-size\": {\n        this.#onSizeUpdate();\n        break;\n      }\n    }\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues$4, \"type\", value);\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues$4, \"type\", \"primary\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set toggled(isToggled) {\n    updateBooleanAttribute(this, \"toggled\", isToggled);\n  }\n  get toggled() {\n    return getBooleanAttribute(this, \"toggled\");\n  }\n  set size(size) {\n    updateLiteralAttribute(this, sizeExValues, \"size\", size);\n  }\n  get size() {\n    return getLiteralAttribute(this, sizeExValues, \"size\", DEFAULT_SIZE);\n  }\n  get focusable() {\n    return true;\n  }\n  set formType(value) {\n    updateLiteralAttribute(this, formTypeValues, \"form-type\", value);\n  }\n  get formType() {\n    return getLiteralAttribute(this, formTypeValues, \"form-type\", \"button\");\n  }\n  get dataManagedAriaDisabled() {\n    return getBooleanAttribute(this, \"data-managed-aria-disabled\");\n  }\n  #onSizeUpdate() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const size = getAttribute(this, \"data-size\", DEFAULT_SIZE);\n    this.#sizeContext.dispatch(size);\n  }\n  #onContextSize = (e) =\u003e {\n    if (this.hasAttribute(\"size\") === true) {\n      return;\n    }\n    switch (e.detail) {\n      case \"l\": {\n        this.setAttribute(\"data-size\", \"m\");\n        break;\n      }\n      default: {\n        this.setAttribute(\"data-size\", \"s\");\n      }\n    }\n  };\n  #updateAriaDisabled = (newVal) =\u003e {\n    this.ariaDisabled = isAttrTrue(newVal).toString();\n    this.#internals.ariaDisabled = isAttrTrue(newVal).toString();\n  };\n  #onButtonKeydown = (e) =\u003e {\n    switch (e.code) {\n      case \"Space\":\n      case \"Enter\": {\n        e.preventDefault();\n        this.click();\n      }\n    }\n  };\n  #onButtonClick = (e) =\u003e {\n    if (this.disabled) {\n      e.stopPropagation();\n      e.preventDefault();\n    } else {\n      const form = this.#internals.form;\n      if (form !== null) {\n        if (this.formType === \"submit\") {\n          requestSubmitForm(form, this);\n        }\n        if (this.formType === \"reset\") {\n          form.reset();\n        }\n      }\n      this.dispatchEvent(\n        new CustomEvent(\"-click\")\n      );\n    }\n  };\n  #onButtonFocus = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onButtonBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n  #onClickReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-click\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-button\", Button);\nconst templateHTML$X = '\u003cstyle\u003e:host{display:block}#wrapper{height:100%;padding:20px 0;box-sizing:border-box;background-color:var(--sinch-comp-card-color-default-background-initial);border-radius:var(--sinch-comp-card-shape-radius);border:1px solid var(--sinch-comp-card-color-default-border-initial)}#scroll{overflow:auto;height:100%;box-sizing:border-box;padding:4px 24px}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"scroll\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$X = document.createElement(\"template\");\ntemplate$X.innerHTML = templateHTML$X;\nclass CardContainer extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$X.content.cloneNode(true));\n  }\n}\ndefineCustomElement(\"sinch-card-container\", CardContainer);\nconst templateHTML$W = '\u003cstyle\u003e:host{display:block}#title{display:flex;align-items:center;flex-direction:row}#title-text{font:var(--sinch-comp-card-v2-font-title);color:var(--sinch-comp-card-v2-color-default-title-initial)}#title-icon{display:flex}:host([orientation=vertical]) #title{align-items:start;flex-direction:column}:host([disabled]:not([disabled=false])) #title-text{color:var(--sinch-comp-card-v2-color-default-title-disabled)}:host([selected]:not([selected=false])[disabled]:not([disabled=false])) #title-text{color:var(--sinch-comp-card-v2-color-selected-title-disabled)}::slotted([slot=icon]){--sinch-global-color-icon:var(--sinch-comp-card-v2-color-default-icon-initial);--sinch-global-size-icon:var(--sinch-comp-card-v2-size-icon);margin-right:8px;margin-bottom:0}:host([orientation=vertical]) ::slotted([slot=icon]){margin-right:0;margin-bottom:8px}:host([selected]:not([selected=false])) ::slotted([slot=icon]){--sinch-global-color-icon:var(--sinch-comp-card-v2-color-selected-icon-initial)}:host([disabled]:not([disabled=false])) ::slotted([slot=icon]){--sinch-global-color-icon:var(--sinch-comp-card-v2-color-default-icon-disabled)}:host([selected]:not([selected=false])[disabled]:not([disabled=false])) ::slotted([slot=icon]){--sinch-global-color-icon:var(--sinch-comp-card-v2-color-selected-icon-disabled)}\u003c/style\u003e\u003cdiv id=\"title\"\u003e\u003cdiv id=\"title-icon\"\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003csinch-text id=\"title-text\" type=\"m\"\u003e\u003c/sinch-text\u003e\u003c/div\u003e';\nconst template$W = document.createElement(\"template\");\ntemplate$W.innerHTML = templateHTML$W;\nclass CardV2Title extends NectaryElement {\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$W.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#title-text\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    if (this.hasAttribute(\"orientation\") === false) {\n      this.setAttribute(\"orientation\", \"horizontal\");\n    }\n  }\n  static get observedAttributes() {\n    return [\"text\", \"ellipsis\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n      case \"ellipsis\": {\n        const bool = isAttrTrue(newVal);\n        updateBooleanAttribute(this.#$text, \"ellipsis\", bool);\n        break;\n      }\n    }\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get orientation() {\n    return getAttribute(this, \"orientation\", \"\");\n  }\n  set orientation(value) {\n    updateAttribute(this, \"orientation\", value);\n  }\n  set ellipsis(isEllipsis) {\n    updateBooleanAttribute(this, \"ellipsis\", isEllipsis);\n  }\n  get ellipsis() {\n    return getBooleanAttribute(this, \"ellipsis\");\n  }\n}\ndefineCustomElement(\"sinch-card-v2-title\", CardV2Title);\nconst templateHTML$V = '\u003cstyle\u003e:host{display:flex}.empty{display:none!important}#card{border-radius:var(--sinch-comp-card-v2-shape-radius);border:1px solid var(--sinch-comp-card-v2-color-default-border-initial);background-color:var(--sinch-comp-card-v2-color-default-background-initial);box-shadow:var(--sinch-comp-card-v2-shadow-initial);overflow:hidden;transition:.15s linear;display:flex;flex-direction:column;flex:1}#card-media{display:block;overflow:hidden}#body{display:flex;flex-direction:column;padding:16px;gap:8px;align-self:stretch;flex:1}#card-title{display:flex;flex-direction:row;align-items:center;gap:8px;align-self:stretch}#card-content{display:flex;gap:10px;align-self:stretch}#card-footer{display:flex;flex-direction:row;align-items:center;gap:16px;align-self:stretch;margin-top:auto}:host([selected]:not([selected=false])) #card{background-color:var(--sinch-comp-card-v2-color-selected-background-initial);border-color:var(--sinch-comp-card-v2-color-selected-border-initial);cursor:pointer}:host([clickable]:not([clickable=false])) #card{cursor:pointer}:host([disabled]:not([disabled=false])) #card{box-shadow:var(--sinch-comp-card-v2-shadow-disabled);background-color:var(--sinch-comp-card-v2-color-default-background-disabled);border-color:var(--sinch-comp-card-v2-color-default-border-disabled);cursor:not-allowed}:host([clickable]:not([clickable=false]):is(:not([disabled]),[disabled=false]):hover) #card{background-color:var(--sinch-comp-card-v2-color-default-background-hover);border-color:var(--sinch-comp-card-v2-color-default-border-hover);box-shadow:var(--sinch-comp-card-v2-shadow-hover)}:host([clickable]:not([clickable=false]):is(:not([disabled]),[disabled=false]):active) #card{background-color:var(--sinch-comp-card-v2-color-default-background-active);border-color:var(--sinch-comp-card-v2-color-default-border-active);box-shadow:var(--sinch-comp-card-v2-shadow-active)}:host([selected]:not([selected=false]):is(:not([disabled]),[disabled=false]):hover) #card{background-color:var(--sinch-comp-card-v2-color-selected-background-hover);border-color:var(--sinch-comp-card-v2-color-selected-border-hover)}:host([selected]:not([selected=false]):is(:not([disabled]),[disabled=false]):active) #card{background-color:var(--sinch-comp-card-v2-color-selected-background-active);border-color:var(--sinch-comp-card-v2-color-selected-border-active)}:host([selected]:not([selected=false])[disabled]:not([disabled=false])) #card{background-color:var(--sinch-comp-card-v2-color-selected-background-disabled);border-color:var(--sinch-comp-card-v2-color-selected-border-disabled)}::slotted([slot=content]){max-width:100%;color:var(--sinch-comp-card-v2-color-default-description-initial);font-size:var(--sinch-comp-card-v2-font-description)}::slotted([slot=title]){max-width:100%}::slotted([slot=footer]){max-width:100%}:host([selected]:not([selected=false])) ::slotted([slot=content]){color:var(--sinch-comp-card-v2-color-selected-description-initial)}:host([disabled]:not([disabled=false])) ::slotted([slot=content]){color:var(--sinch-comp-card-v2-color-default-description-disabled)}:host([selected]:not([selected=false])[disabled]:not([disabled=false])) ::slotted([slot=content]){color:var(--sinch-comp-card-v2-color-selected-description-disabled)}\u003c/style\u003e\u003cdiv id=\"card\"\u003e\u003cdiv id=\"card-media\"\u003e\u003cslot name=\"media\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv id=\"body\"\u003e\u003cdiv id=\"card-title\"\u003e\u003cslot name=\"title\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv id=\"card-content\"\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv id=\"card-footer\"\u003e\u003cslot name=\"footer\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$V = document.createElement(\"template\");\ntemplate$V.innerHTML = templateHTML$V;\nconst CLICK_EVENTS = [\"click\", \"-click\"];\nclass CardV2 extends NectaryElement {\n  #$slots;\n  #controller = null;\n  #clickEventListeners = /* @__PURE__ */ new Map();\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$V.content.cloneNode(true));\n    this.#$slots = shadowRoot.querySelectorAll(\"slot\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#setupEventListeners();\n    this.#updateClickableState();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller?.abort();\n    this.#controller = null;\n  }\n  addEventListener(type, listener, options, isInitial = false) {\n    super.addEventListener(type, listener, options);\n    if (!isInitial \u0026\u0026 this.#isClickEvent(type)) {\n      this.#handleClickListenerAdded(type, listener);\n    }\n  }\n  removeEventListener(type, listener, options) {\n    super.removeEventListener(type, listener, options);\n    if (this.#isClickEvent(type)) {\n      this.#handleClickListenerRemoved(type, listener);\n    }\n  }\n  #isClickEvent(type) {\n    return CLICK_EVENTS.includes(type);\n  }\n  #setupEventListeners() {\n    this.#controller = new AbortController();\n    const options = { signal: this.#controller.signal };\n    const handleClick = (e) =\u003e {\n      if (this.disabled) {\n        e.stopPropagation();\n        e.preventDefault();\n      } else {\n        this.dispatchEvent(\n          new CustomEvent(\"-click\")\n        );\n      }\n    };\n    const handleReactClick = (e) =\u003e {\n      getReactEventHandler(this, \"on-click\")?.(e);\n    };\n    this.addEventListener(\"click\", handleClick, options, true);\n    this.addEventListener(\"-click\", handleReactClick, options, true);\n    const handleSlotChange = (slot) =\u003e {\n      const isEmpty = slot.assignedNodes().length \u003c= 0;\n      setClass(slot.parentElement, \"empty\", isEmpty);\n    };\n    this.#$slots.forEach((slot) =\u003e {\n      handleSlotChange(slot);\n      slot.addEventListener(\"slotchange\", () =\u003e handleSlotChange(slot), options);\n    });\n  }\n  #updateClickableState() {\n    const hasClickHandler = this.hasAttribute(\"onclick\") === true || Boolean(getReactEventHandler(this, \"on-click\"));\n    if (this.hasAttribute(\"clickable\") === false \u0026\u0026 hasClickHandler) {\n      updateBooleanAttribute(this, \"clickable\", true);\n    }\n  }\n  #handleClickListenerAdded(type, listener) {\n    const listeners = this.#clickEventListeners.get(type) ?? /* @__PURE__ */ new Set();\n    if (!listeners.has(listener)) {\n      listeners.add(listener);\n      this.#clickEventListeners.set(type, listeners);\n    }\n    if (this.hasAttribute(\"clickable\") === false) {\n      updateBooleanAttribute(this, \"clickable\", true);\n    }\n  }\n  #handleClickListenerRemoved(type, listener) {\n    const listeners = this.#clickEventListeners.get(type);\n    listeners?.delete(listener);\n    const hasListeners = Array.from(this.#clickEventListeners.values()).some((set) =\u003e set.size \u003e 0);\n    if (!hasListeners \u0026\u0026 this.getAttribute(\"clickable\") === \"\") {\n      updateBooleanAttribute(this, \"clickable\", false);\n    }\n  }\n  static get observedAttributes() {\n    return [\"clickable\", \"disabled\", \"selected\"];\n  }\n  attributeChangedCallback(name, _oldVal, newVal) {\n    switch (name) {\n      case \"clickable\": {\n        const isClickable = isAttrTrue(newVal);\n        if (isClickable) {\n          updateAttribute(this, \"role\", \"button\");\n          updateAttribute(this, \"tabindex\", \"0\");\n        } else {\n          updateAttribute(this, \"role\", null);\n          updateAttribute(this, \"tabindex\", null);\n        }\n        break;\n      }\n      case \"selected\":\n      case \"disabled\": {\n        const bool = isAttrTrue(newVal);\n        const titleElement = this.querySelector(\"sinch-card-v2-title\");\n        if (titleElement !== null) {\n          updateBooleanAttribute(titleElement, name, bool);\n        }\n        break;\n      }\n    }\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set disabled(value) {\n    updateBooleanAttribute(this, \"disabled\", value);\n  }\n  get selected() {\n    return getBooleanAttribute(this, \"selected\");\n  }\n  set selected(value) {\n    updateBooleanAttribute(this, \"selected\", value);\n  }\n}\ndefineCustomElement(\"sinch-card-v2\", CardV2);\nconst templateHTML$U = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle;outline:0}#wrapper{display:flex;flex-direction:row;box-sizing:border-box;width:100%;min-height:24px;--sinch-local-color-background:var(--sinch-comp-checkbox-color-default-background-initial);--sinch-local-color-background-hover:var(--sinch-comp-checkbox-color-default-background-hover);--sinch-local-color-background-active:var(--sinch-comp-checkbox-color-default-background-active);--sinch-local-color-border:var(--sinch-comp-checkbox-color-default-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-checkbox-color-default-border-hover);--sinch-local-color-border-active:var(--sinch-comp-checkbox-color-default-border-active);--sinch-local-color-text:var(--sinch-comp-checkbox-color-default-text-initial)}:host([invalid])\u003e#wrapper{--sinch-local-color-background:var(--sinch-comp-checkbox-color-invalid-background-initial);--sinch-local-color-background-hover:var(--sinch-comp-checkbox-color-invalid-background-hover);--sinch-local-color-background-active:var(--sinch-comp-checkbox-color-invalid-background-active);--sinch-local-color-border:var(--sinch-comp-checkbox-color-invalid-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-checkbox-color-invalid-border-hover);--sinch-local-color-border-active:var(--sinch-comp-checkbox-color-invalid-border-active);--sinch-local-color-text:var(--sinch-comp-checkbox-color-invalid-text-initial)}:host([checked])\u003e#wrapper{--sinch-local-color-background:var(--sinch-comp-checkbox-color-checked-background-initial);--sinch-local-color-background-hover:var(--sinch-comp-checkbox-color-checked-background-hover);--sinch-local-color-background-active:var(--sinch-comp-checkbox-color-checked-background-active);--sinch-local-color-border:var(--sinch-comp-checkbox-color-checked-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-checkbox-color-checked-border-hover);--sinch-local-color-border-active:var(--sinch-comp-checkbox-color-checked-border-active)}:host([disabled])\u003e#wrapper{--sinch-local-color-background:var(--sinch-comp-checkbox-color-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-checkbox-color-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-checkbox-color-disabled-text-initial)}:host([disabled][checked])\u003e#wrapper{--sinch-local-color-background:var(--sinch-comp-checkbox-color-checked-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-checkbox-color-checked-disabled-border-initial)}#checkbox{width:18px;height:18px;cursor:pointer}:host([disabled]) #checkbox{cursor:initial}#icon-container{position:relative;width:18px;height:18px;align-self:flex-start;margin-top:3px}#checkbox::before{content:\"\";position:absolute;inset:-3px;border:2px solid var(--sinch-comp-checkbox-color-default-outline-focus);border-radius:calc(var(--sinch-comp-checkbox-shape-radius) + 3px);transition:opacity .1s linear;opacity:0;box-sizing:border-box;pointer-events:none}:host(:focus-visible) #checkbox::before{opacity:1}#checkbox::after{content:\"\";position:absolute;width:18px;height:18px;inset:0;margin:auto;background-color:var(--sinch-local-color-background);border:1px solid var(--sinch-local-color-border);border-radius:var(--sinch-comp-checkbox-shape-radius);transition:background-color .1s linear;box-sizing:border-box;pointer-events:none}:host(:hover:not([disabled])) #checkbox::after{background-color:var(--sinch-local-color-background-hover);border-color:var(--sinch-local-color-border-hover)}:host(:active:not([disabled])) #checkbox::after{background-color:var(--sinch-local-color-background-active);border-color:var(--sinch-local-color-border-active)}#icon-checkmark,#icon-indeterminate{position:absolute;left:1px;top:1px;width:16px;height:16px;transition:opacity .1s linear;opacity:0;pointer-events:none;fill:var(--sinch-sys-color-surface-primary-default)}:host(:not([indeterminate])[checked]) #icon-checkmark{opacity:1}:host([indeterminate][checked]) #icon-indeterminate{opacity:1}@media (prefers-reduced-motion){#checkbox::after,#checkbox::before,#icon-checkmark,#icon-indeterminate{transition:none}}#label{flex:1;align-self:center;padding-left:8px;font:var(--sinch-comp-checkbox-font-label);cursor:pointer;--sinch-global-color-text:var(--sinch-local-color-text)}:host(:not([text])) #label,:host([text=\"\"]) #label{display:none}:host([disabled]) #label{cursor:initial}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"icon-container\"\u003e\u003cdiv id=\"checkbox\"\u003e\u003c/div\u003e\u003csvg id=\"icon-checkmark\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003cpath d=\"M9 16.17 5.53 12.7a.996.996 0 1 0-1.41 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71a.996.996 0 1 0-1.41-1.41L9 16.17Z\"/\u003e\u003c/svg\u003e \u003csvg id=\"icon-indeterminate\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003cpath d=\"M18 13H6c-.55 0-1-.45-1-1s.45-1 1-1h12c.55 0 1 .45 1 1s-.45 1-1 1Z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\u003csinch-rich-text id=\"label\"\u003e\u003c/sinch-rich-text\u003e\u003c/div\u003e';\nconst template$U = document.createElement(\"template\");\ntemplate$U.innerHTML = templateHTML$U;\nclass Checkbox extends NectaryElement {\n  #$label;\n  #controller = null;\n  #internals;\n  static formAssociated = true;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$U.content.cloneNode(true));\n    this.#internals = this.attachInternals();\n    this.#$label = shadowRoot.querySelector(\"#label\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"checkbox\");\n    this.#internals.role = \"checkbox\";\n    this.tabIndex = 0;\n    this.addEventListener(\"click\", this.#onClick, options);\n    this.addEventListener(\"focus\", this.#onFocus, options);\n    this.addEventListener(\"blur\", this.#onBlur, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, options);\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, options);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  formAssociatedCallback() {\n    setFormValue(this.#internals, this.#getFormValue());\n  }\n  formResetCallback() {\n    this.checked = false;\n    setFormValue(this.#internals, \"\");\n  }\n  formStateRestoreCallback(state) {\n    if (this.#internals.form === null || getBooleanAttribute(this.#internals.form, \"data-form-state-restore\") === false) {\n      return;\n    }\n    if (state !== null) {\n      const value = typeof state === \"string\" ? state : state.get(this.name);\n      this.checked = (value?.toString() ?? \"\").length \u003e 0;\n      setFormValue(this.#internals, this.#getFormValue());\n    }\n  }\n  #getFormValue() {\n    return this.checked ? this.value.length \u003e 0 ? this.value : \"on\" : \"\";\n  }\n  static get observedAttributes() {\n    return [\n      \"checked\",\n      \"disabled\",\n      \"text\",\n      \"invalid\",\n      \"indeterminate\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        updateAttribute(this.#$label, \"text\", newVal);\n        updateAttribute(this.#$label, \"aria-label\", newVal);\n        updateAttribute(this, \"aria-label\", newVal);\n        break;\n      }\n      case \"checked\": {\n        const isChecked = isAttrTrue(newVal);\n        updateExplicitBooleanAttribute(this, \"aria-checked\", isChecked);\n        updateBooleanAttribute(this, \"checked\", isChecked);\n        this.#internals.ariaChecked = isChecked.toString();\n        setFormValue(this.#internals, this.#getFormValue());\n        break;\n      }\n      case \"disabled\": {\n        const isDisabled = isAttrTrue(newVal);\n        updateExplicitBooleanAttribute(this, \"aria-disabled\", isDisabled);\n        this.#internals.ariaDisabled = isDisabled.toString();\n        updateBooleanAttribute(this, \"disabled\", isDisabled);\n        break;\n      }\n      case \"invalid\":\n      case \"indeterminate\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  set name(value) {\n    updateAttribute(this, \"name\", value);\n  }\n  get name() {\n    return getAttribute(this, \"name\", \"\");\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set checked(isChecked) {\n    updateBooleanAttribute(this, \"checked\", isChecked);\n  }\n  get checked() {\n    return getBooleanAttribute(this, \"checked\");\n  }\n  set indeterminate(isIndeterminate) {\n    updateBooleanAttribute(this, \"indeterminate\", isIndeterminate);\n  }\n  get indeterminate() {\n    return getBooleanAttribute(this, \"indeterminate\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set invalid(isInvalid) {\n    updateBooleanAttribute(this, \"invalid\", isInvalid);\n  }\n  get invalid() {\n    return getBooleanAttribute(this, \"invalid\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\");\n  }\n  get focusable() {\n    return true;\n  }\n  #onClick = () =\u003e {\n    if (this.disabled) {\n      return;\n    }\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail: !this.checked })\n    );\n  };\n  #onFocus = () =\u003e {\n    this.dispatchEvent(\n      new CustomEvent(\"-focus\")\n    );\n  };\n  #onBlur = () =\u003e {\n    this.dispatchEvent(\n      new CustomEvent(\"-blur\")\n    );\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  #onFocusReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.(e);\n  };\n  #onBlurReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-checkbox\", Checkbox);\nconst getChipColorBg = (id) =\u003e {\n  return `var(--sinch-comp-chip-color-${id}-default-background-initial)`;\n};\nconst getChipColorFg = (id) =\u003e {\n  return `var(--sinch-comp-chip-color-${id}-default-foreground-initial)`;\n};\nconst templateHTML$T = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle;outline:0;cursor:pointer}#button{all:initial;position:relative;display:flex;flex-direction:row;align-items:center;gap:4px;width:100%;height:var(--sinch-comp-chip-size-container-m);padding:0 5px 0 9px;border-radius:var(--sinch-comp-chip-shape-radius);background-color:var(--sinch-comp-chip-color-neutral-default-background-initial);box-sizing:border-box;--sinch-global-color-text:var(--sinch-comp-chip-color-neutral-default-foreground-initial);--sinch-global-color-icon:var(--sinch-comp-chip-color-neutral-default-foreground-initial);--sinch-global-size-icon:var(--sinch-comp-chip-size-icon-m)}:host(:focus-visible)\u003e#button::after{content:\"\";position:absolute;inset:-4px;border-radius:calc(var(--sinch-comp-chip-shape-radius) + 4px);border:2px solid var(--sinch-comp-chip-color-outiline-focus);pointer-events:none}#text{flex:1;--sinch-comp-text-font:var(--sinch-comp-chip-font-size-m-label)}:host([small]) #button{height:var(--sinch-comp-chip-size-container-s);padding:0 3px 0 7px;--sinch-global-size-icon:var(--sinch-comp-chip-size-icon-s)}:host([small]) #text{--sinch-comp-text-font:var(--sinch-comp-chip-font-size-s-label)}::slotted([slot=icon]){margin-left:-4px}\u003c/style\u003e\u003cdiv id=\"button\" inert\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003csinch-text id=\"text\" type=\"xs\" ellipsis\u003e\u003c/sinch-text\u003e\u003cslot name=\"right-icon\"\u003e\u003csinch-icon icons-version=\"2\" name=\"circle-cross\" id=\"icon-close\"\u003e\u003c/sinch-icon\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$T = document.createElement(\"template\");\ntemplate$T.innerHTML = templateHTML$T;\nclass Chip extends NectaryElement {\n  #$text;\n  #$button;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$T.content.cloneNode(true));\n    this.#$button = shadowRoot.querySelector(\"#button\");\n    this.#$text = shadowRoot.querySelector(\"#text\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.setAttribute(\"role\", \"button\");\n    this.tabIndex = 0;\n    this.addEventListener(\"click\", this.#onClick, { signal });\n    this.addEventListener(\"focus\", this.#onFocus, { signal });\n    this.addEventListener(\"blur\", this.#onBlur, { signal });\n    this.addEventListener(\"keydown\", this.#onKeydown, { signal });\n    this.addEventListener(\"-click\", this.#onClickReactHandler, { signal });\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, { signal });\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, { signal });\n    this.#updateColor();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"text\", \"color\", \"small\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"color\": {\n        this.#updateColor();\n        break;\n      }\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        updateAttribute(this, \"aria-label\", newVal);\n        updateAttribute(this.#$button, \"aria-label\", `Delete ${newVal}`);\n        break;\n      }\n      case \"small\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  get color() {\n    return getAttribute(this, \"color\");\n  }\n  set color(value) {\n    updateAttribute(this, \"color\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get small() {\n    return getBooleanAttribute(this, \"small\");\n  }\n  set small(isSmall) {\n    updateBooleanAttribute(this, \"small\", isSmall);\n  }\n  #updateColor() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const colorName = this.color;\n    if (colorName !== null \u0026\u0026 colorName.length \u003e 0) {\n      const bg = getChipColorBg(colorName);\n      const fg = getChipColorFg(colorName);\n      this.#$button.style.setProperty(\"background-color\", bg);\n      this.#$button.style.setProperty(\"--sinch-global-color-text\", fg);\n      this.#$button.style.setProperty(\"--sinch-global-color-icon\", fg);\n    } else {\n      this.#$button.style.removeProperty(\"background-color\");\n      this.#$button.style.removeProperty(\"--sinch-global-color-text\");\n      this.#$button.style.removeProperty(\"--sinch-global-color-icon\");\n    }\n  }\n  get focusable() {\n    return true;\n  }\n  #onKeydown = (e) =\u003e {\n    switch (e.code) {\n      case \"Space\": {\n        this.click();\n      }\n    }\n  };\n  #onClick = () =\u003e {\n    this.dispatchEvent(\n      new CustomEvent(\"-click\")\n    );\n  };\n  #onFocus = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n  #onClickReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-click\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-chip\", Chip);\nconst getSwatchColorBg = (id) =\u003e {\n  return `var(--sinch-comp-color-swatch-color-${id}-background)`;\n};\nconst getSwatchColorFg = (id) =\u003e {\n  return `var(--sinch-comp-color-swatch-color-${id}-foreground)`;\n};\nconst templateHTML$S = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle}#wrapper{width:var(--sinch-global-size-icon,32px);height:var(--sinch-global-size-icon,32px);border-radius:50%}#wrapper.no-color{background:linear-gradient(45deg,var(--sinch-ref-color-violet-200),var(--sinch-ref-color-honey-200),var(--sinch-ref-color-grass-200),var(--sinch-ref-color-ocean-200),var(--sinch-ref-color-violet-200))}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003c/div\u003e';\nconst template$S = document.createElement(\"template\");\ntemplate$S.innerHTML = templateHTML$S;\nclass ColorSwatch extends NectaryElement {\n  #$wrapper;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$S.content.cloneNode(true));\n    this.#$wrapper = shadowRoot.querySelector(\"#wrapper\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#updateColor();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n  }\n  static get observedAttributes() {\n    return [\"name\"];\n  }\n  attributeChangedCallback(name) {\n    switch (name) {\n      case \"name\": {\n        this.#updateColor();\n        break;\n      }\n    }\n  }\n  get name() {\n    return getAttribute(this, \"name\");\n  }\n  set name(value) {\n    updateAttribute(this, \"name\", value);\n  }\n  #updateColor() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const colorName = this.name;\n    if (colorName !== null \u0026\u0026 colorName.length \u003e 0) {\n      const bg = getSwatchColorBg(colorName);\n      this.#$wrapper.style.setProperty(\"background-color\", bg);\n      setClass(this.#$wrapper, \"no-color\", false);\n    } else {\n      this.#$wrapper.style.removeProperty(\"background-color\");\n      setClass(this.#$wrapper, \"no-color\", true);\n    }\n  }\n}\ndefineCustomElement(\"sinch-color-swatch\", ColorSwatch);\nconst createThrottle = (delayFn, cancelFn) =\u003e (cb) =\u003e {\n  let id = null;\n  const delayCallback = () =\u003e {\n    id = null;\n    cb();\n  };\n  return {\n    fn: () =\u003e {\n      if (id === null) {\n        id = delayFn(delayCallback);\n      }\n    },\n    cancel: () =\u003e {\n      if (id !== null) {\n        cancelFn(id);\n      }\n    }\n  };\n};\nconst throttleAnimationFrame = createThrottle(globalThis.requestAnimationFrame, globalThis.cancelAnimationFrame);\nconst orientationValues$2 = [\n  \"top-left\",\n  \"top-right\",\n  \"bottom-left\",\n  \"bottom-right\",\n  \"bottom-stretch\",\n  \"bottom-center\",\n  \"top-stretch\",\n  \"top-center\",\n  \"center-left\",\n  \"center-right\"\n];\nconst bodyEl$1 = document.body;\nconst disableOverscroll = () =\u003e {\n  bodyEl$1.__pop_counter__ = (bodyEl$1.__pop_counter__ ?? 0) + 1;\n  if (bodyEl$1.__pop_counter__ === 1) {\n    bodyEl$1.style.setProperty(\"overscroll-behavior\", \"none\");\n    document.documentElement.style.setProperty(\"overscroll-behavior\", \"none\");\n  }\n};\nconst enableOverscroll = () =\u003e {\n  bodyEl$1.__pop_counter__ = Math.max(0, (bodyEl$1.__pop_counter__ ?? 0) - 1);\n  if (bodyEl$1.__pop_counter__ === 0) {\n    bodyEl$1.style.removeProperty(\"overscroll-behavior\");\n    document.documentElement.style.removeProperty(\"overscroll-behavior\");\n  }\n};\nconst templateHTML$R = '\u003cstyle\u003e:host{display:contents;position:relative}dialog{position:fixed;left:0;top:0;margin:0;outline:0;padding:0;border:none;box-sizing:border-box;max-width:unset;max-height:unset;z-index:1;background:0 0;overflow:visible}dialog:not([open]){display:none}dialog::backdrop{background-color:transparent}#content{position:relative;z-index:1}#target-open{display:flex;flex-direction:column;position:absolute;left:0;top:0}#focus{display:none;position:absolute;width:0;height:0}\u003c/style\u003e\u003cslot id=\"target\" name=\"target\" aria-haspopup=\"dialog\" aria-expanded=\"false\"\u003e\u003c/slot\u003e\u003cdiv id=\"focus\"\u003e\u003c/div\u003e\u003cdialog id=\"dialog\"\u003e\u003cdiv id=\"target-open\"\u003e\u003cslot name=\"target-open\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv id=\"content\"\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/dialog\u003e';\nconst template$R = document.createElement(\"template\");\ntemplate$R.innerHTML = templateHTML$R;\nclass Pop extends NectaryElement {\n  #$targetWrapper;\n  #$focus;\n  #$dialog;\n  #resizeThrottle;\n  #resizeObserver;\n  #$targetSlot;\n  #$targetOpenSlot;\n  #$contentSlot;\n  #$targetOpenWrapper;\n  #targetActiveElement = null;\n  #controller;\n  #keydownContext;\n  #visibilityContext;\n  #targetStyleValue = null;\n  #modalWidth = 0;\n  #modalHeight = 0;\n  #scrollableParents = [];\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$R.content.cloneNode(true));\n    this.#$targetWrapper = shadowRoot.querySelector(\"#target\");\n    this.#$focus = shadowRoot.querySelector(\"#focus\");\n    this.#$dialog = shadowRoot.querySelector(\"#dialog\");\n    this.#$targetSlot = shadowRoot.querySelector('slot[name=\"target\"]');\n    this.#$targetOpenSlot = shadowRoot.querySelector('slot[name=\"target-open\"]');\n    this.#$contentSlot = shadowRoot.querySelector('slot[name=\"content\"]');\n    this.#$targetOpenWrapper = shadowRoot.querySelector(\"#target-open\");\n    this.#resizeThrottle = throttleAnimationFrame(this.#updateOrientation);\n    this.#resizeObserver = new ResizeObserver(() =\u003e {\n      this.#resizeThrottle.fn();\n    });\n    this.#keydownContext = new Context(this.#$contentSlot, \"keydown\");\n    this.#visibilityContext = new Context(this.#$contentSlot, \"visibility\");\n    this.#controller = new AbortController();\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    if (this.#controller === null) {\n      this.#controller = new AbortController();\n    }\n    const { signal } = this.#controller;\n    this.#keydownContext.listen(signal);\n    this.#visibilityContext.listen(signal);\n    this.setAttribute(\"role\", \"dialog\");\n    this.#$dialog.addEventListener(\"cancel\", this.#onCancel, { signal });\n    this.#$dialog.addEventListener(\"mousedown\", this.#onBackdropMouseDown, { signal });\n    this.addEventListener(\"-close\", this.#onCloseReactHandler, { signal });\n    subscribeContext(this, \"visibility\", this.#onContextVisibility, signal);\n    if (getBooleanAttribute(this, \"open\")) {\n      this.#onExpand();\n    }\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n    this.#resizeThrottle.cancel();\n    this.#resizeObserver.disconnect();\n    this.#onCollapse();\n  }\n  static get observedAttributes() {\n    return [\n      \"orientation\",\n      \"open\"\n    ];\n  }\n  get allowScroll() {\n    return getBooleanAttribute(this, \"allow-scroll\");\n  }\n  get hideOutsideViewport() {\n    return getBooleanAttribute(this, \"hide-outside-viewport\");\n  }\n  set modal(isModal) {\n    updateBooleanAttribute(this, \"modal\", isModal);\n  }\n  get modal() {\n    return getBooleanAttribute(this, \"modal\");\n  }\n  set open(isOpen) {\n    updateBooleanAttribute(this, \"open\", isOpen);\n  }\n  get open() {\n    return getBooleanAttribute(this, \"open\");\n  }\n  get orientation() {\n    return getLiteralAttribute(this, orientationValues$2, \"orientation\");\n  }\n  set orientation(value) {\n    updateLiteralAttribute(this, orientationValues$2, \"orientation\", value);\n  }\n  set inset(inset) {\n    updateIntegerAttribute(this, \"inset\", inset);\n  }\n  get inset() {\n    return getIntegerAttribute(this, \"inset\", 0);\n  }\n  get footprintRect() {\n    return this.#getTargetRect();\n  }\n  get popoverRect() {\n    return getRect(this.#$dialog);\n  }\n  get shouldCloseOnBackdropClick() {\n    return !getBooleanAttribute(this, \"disable-backdrop-close\");\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"open\": {\n        const shouldOpen = isAttrTrue(newVal);\n        if (shouldOpen) {\n          requestAnimationFrame(() =\u003e {\n            if (this.isDomConnected \u0026\u0026 getBooleanAttribute(this, \"open\")) {\n              this.#onExpand();\n            }\n          });\n        } else {\n          this.#onCollapse();\n        }\n        updateBooleanAttribute(this, \"open\", shouldOpen);\n        break;\n      }\n      case \"orientation\": {\n        if (this.#$dialog.open) {\n          this.#updateOrientation();\n        }\n        break;\n      }\n    }\n  }\n  #getTargetRect() {\n    let item = getFirstSlotElement(this.#$targetSlot, true);\n    if (item === null \u0026\u0026 this.#$dialog.open) {\n      item = getFirstSlotElement(this.#$targetOpenSlot, true);\n    }\n    if (item === null) {\n      return getRect(this.#$targetWrapper);\n    }\n    if (Reflect.has(item, \"footprintRect\")) {\n      return item.footprintRect;\n    }\n    return getRect(item);\n  }\n  #getFirstTargetElement(slot) {\n    const item = getFirstSlotElement(slot, true);\n    if (item === null) {\n      return this.#$targetWrapper;\n    }\n    return item;\n  }\n  #onExpand() {\n    if (!this.isDomConnected || this.#$dialog.open) {\n      return;\n    }\n    this.#$targetSlot.addEventListener(\"blur\", this.#stopEventPropagation, true);\n    this.#$focus.setAttribute(\"tabindex\", \"-1\");\n    this.#$focus.style.display = \"block\";\n    this.#$focus.addEventListener(\"focus\", this.#captureRelatedActiveElement);\n    this.#$focus.focus();\n    this.#$focus.removeEventListener(\"focus\", this.#captureRelatedActiveElement);\n    this.#$targetSlot.removeEventListener(\"blur\", this.#stopEventPropagation, true);\n    this.#$focus.removeAttribute(\"tabindex\");\n    this.#$focus.removeAttribute(\"style\");\n    if (this.modal || !this.allowScroll) {\n      this.#$dialog.showModal();\n    } else {\n      this.#$dialog.show();\n    }\n    this.#$targetWrapper.setAttribute(\"aria-expanded\", \"true\");\n    this.#updateOrientation();\n    this.#resizeObserver.observe(this.#$dialog);\n    if (this.modal) {\n      getFirstFocusableElement(this.#$contentSlot)?.focus();\n    } else {\n      if (!this.allowScroll) {\n        const $targetEl = this.#getFirstTargetElement(this.#$targetSlot);\n        const targetElComputedStyle = getComputedStyle($targetEl);\n        const marginLeft = parseInt(targetElComputedStyle.marginLeft);\n        const marginRight = parseInt(targetElComputedStyle.marginRight);\n        const marginTop = parseInt(targetElComputedStyle.marginTop);\n        const marginBottom = parseInt(targetElComputedStyle.marginBottom);\n        const targetRect = this.#getTargetRect();\n        this.#$targetWrapper.style.setProperty(\"display\", \"block\");\n        this.#$targetWrapper.style.setProperty(\"width\", `${targetRect.width + marginLeft + marginRight}px`);\n        this.#$targetWrapper.style.setProperty(\"height\", `${targetRect.height + marginTop + marginBottom}px`);\n        this.#$targetOpenWrapper.style.setProperty(\"width\", `${targetRect.width}px`);\n        this.#$targetOpenWrapper.style.setProperty(\"height\", `${targetRect.height}px`);\n        this.#targetStyleValue = $targetEl.getAttribute(\"style\");\n        $targetEl.style.setProperty(\"margin\", \"0\");\n        $targetEl.style.setProperty(\"position\", \"static\");\n        if (targetElComputedStyle.transform !== \"none\") {\n          const matrix = new DOMMatrixReadOnly(targetElComputedStyle.transform);\n          $targetEl.style.setProperty(\"transform\", matrix.translate(-matrix.e, -matrix.f).toString());\n        }\n        getFirstSlotElement(this.#$targetSlot)?.setAttribute(\"slot\", \"target-open\");\n      }\n      const activeSlot = this.allowScroll ? this.#$targetSlot : this.#$targetOpenSlot;\n      activeSlot.addEventListener(\"keydown\", this.#onTargetKeydown);\n      if (this.#targetActiveElement !== null) {\n        activeSlot.addEventListener(\"focus\", this.#stopEventPropagation, true);\n        this.#targetActiveElement.focus();\n        activeSlot.removeEventListener(\"focus\", this.#stopEventPropagation, true);\n        if (!isElementFocused(this.#targetActiveElement)) {\n          requestAnimationFrame(() =\u003e {\n            if (this.isDomConnected \u0026\u0026 this.#$dialog.open) {\n              activeSlot.addEventListener(\"focus\", this.#stopEventPropagation, true);\n              this.#targetActiveElement.focus();\n              activeSlot.removeEventListener(\"focus\", this.#stopEventPropagation, true);\n            }\n          });\n        }\n      }\n    }\n    if (!this.allowScroll) {\n      disableOverscroll();\n    } else {\n      this.#scrollableParents = getScrollableParents(this.#getFirstTargetElement(this.#$targetSlot));\n      this.#scrollableParents.forEach((el) =\u003e {\n        el.addEventListener(\"scroll\", () =\u003e this.#updatePosition(false), { passive: true, capture: true });\n      });\n    }\n    window.addEventListener(\"resize\", this.#onResize);\n    requestAnimationFrame(() =\u003e {\n      if (this.isDomConnected \u0026\u0026 this.#$dialog.open) {\n        this.#$contentSlot.addEventListener(\"slotchange\", this.#onContentSlotChange);\n      }\n    });\n    this.#updatePosition();\n    this.#dispatchContentVisibility(true);\n  }\n  #onCollapse() {\n    if (!this.#$dialog.open) {\n      return;\n    }\n    this.#resizeObserver.disconnect();\n    const isNonModal = !this.modal;\n    const activeSlot = this.allowScroll ? this.#$targetSlot : this.#$targetOpenSlot;\n    this.#dispatchContentVisibility(false);\n    activeSlot.removeEventListener(\"keydown\", this.#onTargetKeydown);\n    if (isNonModal) {\n      activeSlot.addEventListener(\"blur\", this.#captureActiveElement, true);\n    }\n    this.#$dialog.close();\n    this.#$targetWrapper.setAttribute(\"aria-expanded\", \"false\");\n    if (isNonModal) {\n      activeSlot.removeEventListener(\"blur\", this.#captureActiveElement, true);\n    }\n    if (isNonModal \u0026\u0026 !this.allowScroll) {\n      const targetEl = this.#getFirstTargetElement(this.#$targetOpenSlot);\n      targetEl.style.removeProperty(\"margin\");\n      targetEl.style.removeProperty(\"position\");\n      targetEl.style.removeProperty(\"transform\");\n      if (this.#targetStyleValue !== null) {\n        targetEl.setAttribute(\"style\", this.#targetStyleValue);\n        this.#targetStyleValue = null;\n      }\n      getFirstSlotElement(this.#$targetOpenSlot)?.setAttribute(\"slot\", \"target\");\n      this.#$targetWrapper.style.removeProperty(\"display\");\n      this.#$targetWrapper.style.removeProperty(\"width\");\n      this.#$targetWrapper.style.removeProperty(\"height\");\n    }\n    if (this.#targetActiveElement !== null) {\n      if (!isElementFocused(this.#targetActiveElement)) {\n        this.#$targetSlot.addEventListener(\"focus\", this.#stopEventPropagation, true);\n        this.#targetActiveElement.focus({ preventScroll: true });\n        this.#$targetSlot.removeEventListener(\"focus\", this.#stopEventPropagation, true);\n        if (!isElementFocused(this.#targetActiveElement)) {\n          const $targetEl = this.#targetActiveElement;\n          requestAnimationFrame(() =\u003e {\n            if (this.isDomConnected \u0026\u0026 !this.#$dialog.open) {\n              this.#$targetSlot.addEventListener(\"focus\", this.#stopEventPropagation, true);\n              $targetEl.focus({ preventScroll: true });\n              this.#$targetSlot.removeEventListener(\"focus\", this.#stopEventPropagation, true);\n            }\n          });\n        }\n        this.#targetActiveElement = null;\n      }\n    }\n    if (!this.allowScroll) {\n      enableOverscroll();\n    } else {\n      this.#scrollableParents.forEach((el) =\u003e {\n        el.removeEventListener(\"scroll\", () =\u003e this.#updatePosition(false), { capture: true });\n      });\n    }\n    this.#resizeThrottle.cancel();\n    window.removeEventListener(\"resize\", this.#onResize);\n    this.#scrollableParents = [];\n    this.#$contentSlot.removeEventListener(\"slotchange\", this.#onContentSlotChange);\n  }\n  #onResize = () =\u003e {\n    this.#resizeThrottle.fn();\n  };\n  #updatePosition = (updateWidth) =\u003e {\n    const targetRect = this.modal || this.allowScroll ? this.#getTargetRect() : this.#$targetWrapper.getBoundingClientRect();\n    const orient = this.orientation;\n    const modalWidth = this.#modalWidth;\n    const modalHeight = this.#modalHeight;\n    const inset = this.inset;\n    let xPos = 0;\n    let yPos = 0;\n    if (orient === \"bottom-right\" || orient === \"top-right\" || orient === \"top-stretch\" || orient === \"bottom-stretch\") {\n      xPos = targetRect.x;\n    }\n    if (orient === \"bottom-left\" || orient === \"top-left\") {\n      xPos = targetRect.x + targetRect.width - modalWidth;\n    }\n    if (orient === \"bottom-center\" || orient === \"top-center\") {\n      xPos = targetRect.x + targetRect.width / 2 - modalWidth / 2;\n    }\n    if (orient === \"center-right\") {\n      xPos = targetRect.x + targetRect.width;\n    }\n    if (orient === \"center-left\") {\n      xPos = targetRect.x - modalWidth;\n    }\n    if (orient === \"bottom-left\" || orient === \"bottom-right\" || orient === \"bottom-stretch\" || orient === \"bottom-center\") {\n      yPos = targetRect.y + targetRect.height;\n    }\n    if (orient === \"top-left\" || orient === \"top-right\" || orient === \"top-stretch\" || orient === \"top-center\") {\n      yPos = targetRect.y - modalHeight;\n    }\n    if (orient === \"center-left\" || orient === \"center-right\") {\n      yPos = targetRect.y + targetRect.height / 2 - modalHeight / 2;\n    }\n    const clampedXPos = Math.max(inset, Math.min(xPos, window.innerWidth - modalWidth - inset));\n    const clampedYPos = Math.max(inset, Math.min(yPos, window.innerHeight - modalHeight - inset));\n    if (this.hideOutsideViewport \u0026\u0026 this.#isPopPointInViewport(xPos, yPos)) {\n      this.#$dialog.style.setProperty(\"visibility\", \"hidden\");\n    } else {\n      this.#$dialog.style.removeProperty(\"visibility\");\n    }\n    this.#$dialog.style.setProperty(\"left\", `${clampedXPos}px`);\n    this.#$dialog.style.setProperty(\"top\", `${clampedYPos}px`);\n    if (updateWidth === true) {\n      this.#$dialog.style.setProperty(\"width\", `${modalWidth}px`);\n    }\n    if (!this.modal \u0026\u0026 !this.allowScroll) {\n      const targetLeftPos = targetRect.x - clampedXPos;\n      const targetTopPos = targetRect.y - clampedYPos;\n      this.#$targetOpenWrapper.style.setProperty(\"left\", `${targetLeftPos}px`);\n      this.#$targetOpenWrapper.style.setProperty(\"top\", `${targetTopPos}px`);\n    }\n  };\n  #updateOrientation = () =\u003e {\n    this.#$dialog.style.setProperty(\"width\", \"max-content\");\n    const targetRect = this.#getTargetRect();\n    const modalRect = this.#$dialog.getBoundingClientRect();\n    const orient = this.orientation;\n    const shouldSetWidthToTarget = orient === \"top-stretch\" || orient === \"bottom-stretch\";\n    const modalHeight = modalRect.height;\n    const modalWidth = shouldSetWidthToTarget ? targetRect.width : modalRect.width;\n    this.#modalHeight = modalHeight;\n    this.#modalWidth = modalWidth;\n    this.#updatePosition(true);\n  };\n  #onBackdropMouseDown = (e) =\u003e {\n    if (this.shouldCloseOnBackdropClick \u0026\u0026 isTargetEqual(e, this.#$dialog)) {\n      const rect = this.popoverRect;\n      const isInside = e.x \u003e= rect.x \u0026\u0026 e.x \u003c rect.x + rect.width \u0026\u0026 e.y \u003e= rect.y \u0026\u0026 e.y \u003c rect.y + rect.height;\n      if (!isInside) {\n        e.stopPropagation();\n        this.#dispatchCloseEvent();\n      }\n    }\n  };\n  #onCancel = (e) =\u003e {\n    e.preventDefault();\n    e.stopPropagation();\n    this.#dispatchCloseEvent();\n  };\n  #onCloseReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-close\")?.(e);\n    getReactEventHandler(this, \"onClose\")?.(e);\n  };\n  #dispatchCloseEvent() {\n    this.dispatchEvent(\n      new CustomEvent(\"-close\")\n    );\n  }\n  #captureRelatedActiveElement = (e) =\u003e {\n    e.stopPropagation();\n    this.#targetActiveElement = e.relatedTarget;\n  };\n  #captureActiveElement = (e) =\u003e {\n    e.stopPropagation();\n    this.#targetActiveElement = e.target;\n  };\n  #stopEventPropagation = (e) =\u003e {\n    e.stopPropagation();\n  };\n  #dispatchContentVisibility(isVisible2) {\n    this.#visibilityContext.dispatch(isVisible2);\n  }\n  #onTargetKeydown = (e) =\u003e {\n    this.#keydownContext.dispatch({\n      code: e.code,\n      preventDefault: () =\u003e {\n        e.preventDefault();\n      }\n    });\n  };\n  #onContextVisibility = (e) =\u003e {\n    if (!e.detail) {\n      this.#dispatchCloseEvent();\n    }\n  };\n  #onContentSlotChange = (e) =\u003e {\n    e.stopPropagation();\n    if (this.#$dialog.open) {\n      this.#updateOrientation();\n    }\n  };\n  #isPopPointInViewport(x, y) {\n    const inset = this.inset;\n    const modalWidth = this.#modalWidth;\n    const modalHeight = this.#modalHeight;\n    const clampedX = Math.max(inset, Math.min(x, window.innerWidth - modalWidth - inset));\n    const clampedY = Math.max(inset, Math.min(y, window.innerHeight - modalHeight - inset));\n    return Math.abs(clampedX - x) \u003e 2 || Math.abs(clampedY - y) \u003e 2;\n  }\n}\ndefineCustomElement(\"sinch-pop\", Pop);\nclass TooltipState {\n  #timerId = null;\n  #state = \"hide\";\n  #options;\n  constructor(options) {\n    this.#options = options;\n  }\n  updateOptions(options) {\n    this.#options = {\n      ...this.#options,\n      ...options\n    };\n  }\n  show() {\n    if (this.#options.isOpened === false) {\n      return;\n    }\n    switch (this.#state) {\n      case \"hide\": {\n        this.#switchToHideToShow();\n        break;\n      }\n      case \"show-to-hide\": {\n        this.#switchToState(\"show\");\n        break;\n      }\n    }\n  }\n  hide() {\n    if (this.#options.isOpened === true) {\n      return;\n    }\n    switch (this.#state) {\n      case \"hide-to-show\": {\n        this.#onHideAnimationEnd();\n        break;\n      }\n      case \"show\": {\n        this.#switchToShowToHide();\n        break;\n      }\n    }\n  }\n  interrupt() {\n    switch (this.#state) {\n      case \"hide-to-show\": {\n        this.#onHideAnimationEnd();\n        break;\n      }\n      case \"show\": {\n        this.#switchToShowToHide(true, false);\n        break;\n      }\n      case \"show-to-hide\": {\n        this.#switchToShowToHide(true, false);\n        break;\n      }\n    }\n  }\n  destroy() {\n    switch (this.#state) {\n      case \"hide-to-show\": {\n        this.#onHideAnimationEnd();\n        break;\n      }\n      case \"show\": {\n        this.#switchToShowToHide(true, true);\n        break;\n      }\n      case \"show-to-hide\": {\n        this.#switchToShowToHide(true, true);\n        break;\n      }\n      case \"hide\": {\n        this.#onHideAnimationEnd();\n        break;\n      }\n    }\n  }\n  #switchToHideToShow() {\n    this.#switchToState(\"hide-to-show\");\n    this.#options.onShowStart();\n    if (this.#options.showDelay === 0) {\n      this.#onSwitchToShow();\n    } else if (this.#options.isOpened !== void 0) {\n      this.#timerId = window.setTimeout(this.#onSwitchToShow, 100);\n    } else {\n      this.#timerId = window.setTimeout(this.#onSwitchToShow, this.#options.showDelay);\n    }\n  }\n  #switchToShowToHide(skipDelay, skipHideAnimation) {\n    this.#switchToState(\"show-to-hide\");\n    if (skipDelay === true || this.#options.hideDelay === 0 || this.#options.isOpened !== void 0) {\n      this.#onShowToHideEnd(skipHideAnimation);\n    } else {\n      this.#timerId = window.setTimeout(this.#onShowToHideEnd, this.#options.hideDelay);\n    }\n  }\n  #onSwitchToShow = () =\u003e {\n    this.#switchToState(\"show\");\n    this.#options.onShowEnd();\n  };\n  #onShowToHideEnd = (skipHideAnimation) =\u003e {\n    this.#switchToState(\"hide\");\n    this.#options.onHideStart();\n    if (skipHideAnimation === true || this.#options.hideAnimationDuration === 0) {\n      this.#onHideAnimationEnd();\n    } else {\n      this.#timerId = window.setTimeout(this.#onHideAnimationEnd, this.#options.hideAnimationDuration);\n    }\n  };\n  #onHideAnimationEnd = () =\u003e {\n    this.#switchToState(\"hide\");\n    this.#options.onHideEnd();\n  };\n  #switchToState(nextState) {\n    this.#state = nextState;\n    if (this.#timerId !== null) {\n      clearTimeout(this.#timerId);\n      this.#timerId = null;\n    }\n  }\n}\nconst typeValues$3 = [\"fast\", \"slow\"];\nconst orientationValues$1 = [\n  \"top\",\n  \"bottom\",\n  \"left\",\n  \"right\",\n  \"top-left\",\n  \"top-right\",\n  \"bottom-left\",\n  \"bottom-right\"\n];\nconst textAlignValues = [\n  \"right\",\n  \"center\",\n  \"left\"\n];\nconst getPopOrientation$1 = (orientation) =\u003e {\n  if (orientation === \"top\") {\n    return \"top-center\";\n  }\n  if (orientation === \"bottom\") {\n    return \"bottom-center\";\n  }\n  if (orientation === \"left\") {\n    return \"center-left\";\n  }\n  if (orientation === \"right\") {\n    return \"center-right\";\n  }\n  return orientation;\n};\nconst templateHTML$Q = '\u003cstyle\u003e:host{display:contents}#content-wrapper{padding-bottom:8px;filter:drop-shadow(var(--sinch-comp-tooltip-shadow))}:host([orientation=left]) #content-wrapper{padding-bottom:0;padding-right:8px}:host([orientation=right]) #content-wrapper{padding-bottom:0;padding-left:8px}:host([orientation^=bottom]) #content-wrapper{padding-bottom:0;padding-top:8px}#content{position:relative;display:block;max-width:300px;padding:2px 6px;box-sizing:border-box;background-color:var(--sinch-local-color-background);border-radius:var(--sinch-comp-tooltip-shape-radius);pointer-events:none;opacity:0;--sinch-local-color-background:var(--sinch-comp-tooltip-color-background);--sinch-global-color-text:var(--sinch-comp-tooltip-color-text)}#text{word-break:break-word;pointer-events:none;--sinch-comp-text-font:var(--sinch-comp-tooltip-font-body)}#tip{position:absolute;left:50%;top:100%;transform:translateX(-50%) rotate(0);transform-origin:top center;fill:var(--sinch-local-color-background);pointer-events:none}#tip.hidden{display:none}:host([orientation=left]) #tip{transform:translateX(-50%) rotate(270deg);top:50%;left:100%}:host([orientation=right]) #tip{transform:translateX(-50%) rotate(90deg);top:50%;left:0}:host([orientation^=bottom]) #tip{transform:translateX(-50%) rotate(180deg);top:0}:host([text-align=right]) #text{--sinch-comp-text-align:right}:host([text-align=center]) #text{--sinch-comp-text-align:center}:host([text-align=left]) #text{--sinch-comp-text-align:left}\u003c/style\u003e\u003csinch-pop id=\"pop\"\u003e\u003cslot id=\"target\" slot=\"target\"\u003e\u003c/slot\u003e\u003cdiv id=\"content-wrapper\" slot=\"content\"\u003e\u003cdiv id=\"content\"\u003e\u003csinch-text id=\"text\" type=\"s\"\u003e\u003c/sinch-text\u003e\u003csvg id=\"tip\" width=\"8\" height=\"4\" aria-hidden=\"true\"\u003e\u003cpath d=\"m4 4 4-4h-8l4 4Z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\u003c/div\u003e\u003c/sinch-pop\u003e';\nconst TIP_SIZE$1 = 8;\nconst SHOW_DELAY_SLOW = 1e3;\nconst SHOW_DELAY_FAST = 250;\nconst HIDE_DELAY = 0;\nconst ANIMATION_DURATION$1 = 100;\nconst template$Q = document.createElement(\"template\");\ntemplate$Q.innerHTML = templateHTML$Q;\nclass Tooltip extends NectaryElement {\n  #$pop;\n  #$tooltipText;\n  #$content;\n  #$contentWrapper;\n  #$tip;\n  #$target;\n  #controller = null;\n  #tooltipState;\n  #animation = null;\n  #shouldReduceMotion = false;\n  #isSubscribed = false;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$Q.content.cloneNode(true));\n    this.#$pop = shadowRoot.querySelector(\"#pop\");\n    this.#$tooltipText = shadowRoot.querySelector(\"#text\");\n    this.#$content = shadowRoot.querySelector(\"#content\");\n    this.#$contentWrapper = shadowRoot.querySelector(\"#content-wrapper\");\n    this.#$tip = shadowRoot.querySelector(\"#tip\");\n    this.#$target = shadowRoot.querySelector(\"#target\");\n    this.#shouldReduceMotion = shouldReduceMotion();\n    this.#tooltipState = new TooltipState({\n      showDelay: SHOW_DELAY_SLOW,\n      hideDelay: this.#shouldReduceMotion ? HIDE_DELAY + ANIMATION_DURATION$1 : HIDE_DELAY,\n      hideAnimationDuration: this.#shouldReduceMotion ? 0 : ANIMATION_DURATION$1,\n      onShowStart: this.#onStateShowStart,\n      onShowEnd: this.#onStateShowEnd,\n      onHideStart: this.#onStateHideStart,\n      onHideEnd: this.#onStateHideEnd\n    });\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.setAttribute(\"role\", \"tooltip\");\n    this.#$pop.addEventListener(\"-close\", this.#onPopClose, options);\n    this.addEventListener(\"-show\", this.#onShowReactHandler, options);\n    this.addEventListener(\"-hide\", this.#onHideReactHandler, options);\n    updateAttribute(this.#$pop, \"orientation\", getPopOrientation$1(this.orientation));\n    updateBooleanAttribute(this.#$pop, \"hide-outside-viewport\", !this.showOutsideViewport);\n    this.#updateText();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#tooltipState.destroy();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\n      \"is-opened\",\n      \"text\",\n      \"orientation\",\n      \"text-align\",\n      \"type\",\n      \"aria-label\",\n      \"aria-description\",\n      \"show-outside-viewport\",\n      \"allow-scroll\"\n    ];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"text\": {\n        this.#updateText();\n        break;\n      }\n      case \"orientation\": {\n        updateAttribute(this.#$pop, \"orientation\", getPopOrientation$1(this.orientation));\n        if (this.#isOpen()) {\n          this.#resetTipOrientation();\n          this.#updateTipOrientation();\n        }\n        break;\n      }\n      case \"text-align\": {\n        updateAttribute(this.#$pop, \"text-align\", newVal);\n        break;\n      }\n      case \"type\": {\n        this.#tooltipState.updateOptions({\n          showDelay: newVal === \"fast\" ? SHOW_DELAY_FAST : SHOW_DELAY_SLOW\n        });\n        break;\n      }\n      case \"aria-label\":\n      case \"aria-description\": {\n        updateAttribute(this.#$pop, name, newVal);\n        break;\n      }\n      case \"show-outside-viewport\": {\n        updateBooleanAttribute(this.#$pop, \"hide-outside-viewport\", !this.showOutsideViewport);\n        break;\n      }\n      case \"is-opened\": {\n        this.#tooltipState.updateOptions({\n          isOpened: this.isOpenedControlled\n        });\n        if (this.isOpenedControlled === true) {\n          updateBooleanAttribute(this.#$pop, \"disable-backdrop-close\", true);\n          this.#tooltipState.show();\n        } else if (this.isOpenedControlled === false) {\n          updateBooleanAttribute(this.#$pop, \"disable-backdrop-close\", false);\n          this.#tooltipState.hide();\n        }\n        break;\n      }\n      case \"allow-scroll\": {\n        updateAttribute(this.#$pop, \"allow-scroll\", newVal);\n        break;\n      }\n    }\n  }\n  get isOpenedControlled() {\n    const isOpenedAttr = getAttribute(this, \"is-opened\");\n    return isOpenedAttr === null ? void 0 : isOpenedAttr !== \"false\";\n  }\n  get showOutsideViewport() {\n    return getBooleanAttribute(this, \"show-outside-viewport\");\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get orientation() {\n    return getLiteralAttribute(this, orientationValues$1, \"orientation\", \"top\");\n  }\n  set orientation(value) {\n    updateLiteralAttribute(this, orientationValues$1, \"orientation\", value);\n  }\n  get \"text-align\"() {\n    return getLiteralAttribute(this, textAlignValues, \"text-align\", \"left\");\n  }\n  set \"text-align\"(value) {\n    updateLiteralAttribute(this, textAlignValues, \"text-align\", value);\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues$3, \"type\", \"slow\");\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues$3, \"type\", value);\n  }\n  get footprintRect() {\n    return this.#$pop.footprintRect;\n  }\n  get tooltipRect() {\n    return this.#$pop.popoverRect;\n  }\n  // Begin hide animation if shown, skipping HIDE_DELAY wait\n  #onMouseDown = () =\u003e {\n    this.#tooltipState.destroy();\n  };\n  // Underlying pop asks for a close\n  #onPopClose = () =\u003e {\n    this.#tooltipState.destroy();\n  };\n  #onMouseEnter = () =\u003e {\n    this.#tooltipState.show();\n  };\n  #onMouseLeave = (e) =\u003e {\n    if (!this.#isOpen() || e.relatedTarget !== this.#$contentWrapper \u0026\u0026 e.relatedTarget !== this.#$target) {\n      this.#tooltipState.hide();\n    }\n  };\n  #onScroll = () =\u003e {\n    this.#tooltipState.destroy();\n  };\n  // Tooltip begins to wait for SHOW_DELAY on mouseenter\n  #onStateShowStart = () =\u003e {\n    if (this.isOpenedControlled === void 0) {\n      this.#subscribeScroll();\n      this.#subscribeMouseLeaveEvents();\n    }\n  };\n  // SHOW_DELAY ended, tooltip can be shown with animation\n  #onStateShowEnd = () =\u003e {\n    this.#dispatchShowEvent();\n    updateBooleanAttribute(this.#$pop, \"open\", true);\n    requestAnimationFrame(this.#updateTipOrientation);\n    if (this.#animation !== null) {\n      this.#animation.updatePlaybackRate(1);\n      this.#animation.play();\n    } else {\n      this.#animation = this.#$content.animate({\n        opacity: [0, 1]\n      }, {\n        duration: this.#shouldReduceMotion ? 0 : ANIMATION_DURATION$1,\n        iterations: 1,\n        fill: \"forwards\"\n      });\n    }\n  };\n  // HIDE_DELAY ended, begin tooltip hide animation\n  #onStateHideStart = () =\u003e {\n    this.#animation.updatePlaybackRate(-1);\n    this.#animation.play();\n  };\n  // Hide animation ended, tooltip can be hidden\n  #onStateHideEnd = () =\u003e {\n    if (this.#isOpen()) {\n      this.#animation.finish();\n      this.#dispatchHideEvent();\n      updateBooleanAttribute(this.#$pop, \"open\", false);\n    }\n    this.#resetTipOrientation();\n    this.#unsubscribeMouseLeaveEvents();\n    this.#unsubscribeScroll();\n  };\n  #resetTipOrientation() {\n    this.#$tip.style.top = \"\";\n    this.#$tip.style.left = \"\";\n  }\n  #updateTipOrientation = () =\u003e {\n    const orient = this.orientation;\n    if (!(\"footprintRect\" in this.#$pop)) {\n      requestAnimationFrame(this.#updateTipOrientation);\n      return;\n    }\n    const targetRect = this.#$pop.footprintRect;\n    const contentRect = this.#$content.getBoundingClientRect();\n    const diffX = targetRect.x - contentRect.x;\n    const diffY = targetRect.y - contentRect.y;\n    if (orient === \"left\" || orient === \"right\") {\n      const yPos = Math.max(TIP_SIZE$1, Math.min(diffY + targetRect.height / 2, contentRect.height - TIP_SIZE$1));\n      this.#$tip.style.top = `${yPos}px`;\n    } else {\n      let xPos = Math.max(TIP_SIZE$1, Math.min(diffX + targetRect.width / 2, contentRect.width - TIP_SIZE$1));\n      if (orient === \"bottom-left\" || orient === \"top-left\") {\n        xPos = Math.max(xPos, contentRect.width * 0.75);\n      }\n      if (orient === \"bottom-right\" || orient === \"top-right\") {\n        xPos = Math.min(xPos, contentRect.width * 0.25);\n      }\n      this.#$tip.style.left = `${xPos}px`;\n    }\n    setClass(this.#$tip, \"hidden\", rectOverlap(targetRect, contentRect));\n  };\n  #updateText() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    if (this.#isSubscribed) {\n      this.#tooltipState.destroy();\n      this.#unsubscribeMouseEnterEvent();\n    }\n    const text = this.text;\n    this.#$tooltipText.textContent = text;\n    if (text.length !== 0) {\n      this.#subscribeMouseEnterEvent();\n    }\n  }\n  #subscribeMouseEnterEvent() {\n    if (!this.isDomConnected || this.#isSubscribed) {\n      return;\n    }\n    this.#$target.addEventListener(\"mouseenter\", this.#onMouseEnter, {\n      signal: this.#controller.signal\n    });\n    this.#isSubscribed = true;\n  }\n  #unsubscribeMouseEnterEvent() {\n    this.#$target.removeEventListener(\"mouseenter\", this.#onMouseEnter);\n    this.#isSubscribed = false;\n  }\n  #subscribeMouseLeaveEvents() {\n    const options = { signal: this.#controller.signal };\n    this.#$target.addEventListener(\"mousedown\", this.#onMouseDown, options);\n    this.#$target.addEventListener(\"mouseleave\", this.#onMouseLeave, options);\n    this.#$contentWrapper.addEventListener(\"mouseenter\", this.#onMouseEnter, options);\n    this.#$contentWrapper.addEventListener(\"mouseleave\", this.#onMouseLeave, options);\n  }\n  #unsubscribeMouseLeaveEvents() {\n    this.#$target.removeEventListener(\"mousedown\", this.#onMouseDown);\n    this.#$target.removeEventListener(\"mouseleave\", this.#onMouseLeave);\n    this.#$contentWrapper.removeEventListener(\"mouseenter\", this.#onMouseEnter);\n    this.#$contentWrapper.removeEventListener(\"mouseleave\", this.#onMouseLeave);\n  }\n  #subscribeScroll() {\n    window.addEventListener(\"wheel\", this.#onScroll, true);\n  }\n  #unsubscribeScroll() {\n    window.removeEventListener(\"wheel\", this.#onScroll, true);\n  }\n  #isOpen() {\n    return this.#$pop.hasAttribute(\"open\");\n  }\n  #dispatchShowEvent() {\n    this.dispatchEvent(new CustomEvent(\"-show\"));\n  }\n  #dispatchHideEvent() {\n    this.dispatchEvent(new CustomEvent(\"-hide\"));\n  }\n  #onShowReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-show\")?.();\n    getReactEventHandler(this, \"onShow\")?.();\n  };\n  #onHideReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-hide\")?.();\n    getReactEventHandler(this, \"onHide\")?.();\n  };\n}\ndefineCustomElement(\"sinch-tooltip\", Tooltip);\nconst templateHTML$P = '\u003cstyle\u003e:host{display:block;outline:0}#wrapper{width:44px;height:56px;padding:12px 6px;box-sizing:border-box}#swatch-wrapper{position:relative;cursor:pointer;width:32px;height:32px}#swatch-wrapper::after{content:\"\";position:absolute;width:34px;height:34px;inset:-3px;border:2px solid var(--sinch-comp-color-menu-option-color-default-border-initial);border-radius:50%;pointer-events:none}:host([data-checked]) #swatch-wrapper::after{border-color:var(--sinch-comp-color-menu-option-color-default-border-selected)}:host([data-selected]) #swatch-wrapper::after{border-color:var(--sinch-comp-color-menu-option-color-default-border-focus)}:host(:hover) #swatch-wrapper::after{border-color:var(--sinch-comp-color-menu-option-color-default-border-hover)}:host(:active) #swatch-wrapper::after{border-color:var(--sinch-comp-color-menu-option-color-default-border-active)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003csinch-tooltip id=\"tooltip\"\u003e\u003cdiv id=\"swatch-wrapper\"\u003e\u003csinch-color-swatch id=\"swatch\"\u003e\u003c/sinch-color-swatch\u003e\u003c/div\u003e\u003c/sinch-tooltip\u003e\u003c/div\u003e';\nconst template$P = document.createElement(\"template\");\ntemplate$P.innerHTML = templateHTML$P;\nclass ColorMenuOption extends NectaryElement {\n  #$wrapper;\n  #$tooltip;\n  #$swatch;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$P.content.cloneNode(true));\n    this.#$wrapper = shadowRoot.querySelector(\"#wrapper\");\n    this.#$tooltip = shadowRoot.querySelector(\"#tooltip\");\n    this.#$swatch = shadowRoot.querySelector(\"#swatch\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"option\");\n  }\n  disconnectedCallback() {\n  }\n  static get observedAttributes() {\n    return [\"value\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"value\": {\n        updateAttribute(this.#$tooltip, \"text\", newVal);\n        updateAttribute(this.#$swatch, \"name\", newVal);\n        if (newVal !== null) {\n          this.#$wrapper.style.setProperty(\"--sinch-global-color-icon\", getSwatchColorFg(newVal));\n        } else {\n          this.#$wrapper.style.removeProperty(\"--sinch-global-color-icon\");\n        }\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n}\ndefineCustomElement(\"sinch-color-menu-option\", ColorMenuOption);\nconst templateHTML$O = '\u003cstyle\u003e:host{display:block;outline:0}#listbox{display:flex;flex-direction:row;flex-wrap:wrap;padding:4px 10px;overflow-y:auto}#listbox.empty{display:none}\u003c/style\u003e\u003cdiv id=\"listbox\" role=\"presentation\"\u003e\u003cslot id=\"options\"\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst NUM_COLS_DEFAULT = 5;\nconst ITEM_WIDTH = 44;\nconst ITEM_HEIGHT$1 = 56;\nconst template$O = document.createElement(\"template\");\ntemplate$O.innerHTML = templateHTML$O;\nclass ColorMenu extends NectaryElement {\n  #$listbox;\n  #$optionsSlot;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$O.content.cloneNode(true));\n    this.#$listbox = shadowRoot.querySelector(\"#listbox\");\n    this.#$optionsSlot = shadowRoot.querySelector(\"#options\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"listbox\");\n    this.tabIndex = 0;\n    this.addEventListener(\"keydown\", this.#onListboxKeyDown, options);\n    this.addEventListener(\"blur\", this.#onListboxBlur, options);\n    this.#$listbox.addEventListener(\"click\", this.#onListboxClick, options);\n    this.#$optionsSlot.addEventListener(\"slotchange\", this.#onSlotChange, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    subscribeContext(this, \"keydown\", this.#onContextKeyDown, signal);\n    subscribeContext(this, \"visibility\", this.#onContextVisibility, signal);\n    this.#onSlotChange();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"value\", \"rows\", \"cols\"];\n  }\n  attributeChangedCallback(name) {\n    switch (name) {\n      case \"value\": {\n        if (this.isDomConnected) {\n          this.#onValueChange();\n        }\n        break;\n      }\n      case \"rows\": {\n        this.#updateRows();\n        break;\n      }\n      case \"cols\": {\n        if (this.isDomConnected) {\n          this.#updateColumns();\n        }\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set colors(value) {\n    updateAttribute(this, \"colors\", value);\n  }\n  get colors() {\n    return getAttribute(this, \"colors\");\n  }\n  set rows(value) {\n    updateIntegerAttribute(this, \"rows\", value);\n  }\n  get rows() {\n    return getIntegerAttribute(this, \"rows\", null);\n  }\n  set cols(value) {\n    updateIntegerAttribute(this, \"cols\", value);\n  }\n  get cols() {\n    return getIntegerAttribute(this, \"cols\", null);\n  }\n  get focusable() {\n    return true;\n  }\n  nthItemRect(index) {\n    const $item = this.#getOptionElements()[index];\n    if ($item != null) {\n      return getRect($item);\n    }\n    return null;\n  }\n  #onSlotChange = () =\u003e {\n    this.#updateColumns();\n    this.#onValueChange();\n  };\n  #updateRows() {\n    const rowsValue = getAttribute(this, \"rows\");\n    this.#$listbox.style.maxHeight = attrValueToPixels(\n      rowsValue,\n      {\n        min: 2,\n        itemSizeMultiplier: ITEM_HEIGHT$1\n      }\n    );\n  }\n  #updateColumns() {\n    const colsValue = getAttribute(this, \"cols\");\n    const numItems = this.#getOptionElements().length;\n    this.#$listbox.style.width = attrValueToPixels(\n      colsValue,\n      {\n        min: 1,\n        max: numItems,\n        defaultValue: Math.min(numItems, NUM_COLS_DEFAULT),\n        itemSizeMultiplier: ITEM_WIDTH\n      }\n    );\n  }\n  #onListboxBlur = () =\u003e {\n    this.#selectOption(null);\n  };\n  #onListboxClick = (e) =\u003e {\n    const target = getTargetByAttribute(e, \"value\");\n    if (target === null) {\n      return;\n    }\n    this.focus();\n    this.#dispatchChangeEvent(target);\n  };\n  #onContextVisibility = (e) =\u003e {\n    if (e.detail) {\n      this.#selectOption(this.#findCheckedOption());\n    } else {\n      this.#selectOption(null);\n    }\n  };\n  #onContextKeyDown = (e) =\u003e {\n    this.#handleKeydown(e.detail);\n  };\n  #onListboxKeyDown = (e) =\u003e {\n    this.#handleKeydown(e);\n  };\n  #handleKeydown(e) {\n    switch (e.code) {\n      case \"Space\":\n      case \"Enter\": {\n        const $option = this.#findSelectedOption();\n        if ($option !== null) {\n          e.preventDefault();\n          this.#dispatchChangeEvent($option);\n        }\n        break;\n      }\n      case \"ArrowLeft\": {\n        e.preventDefault();\n        this.#selectOption(this.#getPrevOption());\n        break;\n      }\n      case \"ArrowRight\": {\n        e.preventDefault();\n        this.#selectOption(this.#getNextOption());\n        break;\n      }\n      case \"ArrowDown\": {\n        e.preventDefault();\n        this.#selectOption(this.#getNextRowOption());\n        break;\n      }\n      case \"ArrowUp\": {\n        e.preventDefault();\n        this.#selectOption(this.#getPrevRowOption());\n        break;\n      }\n    }\n  }\n  #onValueChange() {\n    const value = this.value;\n    for (const $option of this.#getOptionElements()) {\n      const isChecked = value === getAttribute($option, \"value\", \"\");\n      updateBooleanAttribute($option, \"data-checked\", isChecked);\n      updateBooleanAttribute($option, \"data-selected\", isChecked);\n      updateExplicitBooleanAttribute($option, \"aria-selected\", isChecked);\n    }\n  }\n  #getFirstOption() {\n    const $options = this.#getOptionElements();\n    return $options[0] ?? null;\n  }\n  #getLastOption() {\n    const $options = this.#getOptionElements();\n    return $options[$options.length - 1] ?? null;\n  }\n  #getNextOption() {\n    const index = this.#getSelectedOptionIndex();\n    if (index !== null) {\n      const $options = this.#getOptionElements();\n      return $options[(1 + index) % $options.length];\n    }\n    return this.#getFirstOption();\n  }\n  #getPrevOption() {\n    const index = this.#getSelectedOptionIndex();\n    if (index !== null) {\n      const $options = this.#getOptionElements();\n      return $options[(index - 1 + $options.length) % $options.length];\n    }\n    return this.#getLastOption();\n  }\n  #getNextRowOption() {\n    const selectedIndex = this.#getSelectedOptionIndex();\n    if (selectedIndex !== null) {\n      const $options = this.#getOptionElements();\n      const numCols = Math.min(this.cols ?? NUM_COLS_DEFAULT, $options.length);\n      const numColsInLastRow = $options.length % numCols;\n      if (numColsInLastRow \u003e 0) {\n        if (selectedIndex \u003c $options.length - numCols) {\n          return $options[selectedIndex + numCols];\n        }\n        if (numColsInLastRow \u003e 0 \u0026\u0026 selectedIndex \u003c $options.length - numColsInLastRow) {\n          return $options[$options.length - 1];\n        }\n        return $options[selectedIndex + numColsInLastRow - $options.length];\n      }\n      return $options[(selectedIndex + numCols) % $options.length];\n    }\n    return this.#getFirstOption();\n  }\n  #getPrevRowOption() {\n    const selectedIndex = this.#getSelectedOptionIndex();\n    if (selectedIndex !== null) {\n      const $options = this.#getOptionElements();\n      const numCols = Math.min(this.cols ?? NUM_COLS_DEFAULT, $options.length);\n      const numColsInLastRow = $options.length % numCols;\n      if (selectedIndex \u003c numColsInLastRow) {\n        return $options[(selectedIndex - numColsInLastRow + $options.length) % $options.length];\n      }\n      if (selectedIndex \u003c numCols) {\n        return $options[(selectedIndex - numCols - numColsInLastRow + $options.length) % $options.length];\n      }\n      return $options[(selectedIndex - numCols + $options.length) % $options.length];\n    }\n    return this.#getFirstOption();\n  }\n  #selectOption($option) {\n    const hasRows = this.hasAttribute(\"rows\");\n    for (const $op of this.#getOptionElements()) {\n      const isSelected = $op === $option;\n      updateBooleanAttribute($op, \"data-selected\", isSelected);\n      if (isSelected \u0026\u0026 Boolean(hasRows)) {\n        $op.scrollIntoView?.({ block: \"nearest\" });\n      }\n    }\n  }\n  #getOptionElements() {\n    return this.#$optionsSlot.assignedElements();\n  }\n  #getSelectedOptionIndex() {\n    const elements = this.#getOptionElements();\n    for (let i = 0; i \u003c elements.length; i++) {\n      const el = elements[i];\n      if (getBooleanAttribute(el, \"data-selected\")) {\n        return i;\n      }\n    }\n    return null;\n  }\n  #findSelectedOption() {\n    const elements = this.#getOptionElements();\n    for (const el of elements) {\n      if (getBooleanAttribute(el, \"data-selected\")) {\n        return el;\n      }\n    }\n    return null;\n  }\n  #findCheckedOption() {\n    const elements = this.#getOptionElements();\n    const value = this.value;\n    for (const $el of elements) {\n      if (getAttribute($el, \"value\") === value) {\n        return $el;\n      }\n    }\n    return null;\n  }\n  #dispatchChangeEvent($opt) {\n    const value = getAttribute($opt, \"value\", \"\");\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail: value })\n    );\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-color-menu\", ColorMenu);\nconst DAYS_IN_WEEK = 7;\nconst pad$1 = (value) =\u003e {\n  return value.toString().padStart(2, \"0\");\n};\nconst getCalendarMonth = (date, options) =\u003e {\n  const { firstDayOfWeek } = {\n    firstDayOfWeek: 1,\n    ...options\n  };\n  const firstDateOfMonth = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));\n  const lastDateOfMonth = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0));\n  const firstWeekdayOfMonth = firstDateOfMonth.getUTCDay();\n  const lastWeekdayOfMonth = lastDateOfMonth.getUTCDay();\n  const daysInMonth = lastDateOfMonth.getUTCDate();\n  const daysToPrepend = (firstWeekdayOfMonth - firstDayOfWeek + DAYS_IN_WEEK) % DAYS_IN_WEEK;\n  const daysToAppend = (DAYS_IN_WEEK - 1 - lastWeekdayOfMonth + firstDayOfWeek) % DAYS_IN_WEEK;\n  const month = [];\n  let week = [];\n  for (let i = 1 - daysToPrepend; i \u003c= daysInMonth + daysToAppend + 1; i++) {\n    if (i \u003c= 0 || i \u003e daysInMonth) {\n      week.push(null);\n    } else {\n      const result = new Date(date);\n      result.setUTCDate(i);\n      week.push(result);\n    }\n    if (week.length === 7) {\n      month.push(week);\n      week = [];\n    }\n  }\n  return month;\n};\nconst dateToIso = (date) =\u003e {\n  return `${date.getUTCFullYear()}-${pad$1(date.getUTCMonth() + 1)}-${pad$1(date.getUTCDate())}`;\n};\nconst isoToDate = (value) =\u003e {\n  return /* @__PURE__ */ new Date(`${value.substring(0, 10)}T00:00:00Z`);\n};\nconst today = () =\u003e {\n  const today2 = /* @__PURE__ */ new Date();\n  return new Date(Date.UTC(today2.getUTCFullYear(), today2.getUTCMonth(), today2.getUTCDate()));\n};\nconst getDayNames = (locale) =\u003e {\n  const formatter = new Intl.DateTimeFormat(locale, { weekday: \"narrow\", timeZone: \"UTC\" });\n  return [1, 2, 3, 4, 5, 6, 7].map((dd) =\u003e {\n    const date = new Date(Date.UTC(2018, 0, dd));\n    return formatter.format(date);\n  });\n};\nconst getMonthNames = (locale) =\u003e {\n  const formatter = new Intl.DateTimeFormat(locale, { month: \"short\", timeZone: \"UTC\" });\n  return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((mm) =\u003e {\n    const date = new Date(Date.UTC(2018, mm, 1));\n    return formatter.format(date);\n  });\n};\nconst isValidDate = (value) =\u003e {\n  return value instanceof Date \u0026\u0026 !isNaN(value);\n};\nconst compareDates = (a, b) =\u003e {\n  return a.getTime() - b.getTime();\n};\nconst clampMinDate = (date, min) =\u003e {\n  if (compareDates(min, date) \u003e 0) {\n    date.setTime(min.getTime());\n  }\n};\nconst clampMaxDate = (date, max) =\u003e {\n  if (compareDates(date, max) \u003e 0) {\n    date.setTime(max.getTime());\n  }\n};\nconst incMonth = (date, max) =\u003e {\n  const currentDay = date.getUTCDate();\n  const currentMonth = date.getUTCMonth();\n  const currentYear = date.getUTCFullYear();\n  let nextMonth = currentMonth + 1;\n  let nextYear = currentYear;\n  if (nextMonth \u003e 11) {\n    nextMonth = 0;\n    nextYear++;\n  }\n  const nextMonthLastDay = new Date(Date.UTC(nextYear, nextMonth + 1, 0));\n  const maxDayInNextMonth = nextMonthLastDay.getUTCDate();\n  const targetDay = Math.min(currentDay, maxDayInNextMonth);\n  date.setUTCFullYear(nextYear, nextMonth, targetDay);\n  clampMaxDate(date, max);\n};\nconst decMonth = (date, min) =\u003e {\n  const currentDay = date.getUTCDate();\n  const currentMonth = date.getUTCMonth();\n  const currentYear = date.getUTCFullYear();\n  let prevMonth = currentMonth - 1;\n  let prevYear = currentYear;\n  if (prevMonth \u003c 0) {\n    prevMonth = 11;\n    prevYear--;\n  }\n  const prevMonthLastDay = new Date(Date.UTC(prevYear, prevMonth + 1, 0));\n  const maxDayInPrevMonth = prevMonthLastDay.getUTCDate();\n  const targetDay = Math.min(currentDay, maxDayInPrevMonth);\n  date.setUTCFullYear(prevYear, prevMonth, targetDay);\n  clampMinDate(date, min);\n};\nconst incYear = (date, max) =\u003e {\n  const currentDay = date.getUTCDate();\n  const currentMonth = date.getUTCMonth();\n  const currentYear = date.getUTCFullYear();\n  const nextYear = currentYear + 1;\n  if (currentMonth === 1 \u0026\u0026 currentDay === 29) {\n    const isNextYearLeap = new Date(Date.UTC(nextYear, 1, 29)).getUTCDate() === 29;\n    if (!isNextYearLeap) {\n      date.setUTCFullYear(nextYear, currentMonth, 28);\n    } else {\n      date.setUTCFullYear(nextYear, currentMonth, currentDay);\n    }\n  } else {\n    date.setUTCFullYear(nextYear, currentMonth, currentDay);\n  }\n  clampMaxDate(date, max);\n};\nconst decYear = (date, min) =\u003e {\n  const currentDay = date.getUTCDate();\n  const currentMonth = date.getUTCMonth();\n  const currentYear = date.getUTCFullYear();\n  const prevYear = currentYear - 1;\n  if (currentMonth === 1 \u0026\u0026 currentDay === 29) {\n    const isPrevYearLeap = new Date(Date.UTC(prevYear, 1, 29)).getUTCDate() === 29;\n    if (!isPrevYearLeap) {\n      date.setUTCFullYear(prevYear, currentMonth, 28);\n    } else {\n      date.setUTCFullYear(prevYear, currentMonth, currentDay);\n    }\n  } else {\n    date.setUTCFullYear(prevYear, currentMonth, currentDay);\n  }\n  clampMinDate(date, min);\n};\nconst canGoPrevMonth = (date, min) =\u003e {\n  const prevMonth = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 0));\n  return compareDates(prevMonth, min) \u003e= 0;\n};\nconst canGoNextMonth = (date, max) =\u003e {\n  const nextMonth = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 1));\n  return compareDates(max, nextMonth) \u003e= 0;\n};\nconst canGoNextYear = (date, max) =\u003e {\n  const nextYear = new Date(Date.UTC(date.getUTCFullYear() + 1, 0, 1));\n  return compareDates(max, nextYear) \u003e= 0;\n};\nconst canGoPrevYear = (date, min) =\u003e {\n  const prevYear = new Date(Date.UTC(date.getUTCFullYear(), 0, 0));\n  return compareDates(prevYear, min) \u003e= 0;\n};\nconst isDateBetween = (date, min, max) =\u003e {\n  if (min === null || max === null) {\n    return false;\n  }\n  return compareDates(date, min) \u003e= 0 \u0026\u0026 compareDates(max, date) \u003e= 0;\n};\nconst areDatesEqual = (a, b) =\u003e {\n  if (b === null) {\n    return false;\n  }\n  return compareDates(a, b) === 0;\n};\nconst cloneDate = (date) =\u003e {\n  return new Date(date.getTime());\n};\nconst sortDates = (dateTuple) =\u003e {\n  if (compareDates(dateTuple[0], dateTuple[1]) \u003e 0) {\n    return [dateTuple[1], dateTuple[0]];\n  }\n  return dateTuple;\n};\nconst isDateOnScreen = (uiDate, date) =\u003e {\n  if (uiDate === null || date === null) {\n    return false;\n  }\n  const firstDateOfMonth = new Date(Date.UTC(uiDate.getUTCFullYear(), uiDate.getUTCMonth(), 1));\n  const lastDateOfMonth = new Date(Date.UTC(uiDate.getUTCFullYear(), uiDate.getUTCMonth() + 1, 0));\n  return isDateBetween(date, firstDateOfMonth, lastDateOfMonth);\n};\nconst templateHTML$N = '\u003cstyle\u003e:host{display:block;outline:0}#content{width:fit-content;box-sizing:border-box;padding:16px;display:flex;flex-direction:column;gap:8px}#month{display:flex;flex-direction:column;row-gap:8px}.week{display:flex;flex-direction:row;column-gap:8px}.week.empty{display:none}.day{all:initial;font:var(--sinch-comp-date-picker-font-day);width:24px;height:24px;line-height:22px;color:var(--sinch-comp-date-picker-day-color-default-text-initial);background-color:var(--sinch-comp-date-picker-day-color-default-background-initial);border:1px solid var(--sinch-comp-date-picker-day-color-default-border-initial);border-radius:var(--sinch-comp-date-picker-day-shape-radius);text-align:center;box-sizing:border-box;user-select:none;cursor:pointer}.day:focus-visible{outline:1px solid var(--sinch-comp-date-picker-day-color-default-outline-focus);outline-offset:1px}.day:disabled{cursor:initial;color:var(--sinch-comp-date-picker-day-color-disabled-text-initial)}.day:enabled:hover{background-color:var(--sinch-comp-date-picker-day-color-default-background-hover)}.day:enabled.range{background-color:var(--sinch-comp-date-picker-day-color-default-range-background)}.day:enabled.selected{color:var(--sinch-comp-date-picker-day-color-checked-text-initial);background-color:var(--sinch-comp-date-picker-day-color-checked-background-initial);border-color:var(--sinch-comp-date-picker-day-color-checked-border-initial)}.day.today{font:var(--sinch-comp-date-picker-font-today);color:var(--sinch-comp-date-picker-today-color-default-text-initial);background-color:var(--sinch-comp-date-picker-today-color-default-background-initial);border-color:var(--sinch-comp-date-picker-today-color-default-border-initial)}.day.today:hover{background-color:var(--sinch-comp-date-picker-today-color-default-background-hover)}.day.today:disabled{color:var(--sinch-comp-date-picker-today-color-disabled-text-initial);border-color:var(--sinch-comp-date-picker-today-color-disabled-border-initial)}.day.today.selected{color:var(--sinch-comp-date-picker-today-color-checked-text-initial);background-color:var(--sinch-comp-date-picker-today-color-checked-background-initial);border-color:var(--sinch-comp-date-picker-today-color-checked-border-initial)}#week-day-names{display:flex;flex-direction:row;gap:8px;height:24px}.week-day-name{font:var(--sinch-comp-date-picker-font-weekday);color:var(--sinch-comp-date-picker-weekday-color-default-text-initial);text-align:center;width:24px;height:24px;line-height:24px;user-select:none;text-transform:uppercase}#content-header{display:flex;flex-direction:row;height:32px;align-items:center}#date{flex:1;text-align:center;text-transform:capitalize;--sinch-com-text-font:var(--sinch-comp-date-picker-font-header);--sinch-global-color-text:var(--sinch-comp-date-picker-header-color-default-text-initial)}#prev-year{margin-left:-4px}#next-year{margin-right:-4px}\u003c/style\u003e\u003cdiv id=\"content\"\u003e\u003cdiv id=\"content-header\"\u003e\u003csinch-button id=\"prev-year\" size=\"s\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-angles-left\" id=\"icon-prev-year\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e\u003csinch-button id=\"prev-month\" size=\"s\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-angle-left\" id=\"icon-prev-month\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e\u003csinch-text id=\"date\" type=\"m\" emphasized aria-live=\"polite\"\u003e\u003c/sinch-text\u003e\u003csinch-button id=\"next-month\" size=\"s\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-angle-right\" id=\"icon-next-month\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e\u003csinch-button id=\"next-year\" size=\"s\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-angles-right\" id=\"icon-next-year\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e\u003c/div\u003e\u003cdiv id=\"week-day-names\"\u003e\u003cdiv class=\"week-day-name\"\u003e\u003c/div\u003e\u003cdiv class=\"week-day-name\"\u003e\u003c/div\u003e\u003cdiv class=\"week-day-name\"\u003e\u003c/div\u003e\u003cdiv class=\"week-day-name\"\u003e\u003c/div\u003e\u003cdiv class=\"week-day-name\"\u003e\u003c/div\u003e\u003cdiv class=\"week-day-name\"\u003e\u003c/div\u003e\u003cdiv class=\"week-day-name\"\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv id=\"month\"\u003e\u003cdiv class=\"week\"\u003e\u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e\u003c/div\u003e\u003cdiv class=\"week\"\u003e\u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e\u003c/div\u003e\u003cdiv class=\"week\"\u003e\u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e\u003c/div\u003e\u003cdiv class=\"week\"\u003e\u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e\u003c/div\u003e\u003cdiv class=\"week\"\u003e\u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e\u003c/div\u003e\u003cdiv class=\"week\"\u003e\u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e \u003cbutton class=\"day\"\u003e\u003c/button\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$N = document.createElement(\"template\");\ntemplate$N.innerHTML = templateHTML$N;\nclass DatePicker extends NectaryElement {\n  #$month;\n  #$weeks;\n  #$days;\n  #$weekDayNames;\n  #uiDate = null;\n  #date1 = null;\n  #date2 = null;\n  #minDate = null;\n  #maxDate = null;\n  #$prevMonth;\n  #$nextMonth;\n  #$prevYear;\n  #$nextYear;\n  #$date;\n  #monthNames;\n  #controller = null;\n  #isHoverSubscribed = false;\n  #internals;\n  static formAssociated = true;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: true });\n    shadowRoot.appendChild(template$N.content.cloneNode(true));\n    this.#internals = this.attachInternals();\n    this.#$prevMonth = shadowRoot.querySelector(\"#prev-month\");\n    this.#$nextMonth = shadowRoot.querySelector(\"#next-month\");\n    this.#$prevYear = shadowRoot.querySelector(\"#prev-year\");\n    this.#$nextYear = shadowRoot.querySelector(\"#next-year\");\n    this.#$date = shadowRoot.querySelector(\"#date\");\n    this.#$month = shadowRoot.querySelector(\"#month\");\n    this.#$days = [];\n    this.#$weeks = [];\n    this.#monthNames = [];\n    shadowRoot.querySelectorAll(\".week\").forEach((week, i) =\u003e {\n      this.#$weeks.push(week);\n      this.#$days[i] = [];\n      week.querySelectorAll(\".day\").forEach((day) =\u003e {\n        this.#$days[i].push(day);\n      });\n    });\n    this.#$weekDayNames = Array.from(shadowRoot.querySelectorAll(\"#week-day-names \u003e .week-day-name\"));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.#$prevMonth.addEventListener(\"click\", this.#onPrevMonthClick, options);\n    this.#$nextMonth.addEventListener(\"click\", this.#onNextMonthClick, options);\n    this.#$prevYear.addEventListener(\"click\", this.#onPrevYearClick, options);\n    this.#$nextYear.addEventListener(\"click\", this.#onNextYearClick, options);\n    this.#$month.addEventListener(\"click\", this.#onDateClick, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n  }\n  disconnectedCallback() {\n    this.#unsubscribeRangeHover();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  formAssociatedCallback() {\n    setFormValue(this.#internals, this.value);\n  }\n  formResetCallback() {\n    this.value = \"\";\n    setFormValue(this.#internals, \"\");\n  }\n  formStateRestoreCallback(state) {\n    if (this.#internals.form === null || getBooleanAttribute(this.#internals.form, \"data-form-state-restore\") === false) {\n      return;\n    }\n    if (state !== null) {\n      const value = typeof state === \"string\" ? state : state.get(this.name);\n      this.value = value?.toString() ?? \"\";\n      setFormValue(this.#internals, value?.toString() ?? \"\");\n    }\n  }\n  static get observedAttributes() {\n    return [\n      \"value\",\n      \"min\",\n      \"max\",\n      \"locale\",\n      \"range\",\n      \"prev-year-aria-label\",\n      \"next-year-aria-label\",\n      \"prev-month-aria-label\",\n      \"next-month-aria-label\"\n    ];\n  }\n  attributeChangedCallback(name, prevValue, newVal) {\n    switch (name) {\n      case \"value\": {\n        this.#onValueChange();\n        break;\n      }\n      case \"min\": {\n        this.#minDate = isoToDate(newVal);\n        if (this.#uiDate !== null) {\n          clampMinDate(this.#uiDate, this.#minDate);\n        }\n        this.#render();\n        break;\n      }\n      case \"max\": {\n        this.#maxDate = isoToDate(newVal);\n        if (this.#uiDate !== null) {\n          clampMaxDate(this.#uiDate, this.#maxDate);\n        }\n        this.#render();\n        break;\n      }\n      case \"locale\": {\n        const names = getDayNames(newVal);\n        this.#$weekDayNames.forEach(($day, i) =\u003e {\n          $day.textContent = names[i];\n        });\n        this.#monthNames = getMonthNames(newVal);\n        this.#render();\n        break;\n      }\n      case \"range\": {\n        const isRange = isAttrTrue(newVal);\n        if (isRange) {\n          this.#onValueChange();\n        } else {\n          this.#unsubscribeRangeHover();\n        }\n        break;\n      }\n      case \"prev-year-aria-label\": {\n        updateAttribute(this.#$prevYear, \"aria-label\", newVal);\n        break;\n      }\n      case \"next-year-aria-label\": {\n        updateAttribute(this.#$nextYear, \"aria-label\", newVal);\n        break;\n      }\n      case \"prev-month-aria-label\": {\n        updateAttribute(this.#$prevMonth, \"aria-label\", newVal);\n        break;\n      }\n      case \"next-month-aria-label\": {\n        updateAttribute(this.#$nextMonth, \"aria-label\", newVal);\n        break;\n      }\n    }\n  }\n  set name(value) {\n    updateAttribute(this, \"name\", value);\n  }\n  get name() {\n    return getAttribute(this, \"name\", \"\");\n  }\n  set locale(value) {\n    updateAttribute(this, \"locale\", value);\n  }\n  get locale() {\n    return getAttribute(this, \"locale\", \"\");\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set min(value) {\n    updateAttribute(this, \"min\", value);\n  }\n  get min() {\n    return getAttribute(this, \"min\", \"\");\n  }\n  set max(value) {\n    updateAttribute(this, \"max\", value);\n  }\n  get max() {\n    return getAttribute(this, \"max\", \"\");\n  }\n  set range(isRanged) {\n    updateBooleanAttribute(this, \"range\", isRanged);\n  }\n  get range() {\n    return getBooleanAttribute(this, \"range\");\n  }\n  set prevMonthAriaLabel(value) {\n    updateAttribute(this, \"prev-month-aria-label\", value);\n  }\n  get prevMonthAriaLabel() {\n    return getAttribute(this, \"prev-month-aria-label\", \"\");\n  }\n  set nextMonthAriaLabel(value) {\n    updateAttribute(this, \"next-month-aria-label\", value);\n  }\n  get nextMonthAriaLabel() {\n    return getAttribute(this, \"next-month-aria-label\", \"\");\n  }\n  get prevYearButtonRect() {\n    return getRect(this.#$prevYear);\n  }\n  get nextYearButtonRect() {\n    return getRect(this.#$nextYear);\n  }\n  get prevMonthButtonRect() {\n    return getRect(this.#$prevMonth);\n  }\n  get nextMonthButtonRect() {\n    return getRect(this.#$nextMonth);\n  }\n  nthButtonRect(index) {\n    if (index \u003c 0 || index \u003e 30) {\n      return null;\n    }\n    const indexOffset = this.#$days[0].findIndex((el) =\u003e el.getAttribute(\"data-date\") !== null);\n    if (indexOffset \u003c 0) {\n      return null;\n    }\n    const rowIndex = Math.floor((indexOffset + index) / 7);\n    const colIndex = (indexOffset + index) % 7;\n    const $el = this.#$days[rowIndex]?.[colIndex];\n    if ($el == null) {\n      return null;\n    }\n    return getRect($el);\n  }\n  #onPrevMonthClick = (e) =\u003e {\n    e.stopPropagation();\n    decMonth(this.#uiDate, this.#minDate);\n    this.#render();\n  };\n  #onNextMonthClick = (e) =\u003e {\n    e.stopPropagation();\n    incMonth(this.#uiDate, this.#maxDate);\n    this.#render();\n  };\n  #onPrevYearClick = (e) =\u003e {\n    e.stopPropagation();\n    decYear(this.#uiDate, this.#minDate);\n    this.#render();\n  };\n  #onNextYearClick = (e) =\u003e {\n    e.stopPropagation();\n    incYear(this.#uiDate, this.#maxDate);\n    this.#render();\n  };\n  #onDateMouseEnter = (e) =\u003e {\n    if (this.#date1 !== null \u0026\u0026 this.#date2 === null) {\n      const hoverDateIso = getTargetAttribute(e, \"data-date\");\n      if (hoverDateIso === null) {\n        return;\n      }\n      const hoverDate = isoToDate(hoverDateIso);\n      const todayDate = today();\n      for (const week of this.#$days) {\n        for (const $day of week) {\n          if ($day.hasAttribute(\"disabled\")) {\n            continue;\n          }\n          const dayDate = isoToDate($day.getAttribute(\"data-date\"));\n          setClass($day, \"range\", !areDatesEqual(todayDate, dayDate) \u0026\u0026 (isDateBetween(dayDate, this.#date1, hoverDate) || isDateBetween(dayDate, hoverDate, this.#date1)));\n        }\n      }\n    }\n  };\n  #onDateClick = (e) =\u003e {\n    e.stopPropagation();\n    const dateIso = getTargetAttribute(e, \"data-date\");\n    if (dateIso === null || dateIso.length === 0) {\n      return;\n    }\n    if (this.range) {\n      if (this.#date1 !== null \u0026\u0026 this.#date2 === null) {\n        const date2 = isoToDate(dateIso);\n        const dateTuple = sortDates([this.#date1, date2]);\n        const value = packCsv(dateTuple.map(dateToIso));\n        this.#date1 = dateTuple[0];\n        this.#date2 = dateTuple[1];\n        this.#unsubscribeRangeHover();\n        this.#render();\n        this.dispatchEvent(\n          new CustomEvent(\"-change\", { detail: value })\n        );\n        return;\n      }\n      this.#date1 = isoToDate(dateIso);\n      this.#date2 = null;\n      this.#subscribeRangeHover();\n      this.#render();\n      return;\n    }\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail: dateIso })\n    );\n  };\n  #onValueChange() {\n    const value = this.value;\n    setFormValue(this.#internals, this.value);\n    this.#date1 = null;\n    this.#date2 = null;\n    if (this.range) {\n      const isoDates = unpackCsv(value);\n      if (isoDates.length === 2) {\n        const date1 = isoToDate(isoDates[0]);\n        const date2 = isoToDate(isoDates[1]);\n        if (isValidDate(date1) \u0026\u0026 isValidDate(date2)) {\n          [this.#date1, this.#date2] = sortDates([date1, date2]);\n          if (this.#uiDate === null || !isDateOnScreen(this.#uiDate, date1) \u0026\u0026 !isDateOnScreen(this.#uiDate, date2)) {\n            this.#uiDate = cloneDate(this.#date1);\n          }\n        } else {\n          this.#uiDate = null;\n        }\n      } else if (isoDates.length === 1) {\n        const date1 = isoToDate(isoDates[0]);\n        if (isValidDate(date1)) {\n          this.#uiDate = date1;\n        }\n      }\n    } else {\n      const valueDate = isoToDate(value);\n      if (isValidDate(valueDate)) {\n        this.#date1 = valueDate;\n        this.#uiDate = cloneDate(this.#date1);\n      } else {\n        this.#uiDate = null;\n      }\n    }\n    if (this.#uiDate === null) {\n      this.#uiDate = today();\n    }\n    if (this.#minDate !== null) {\n      clampMinDate(this.#uiDate, this.#minDate);\n    }\n    if (this.#maxDate !== null) {\n      clampMaxDate(this.#uiDate, this.#maxDate);\n    }\n    this.#render();\n  }\n  #render() {\n    if (this.#uiDate === null || this.#minDate === null || this.#maxDate === null || this.locale === null) {\n      return;\n    }\n    const todayDate = today();\n    const month = getCalendarMonth(this.#uiDate);\n    updateBooleanAttribute(this.#$prevMonth, \"disabled\", canGoPrevMonth(this.#uiDate, this.#minDate) === false);\n    updateBooleanAttribute(this.#$nextMonth, \"disabled\", canGoNextMonth(this.#uiDate, this.#maxDate) === false);\n    updateBooleanAttribute(this.#$prevYear, \"disabled\", canGoPrevYear(this.#uiDate, this.#minDate) === false);\n    updateBooleanAttribute(this.#$nextYear, \"disabled\", canGoNextYear(this.#uiDate, this.#maxDate) === false);\n    this.#$date.textContent = `${this.#monthNames[this.#uiDate.getUTCMonth()]} ${this.#uiDate.getUTCFullYear()}`;\n    for (let wi = 0; wi \u003c this.#$days.length; wi++) {\n      const $week = this.#$days[wi];\n      let isEmptyWeek = true;\n      for (let di = 0; di \u003c $week.length; di++) {\n        const $day = $week[di];\n        const week = month[wi];\n        const day = week?.[di];\n        $day.classList.remove(\"selected\", \"range\", \"today\");\n        if (day == null) {\n          $day.textContent = \"\";\n          $day.removeAttribute(\"data-date\");\n          $day.setAttribute(\"disabled\", \"\");\n          $day.setAttribute(\"aria-hidden\", \"true\");\n        } else {\n          const dayIso = dateToIso(day);\n          $day.textContent = day.getUTCDate().toString();\n          $day.setAttribute(\"data-date\", dayIso);\n          if (isDateBetween(day, this.#minDate, this.#maxDate)) {\n            $day.removeAttribute(\"disabled\");\n            $day.removeAttribute(\"aria-hidden\");\n          } else {\n            $day.setAttribute(\"disabled\", \"\");\n            $day.setAttribute(\"aria-hidden\", \"true\");\n          }\n          if (areDatesEqual(day, this.#date1) || areDatesEqual(day, this.#date2)) {\n            $day.classList.add(\"selected\");\n          } else if (areDatesEqual(day, todayDate)) {\n            $day.classList.add(\"today\");\n          } else if (isDateBetween(day, this.#date1, this.#date2)) {\n            $day.classList.add(\"range\");\n          }\n          isEmptyWeek = false;\n        }\n      }\n      setClass(this.#$weeks[wi], \"empty\", isEmptyWeek);\n    }\n  }\n  #subscribeRangeHover() {\n    if (!this.#isHoverSubscribed) {\n      this.#$month.addEventListener(\"mouseover\", this.#onDateMouseEnter);\n      this.#isHoverSubscribed = true;\n    }\n  }\n  #unsubscribeRangeHover() {\n    if (this.#isHoverSubscribed) {\n      this.#$month.removeEventListener(\"mouseover\", this.#onDateMouseEnter);\n      this.#isHoverSubscribed = false;\n    }\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-date-picker\", DatePicker);\nclass StopEvents extends HTMLElement {\n  #controller = null;\n  constructor() {\n    super();\n    this.style.display = \"contents\";\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const events = unpackCsv(this.getAttribute(\"events\"));\n    for (const event of events) {\n      this.addEventListener(event, this.#stopEvent, { signal });\n    }\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  #stopEvent = (e) =\u003e {\n    e.stopPropagation();\n  };\n}\ndefineCustomElement(\"sinch-stop-events\", StopEvents);\nconst bodyEl = document.body;\nconst disableScroll = () =\u003e {\n  bodyEl.__dialog_counter__ = (bodyEl.__dialog_counter__ ?? 0) + 1;\n  if (bodyEl.__dialog_counter__ === 1) {\n    const scrollWidth = window.innerWidth - document.documentElement.clientWidth;\n    bodyEl.style.overflow = \"hidden\";\n    if (scrollWidth \u003e 0) {\n      bodyEl.style.setProperty(\"padding-right\", `${scrollWidth}px`);\n    }\n  }\n};\nconst enableScroll = () =\u003e {\n  bodyEl.__dialog_counter__ = Math.max(0, (bodyEl.__dialog_counter__ ?? 0) - 1);\n  if (bodyEl.__dialog_counter__ === 0) {\n    bodyEl.style.overflow = \"\";\n    bodyEl.style.removeProperty(\"padding-right\");\n  }\n};\nconst templateHTML$M = '\u003cstyle\u003e:host{display:contents;--sinch-comp-dialog-max-width:512px;--sinch-comp-dialog-max-height:90vh;--sinch-comp-dialog-width:fit-content;--sinch-dialog-close-button-display:unset}#dialog{position:fixed;left:0;right:0;margin:auto;display:flex;flex-direction:column;padding:24px 0;width:var(--sinch-comp-dialog-width);max-width:var(--sinch-comp-dialog-max-width);max-height:var(--sinch-comp-dialog-max-height);border-radius:var(--sinch-comp-dialog-shape-radius);box-sizing:border-box;contain:content;background-color:var(--sinch-comp-dialog-color-default-background-initial);border:none;box-shadow:var(--sinch-comp-dialog-shadow);outline:0}#dialog:not([open]){display:none}dialog::backdrop{background-color:#000;opacity:.55}#header{display:flex;flex-direction:row;align-items:flex-start;margin-bottom:12px;padding:0 24px;gap:8px;--sinch-global-size-icon:24px;--sinch-global-color-icon:var(--sinch-comp-dialog-color-default-icon-initial)}#caption{--sinch-global-color-text:var(--sinch-comp-dialog-color-default-title-initial);--sinch-comp-title-font:var(--sinch-comp-dialog-font-title)}#content{min-height:0;overflow:auto;padding:4px 24px}#action{display:flex;flex-direction:row;justify-content:flex-end;gap:16px;margin-top:20px;padding:0 24px}#action.empty{display:none}#close{display:var(--sinch-dialog-close-button-display,initial);position:relative;left:4px;top:-4px;margin-left:auto}\u003c/style\u003e\u003cdialog id=\"dialog\"\u003e\u003cdiv id=\"header\"\u003e\u003cslot id=\"icon\" name=\"icon\"\u003e\u003c/slot\u003e\u003csinch-title id=\"caption\" type=\"m\" level=\"3\"\u003e\u003c/sinch-title\u003e\u003csinch-button id=\"close\" size=\"s\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-xmark\" id=\"icon-close\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e\u003c/div\u003e\u003cdiv id=\"content\"\u003e\u003csinch-stop-events events=\"close\"\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003c/sinch-stop-events\u003e\u003c/div\u003e\u003cdiv id=\"action\"\u003e\u003csinch-stop-events events=\"close\"\u003e\u003cslot name=\"buttons\"\u003e\u003c/slot\u003e\u003c/sinch-stop-events\u003e\u003c/div\u003e\u003c/dialog\u003e';\nconst template$M = document.createElement(\"template\");\ntemplate$M.innerHTML = templateHTML$M;\nclass Dialog extends NectaryElement {\n  #$dialog;\n  #$closeButton;\n  #$caption;\n  #$actionWrapper;\n  #$actionSlot;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$M.content.cloneNode(true));\n    this.#$dialog = shadowRoot.querySelector(\"#dialog\");\n    this.#$closeButton = shadowRoot.querySelector(\"#close\");\n    this.#$caption = shadowRoot.querySelector(\"#caption\");\n    this.#$actionWrapper = shadowRoot.querySelector(\"#action\");\n    this.#$actionSlot = shadowRoot.querySelector('slot[name=\"buttons\"]');\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.setAttribute(\"role\", \"dialog\");\n    this.#$closeButton.addEventListener(\"click\", this.#onCloseClick, options);\n    this.#$dialog.addEventListener(\n      \"mousedown\",\n      this.#onBackdropMouseDown,\n      options\n    );\n    this.#$dialog.addEventListener(\"cancel\", this.#onCancel, options);\n    this.#$actionSlot.addEventListener(\n      \"slotchange\",\n      this.#onActionSlotChange,\n      options\n    );\n    this.addEventListener(\"-close\", this.#onCloseReactHandler, options);\n    this.#onActionSlotChange();\n    if (this.open) {\n      this.#onExpand();\n    }\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#onCollapse();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"caption\", \"open\", \"close-aria-label\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"caption\": {\n        updateAttribute(this.#$caption, \"text\", newVal);\n        break;\n      }\n      case \"open\": {\n        const shouldOpen = isAttrTrue(newVal);\n        if (shouldOpen) {\n          requestAnimationFrame(() =\u003e {\n            this.#onExpand();\n          });\n        } else {\n          this.#onCollapse();\n        }\n        updateBooleanAttribute(this, \"open\", shouldOpen);\n        break;\n      }\n      case \"close-aria-label\": {\n        updateAttribute(this.#$closeButton, \"aria-label\", newVal);\n        break;\n      }\n    }\n  }\n  set caption(caption) {\n    updateAttribute(this, \"caption\", caption);\n  }\n  get caption() {\n    return getAttribute(this, \"caption\", \"\");\n  }\n  set open(isOpen) {\n    updateBooleanAttribute(this, \"open\", isOpen);\n  }\n  get open() {\n    return getBooleanAttribute(this, \"open\");\n  }\n  get dialogRect() {\n    return getRect(this.#$dialog);\n  }\n  get closeButtonRect() {\n    return getRect(this.#$closeButton);\n  }\n  #onCancel = (e) =\u003e {\n    if (e.cancelable) {\n      e.preventDefault();\n    } else {\n      this.#onCollapse();\n    }\n    e.stopPropagation();\n    this.#dispatchCloseEvent(\"escape\", e.cancelable);\n  };\n  #onCloseClick = () =\u003e {\n    this.#dispatchCloseEvent(\"close\", true);\n  };\n  #onBackdropMouseDown = (e) =\u003e {\n    if (isTargetEqual(e, this.#$dialog)) {\n      const rect = this.dialogRect;\n      const isInside = e.x \u003e= rect.x \u0026\u0026 e.x \u003c rect.x + rect.width \u0026\u0026 e.y \u003e= rect.y \u0026\u0026 e.y \u003c rect.y + rect.height;\n      if (!isInside) {\n        e.stopPropagation();\n        this.#dispatchCloseEvent(\"backdrop\", e.cancelable);\n      }\n    }\n  };\n  #onCloseReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-close\")?.(e);\n    getReactEventHandler(this, \"onClose\")?.(e);\n  };\n  #dispatchCloseEvent(detail, cancelable) {\n    this.dispatchEvent(new CustomEvent(\"-close\", { detail, cancelable }));\n  }\n  #onExpand() {\n    if (!this.isDomConnected || this.#$dialog.open || !this.open) {\n      return;\n    }\n    this.#$dialog.showModal();\n    disableScroll();\n  }\n  #onCollapse() {\n    if (!this.#$dialog.open) {\n      return;\n    }\n    this.#$dialog.close?.();\n    enableScroll();\n  }\n  #onActionSlotChange = () =\u003e {\n    setClass(\n      this.#$actionWrapper,\n      \"empty\",\n      this.#$actionSlot.assignedElements().length === 0\n    );\n  };\n}\ndefineCustomElement(\"sinch-dialog\", Dialog);\nconst inputTypes = [\"text\", \"password\", \"number\"];\nconst MASK_SYMBOL_LETTER = \"A\";\nconst MASK_SYMBOL_DIGIT = \"0\";\nconst EMPTY_CHAR = \" \";\nconst MASK_MODE_DIGIT = 0;\nconst MASK_MODE_LETTER = 1;\nconst MASK_MODE_EXACT = 2;\nconst MASK_PLACEHOLDER_DELIMITER = \"@@\";\nconst MASK_PLACEHOLDER = \"_\";\nconst testMaskedValue = (maskSymbol, inputChar) =\u003e {\n  switch (maskSymbol.mode) {\n    case MASK_MODE_DIGIT: {\n      return /\\d/.test(inputChar);\n    }\n    case MASK_MODE_LETTER: {\n      return new RegExp(\"\\\\p{Letter}\", \"u\").test(inputChar);\n    }\n  }\n  return false;\n};\nconst isExactMode = (maskSymbol) =\u003e maskSymbol.mode === MASK_MODE_EXACT;\nconst isEmptyChar = (char) =\u003e char === EMPTY_CHAR;\nconst getMaskSymbols = (maskValue) =\u003e {\n  const res = [];\n  const [mask, placeholder] = maskValue.split(MASK_PLACEHOLDER_DELIMITER);\n  const maskSymbols = [...mask];\n  const placeholderChars = placeholder != null ? [...placeholder] : [];\n  for (let maskIndex = 0, placeholderIndex = 0; maskIndex \u003c maskSymbols.length; maskIndex++, placeholderIndex++) {\n    if (maskSymbols[maskIndex] === \"\\\\\") {\n      maskIndex += 1;\n      res.push({\n        value: maskSymbols[maskIndex],\n        mode: MASK_MODE_EXACT,\n        placeholder: placeholderChars[placeholderIndex] ?? maskSymbols[maskIndex]\n      });\n      continue;\n    }\n    if (maskSymbols[maskIndex] === MASK_SYMBOL_LETTER || maskSymbols[maskIndex] === MASK_SYMBOL_DIGIT) {\n      res.push({\n        value: maskSymbols[maskIndex],\n        mode: maskSymbols[maskIndex] === MASK_SYMBOL_LETTER ? MASK_MODE_LETTER : MASK_MODE_DIGIT,\n        placeholder: placeholderChars[placeholderIndex] ?? MASK_PLACEHOLDER\n      });\n      continue;\n    }\n    res.push({\n      value: maskSymbols[maskIndex],\n      mode: MASK_MODE_EXACT,\n      placeholder: placeholderChars[placeholderIndex] ?? maskSymbols[maskIndex]\n    });\n  }\n  return res;\n};\nconst clearCharsSelection = (chars, selectionStart, selectionEnd) =\u003e {\n  for (let i = selectionStart; i \u003c selectionEnd \u0026\u0026 i \u003c chars.length; i++) {\n    chars[i] = EMPTY_CHAR;\n  }\n};\nconst getPlaceholder = (chars, maskSymbols) =\u003e {\n  const res = new Array(maskSymbols.length);\n  for (let i = 0; i \u003c maskSymbols.length; i++) {\n    res[i] = i \u003e= chars.length || isEmptyChar(chars[i]) || isExactMode(maskSymbols[i]) ? maskSymbols[i].placeholder : EMPTY_CHAR;\n  }\n  return res.join(\"\");\n};\nconst isMaskedInputComplete = (chars, maskSymbols) =\u003e {\n  if (chars.length \u003e maskSymbols.length) {\n    throw new Error(\"chars.length \u003e maskSymbols.length\");\n  }\n  if (chars.length \u003c maskSymbols.length) {\n    return false;\n  }\n  for (let i = 0; i \u003c maskSymbols.length; i++) {\n    if (i \u003e= chars.length || !isExactMode(maskSymbols[i]) \u0026\u0026 !testMaskedValue(maskSymbols[i], chars[i])) {\n      return false;\n    }\n  }\n  return true;\n};\nconst getCharsFromInputValue = (inputValue, maskSymbols) =\u003e {\n  const chars = new Array(maskSymbols.length);\n  let i = 0;\n  for (const c of inputValue) {\n    chars[i++] = c;\n  }\n  chars.fill(EMPTY_CHAR, i);\n  return chars;\n};\nconst isCursorAtTheBeginning = (maskSymbols, selectoinStart) =\u003e {\n  if (selectoinStart \u003e= maskSymbols.length) {\n    return false;\n  }\n  for (let i = 0; i \u003c selectoinStart; i++) {\n    if (!isExactMode(maskSymbols[i])) {\n      return false;\n    }\n  }\n  return true;\n};\nconst getMergedValue = (chars, maskSymbols) =\u003e {\n  if (!isMaskedInputComplete(chars, maskSymbols)) {\n    return \"\";\n  }\n  const res = new Array(chars.length);\n  for (let i = 0; i \u003c chars.length; i++) {\n    res[i] = isExactMode(maskSymbols[i]) ? maskSymbols[i].value : chars[i];\n  }\n  return res.join(\"\");\n};\nconst findLastNonEmptyCharIndex = (chars) =\u003e {\n  for (let i = chars.length - 1; i \u003e= 0; i--) {\n    if (!isEmptyChar(chars[i])) {\n      return i;\n    }\n  }\n  return -1;\n};\nconst compileResult = (chars, maskSymbols, cursorPos) =\u003e {\n  if (chars.length \u003e maskSymbols.length) {\n    chars.length = maskSymbols.length;\n  }\n  let lastEmptyPos = findLastNonEmptyCharIndex(chars) + 1;\n  while (lastEmptyPos \u003c maskSymbols.length \u0026\u0026 isExactMode(maskSymbols[lastEmptyPos])) {\n    ++lastEmptyPos;\n  }\n  if (lastEmptyPos \u003c chars.length) {\n    chars.length = lastEmptyPos;\n  }\n  return {\n    value: chars.join(\"\"),\n    placeholder: getPlaceholder(chars, maskSymbols),\n    cursorPos: Math.min(cursorPos, chars.length),\n    mergedValue: getMergedValue(chars, maskSymbols)\n  };\n};\nconst deleteContentBackward$1 = (inputValue, maskSymbols, selectionStart, selectionEnd) =\u003e {\n  if (selectionEnd === 0) {\n    return null;\n  }\n  const chars = getCharsFromInputValue(inputValue, maskSymbols);\n  if (selectionStart !== selectionEnd) {\n    clearCharsSelection(chars, selectionStart, selectionEnd);\n    return compileResult(chars, maskSymbols, selectionStart);\n  }\n  let cusrsorPos = selectionStart;\n  while (cusrsorPos \u003e 0 \u0026\u0026 isExactMode(maskSymbols[cusrsorPos - 1])) {\n    --cusrsorPos;\n  }\n  if (cusrsorPos \u003e 0) {\n    clearCharsSelection(chars, cusrsorPos - 1, cusrsorPos);\n    do {\n      --cusrsorPos;\n    } while (cusrsorPos \u003e 0 \u0026\u0026 isExactMode(maskSymbols[cusrsorPos - 1]));\n  }\n  return compileResult(chars, maskSymbols, cusrsorPos);\n};\nconst deleteContentForward = (inputValue, maskSymbols, selectionStart, selectionEnd) =\u003e {\n  if (selectionStart \u003e= maskSymbols.length) {\n    return null;\n  }\n  const chars = getCharsFromInputValue(inputValue, maskSymbols);\n  if (selectionStart !== selectionEnd) {\n    clearCharsSelection(chars, selectionStart, selectionEnd);\n    return compileResult(chars, maskSymbols, selectionEnd);\n  }\n  let cursorPos = selectionStart;\n  while (cursorPos \u003c maskSymbols.length \u0026\u0026 isExactMode(maskSymbols[cursorPos])) {\n    cursorPos++;\n  }\n  if (cursorPos \u003c chars.length) {\n    clearCharsSelection(chars, cursorPos, cursorPos + 1);\n  }\n  return compileResult(chars, maskSymbols, cursorPos + 1);\n};\nconst beginMaskedComposition = (inputValue, maskSymbols, selectionStart) =\u003e {\n  const chars = getCharsFromInputValue(inputValue, maskSymbols);\n  const placeholder = new Array(chars.length);\n  for (let i = 0; i \u003c maskSymbols.length; i++) {\n    placeholder[i] = isEmptyChar(chars[i]) || isExactMode(maskSymbols[i]) ? maskSymbols[i].placeholder : EMPTY_CHAR;\n  }\n  placeholder[selectionStart] = EMPTY_CHAR;\n  chars.splice(selectionStart, 1);\n  return {\n    value: chars.join(\"\"),\n    placeholder: placeholder.join(\"\")\n  };\n};\nconst endMaskedComposition = (inputValue, data2, maskSymbols, selectionStart, wasValueInserted) =\u003e {\n  let cursorPos = selectionStart;\n  const chars = getCharsFromInputValue(inputValue, maskSymbols);\n  const dataChars = [...data2];\n  if (!wasValueInserted) {\n    chars.splice(cursorPos, 0, ...dataChars);\n    chars.length = maskSymbols.length;\n    cursorPos += dataChars.length;\n  }\n  cursorPos -= dataChars.length;\n  clearCharsSelection(chars, cursorPos, cursorPos + dataChars.length);\n  while (cursorPos \u003c maskSymbols.length \u0026\u0026 isExactMode(maskSymbols[cursorPos])) {\n    cursorPos++;\n  }\n  if (cursorPos \u003e= maskSymbols.length) {\n    return compileResult(chars, maskSymbols, cursorPos);\n  }\n  for (let dataPos = 0; dataPos \u003c dataChars.length \u0026\u0026 cursorPos \u003c maskSymbols.length; ++dataPos, ++cursorPos) {\n    const data22 = dataChars[dataPos];\n    if (isEmptyChar(chars[cursorPos]) \u0026\u0026 testMaskedValue(maskSymbols[cursorPos], data22)) {\n      chars[cursorPos] = data22;\n    }\n  }\n  while (cursorPos \u003c maskSymbols.length \u0026\u0026 isExactMode(maskSymbols[cursorPos])) {\n    cursorPos++;\n  }\n  return compileResult(chars, maskSymbols, cursorPos);\n};\nconst insertText$1 = (inputValue, data2, maskSymbols, selectionStart, selectionEnd) =\u003e {\n  const chars = getCharsFromInputValue(inputValue, maskSymbols);\n  let cursorPos = selectionStart;\n  clearCharsSelection(chars, selectionStart, selectionEnd);\n  while (cursorPos \u003c maskSymbols.length \u0026\u0026 isExactMode(maskSymbols[cursorPos])) {\n    cursorPos++;\n  }\n  if (cursorPos \u003e= maskSymbols.length) {\n    return compileResult(chars, maskSymbols, cursorPos);\n  }\n  if (testMaskedValue(maskSymbols[cursorPos], data2)) {\n    if (cursorPos \u003e= chars.length) {\n      chars.length = cursorPos + 1;\n    }\n    chars[cursorPos] = data2;\n    do {\n      cursorPos++;\n    } while (cursorPos \u003c maskSymbols.length \u0026\u0026 isExactMode(maskSymbols[cursorPos]));\n  }\n  return compileResult(chars, maskSymbols, cursorPos);\n};\nconst insertFromPaste$1 = (inputValue, data2, maskSymbols, selectionStart, selectionEnd) =\u003e {\n  const chars = getCharsFromInputValue(inputValue, maskSymbols);\n  let cursorPos = selectionStart;\n  clearCharsSelection(chars, selectionStart, selectionEnd);\n  if (isCursorAtTheBeginning(maskSymbols, cursorPos)) {\n    cursorPos = 0;\n  } else {\n    while (cursorPos \u003c maskSymbols.length \u0026\u0026 isExactMode(maskSymbols[cursorPos])) {\n      cursorPos++;\n    }\n  }\n  if (cursorPos \u003e= maskSymbols.length) {\n    return compileResult(chars, maskSymbols, cursorPos);\n  }\n  const dataChars = [...data2];\n  for (let dataPos = 0; dataPos \u003c dataChars.length \u0026\u0026 cursorPos \u003c maskSymbols.length; ) {\n    const data22 = dataChars[dataPos];\n    const maskSymbol = maskSymbols[cursorPos];\n    if (isExactMode(maskSymbol)) {\n      if (maskSymbol.value === data22) {\n        ++dataPos;\n      }\n      ++cursorPos;\n    } else {\n      if (testMaskedValue(maskSymbol, data22)) {\n        chars[cursorPos] = data22;\n        ++cursorPos;\n      }\n      ++dataPos;\n    }\n  }\n  return compileResult(chars, maskSymbols, cursorPos);\n};\nconst splitValueAndMask = (inputValue, maskSymbols) =\u003e {\n  const chars = getCharsFromInputValue(\"\", maskSymbols);\n  const dataChars = getCharsFromInputValue(inputValue, maskSymbols);\n  let cursorPos = 0;\n  for (let dataPos = 0; dataPos \u003c dataChars.length \u0026\u0026 cursorPos \u003c maskSymbols.length; ) {\n    const data2 = dataChars[dataPos];\n    const maskSymbol = maskSymbols[cursorPos];\n    if (isExactMode(maskSymbol)) {\n      if (maskSymbol.value === data2) {\n        ++dataPos;\n      }\n      ++cursorPos;\n    } else {\n      if (testMaskedValue(maskSymbol, data2)) {\n        chars[cursorPos] = data2;\n        ++cursorPos;\n      }\n      ++dataPos;\n    }\n  }\n  return compileResult(chars, maskSymbols, chars.length);\n};\nconst getMergedValueSliced = (inputValue, maskSymbols, selectionStart, selectionEnd) =\u003e {\n  const chars = getCharsFromInputValue(inputValue, maskSymbols);\n  for (let i = selectionStart; i \u003c selectionEnd \u0026\u0026 i \u003c maskSymbols.length; i++) {\n    if (isExactMode(maskSymbols[i])) {\n      chars[i] = maskSymbols[i].value;\n    }\n  }\n  return chars.slice(selectionStart, selectionEnd).join(\"\");\n};\nconst templateHTML$L = '\u003cstyle\u003e:host{all:initial;display:inline-block;vertical-align:middle}#wrapper{position:relative;display:flex;flex-direction:row;align-items:center;box-sizing:border-box;border-radius:var(--sinch-local-shape-radius);width:100%;height:var(--sinch-local-size);background-color:var(--sinch-comp-input-color-default-background-initial);--sinch-local-size:var(--sinch-comp-input-size-container-m);--sinch-global-size-icon:var(--sinch-comp-input-size-icon-m);--sinch-local-shape-radius:var(--sinch-comp-input-shape-radius-size-m)}:host([data-size=\"l\"])\u003e#wrapper{--sinch-local-size:var(--sinch-comp-input-size-container-l);--sinch-global-size-icon:var(--sinch-comp-input-size-icon-l);--sinch-local-shape-radius:var(--sinch-comp-input-shape-radius-size-l)}:host([data-size=\"m\"])\u003e#wrapper{--sinch-local-size:var(--sinch-comp-input-size-container-m);--sinch-global-size-icon:var(--sinch-comp-input-size-icon-m);--sinch-local-shape-radius:var(--sinch-comp-input-shape-radius-size-m)}:host([data-size=\"s\"])\u003e#wrapper{--sinch-local-size:var(--sinch-comp-input-size-container-s);--sinch-global-size-icon:var(--sinch-comp-input-size-icon-s);--sinch-local-shape-radius:var(--sinch-comp-input-shape-radius-size-s)}#input-wrapper{position:relative;flex:1;flex-basis:0;min-width:0;align-self:stretch}#input{all:initial;width:100%;height:100%;padding:0 12px;box-sizing:border-box;font:var(--sinch-comp-input-font-input);color:var(--sinch-comp-input-color-default-text-initial)}#input::placeholder{font:var(--sinch-comp-input-font-placeholder)!important;color:var(--sinch-comp-input-color-default-text-placeholder);opacity:1}#input:disabled{color:var(--sinch-comp-input-color-disabled-text-initial);-webkit-text-fill-color:var(--sinch-comp-input-color-disabled-text-initial)}#input-mask{display:none;position:absolute;inset:0;padding:0 12px;pointer-events:none;color:var(--sinch-comp-input-color-default-text-placeholder);white-space:pre;height:fit-content;margin:auto 0;overflow:hidden}#border{position:absolute;border:1px solid var(--sinch-comp-input-color-default-border-initial);border-radius:var(--sinch-local-shape-radius);inset:0;pointer-events:none}:host([disabled]) #border{border-color:var(--sinch-comp-input-color-disabled-border-initial)}#input-wrapper:focus-within+#border{border-color:var(--sinch-comp-input-color-default-border-focus);border-width:2px}#input-mask,:host([mask]) #input{font:var(--sinch-sys-font-body-monospace-m)}:host([mask]) #input-mask{display:block}:host([invalid]:not([disabled])) #input-wrapper:not(:focus-within)+#border{border-color:var(--sinch-comp-input-color-invalid-border-initial)}#input[type=password]:not(:placeholder-shown){font-size:1.5em;letter-spacing:.1em}#icon-wrapper{position:relative;height:100%}#icon{position:absolute;display:flex;align-items:center;left:12px;top:0;bottom:0;pointer-events:none;--sinch-global-color-icon:var(--sinch-comp-input-color-default-icon-initial)}:host([disabled]) #icon{--sinch-global-color-icon:var(--sinch-comp-input-color-disabled-icon-initial)}#icon-wrapper.empty{display:none}#icon-wrapper.empty~#input-wrapper\u003e#input,#icon-wrapper.empty~#input-wrapper\u003e#input-mask{padding-left:12px}#icon-wrapper:not(.empty)~#input-wrapper\u003e#input,#icon-wrapper:not(.empty)~#input-wrapper\u003e#input-mask{padding-left:calc(var(--sinch-global-size-icon) + 20px)}#right{display:flex;flex-direction:row;align-self:stretch;align-items:center;gap:4px;padding-right:4px}#right.empty{display:none}#left{display:flex;flex-direction:row;align-self:stretch;align-items:center;gap:4px;padding-left:4px}#left.empty{display:none}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"left\"\u003e\u003cslot name=\"left\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv id=\"icon-wrapper\"\u003e\u003cdiv id=\"icon\"\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv id=\"input-wrapper\"\u003e\u003cdiv id=\"input-mask\"\u003e\u003c/div\u003e\u003cinput id=\"input\" type=\"text\"\u003e\u003c/div\u003e\u003cdiv id=\"border\"\u003e\u003c/div\u003e\u003cdiv id=\"right\"\u003e\u003cslot name=\"right\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$L = document.createElement(\"template\");\ntemplate$L.innerHTML = templateHTML$L;\nclass Input extends NectaryElement {\n  #$input;\n  #$inputMask;\n  #$iconSlot;\n  #$iconWrapper;\n  #$rightSlot;\n  #$rightWrapper;\n  #$leftSlot;\n  #$leftWrapper;\n  #$wrapper;\n  #selectionStart = 0;\n  #selectionEnd = 0;\n  #isCompositionInProgress = false;\n  #compositionBeginValue = \"\";\n  #wasClearedByMask = false;\n  #controller = null;\n  #sizeContext;\n  #maskSymbols = null;\n  #internals;\n  static formAssociated = true;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: true });\n    shadowRoot.appendChild(template$L.content.cloneNode(true));\n    this.#internals = this.attachInternals();\n    this.#$input = shadowRoot.querySelector(\"#input\");\n    this.#$inputMask = shadowRoot.querySelector(\"#input-mask\");\n    this.#$iconSlot = shadowRoot.querySelector('slot[name=\"icon\"]');\n    this.#$iconWrapper = shadowRoot.querySelector(\"#icon-wrapper\");\n    this.#$rightSlot = shadowRoot.querySelector('slot[name=\"right\"]');\n    this.#$rightWrapper = shadowRoot.querySelector(\"#right\");\n    this.#$leftSlot = shadowRoot.querySelector('slot[name=\"left\"]');\n    this.#$leftWrapper = shadowRoot.querySelector(\"#left\");\n    this.#$wrapper = shadowRoot.querySelector(\"#wrapper\");\n    this.#sizeContext = new Context(this.#$wrapper, \"size\");\n    this.#controller = new AbortController();\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    const role = this.type === \"number\" ? \"spinbutton\" : \"textbox\";\n    this.#setRole(role);\n    if (this.#controller === null) {\n      this.#controller = new AbortController();\n    }\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.#$input.addEventListener(\"keydown\", this.#onKeyDown, options);\n    this.#$input.addEventListener(\"input\", this.#onInput, options);\n    this.#$input.addEventListener(\"cut\", this.#onCut, options);\n    this.#$input.addEventListener(\"copy\", this.#onCopy, options);\n    this.#$input.addEventListener(\"paste\", this.#onPaste, options);\n    this.#$input.addEventListener(\"compositionstart\", this.#onCompositionStart, options);\n    this.#$input.addEventListener(\"compositionend\", this.#onCompositionEnd, options);\n    this.#$input.addEventListener(\"focus\", this.#onInputFocus, options);\n    this.#$input.addEventListener(\"blur\", this.#onInputBlur, options);\n    this.#$input.addEventListener(\"wheel\", this.#onWheel, options);\n    this.#$iconSlot.addEventListener(\"slotchange\", this.#onIconSlotChange, options);\n    this.#$leftSlot.addEventListener(\"slotchange\", this.#onLeftSlotChange, options);\n    this.#$rightSlot.addEventListener(\"slotchange\", this.#onRightSlotChange, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, options);\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, options);\n    this.addEventListener(\"-copy\", this.#onCopyReactHandler, options);\n    this.addEventListener(\"-cut\", this.#onCutReactHandler, options);\n    this.addEventListener(\"-paste\", this.#onPasteReactHandler, options);\n    this.addEventListener(\"-wheel\", this.#onWheelReactHandler, options);\n    this.#sizeContext.listen(this.#controller.signal);\n    subscribeContext(this, \"size\", this.#onContextSize, this.#controller.signal);\n    this.#onIconSlotChange();\n    this.#onLeftSlotChange();\n    this.#onRightSlotChange();\n    this.#onSizeUpdate();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  formAssociatedCallback() {\n    setFormValue(this.#internals, this.#$input.value);\n  }\n  formResetCallback() {\n    this.#$input.value = \"\";\n    setFormValue(this.#internals, \"\");\n  }\n  formStateRestoreCallback(state) {\n    if (this.#internals.form === null || getBooleanAttribute(this.#internals.form, \"data-form-state-restore\") === false) {\n      return;\n    }\n    if (state !== null) {\n      const value = typeof state === \"string\" ? state : state.get(this.name);\n      this.#$input.value = value?.toString() ?? \"\";\n      setFormValue(this.#internals, value?.toString() ?? \"\");\n    }\n  }\n  // This handler mimicks the behavior (with some exceptions) of the implicit form submission logic from the HTML spec:\n  // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#implicit-submission\n  #formSubmitHandler = () =\u003e {\n    const form = this.#internals.form;\n    if (form === null) {\n      return;\n    }\n    if (form.disabled === true) {\n      return;\n    }\n    const submitSelectors = [\n      'sinch-button[form-type=\"submit\"]'\n    ];\n    const formSubmitters = Array.from(form.querySelectorAll(submitSelectors.join(\",\")));\n    const formSubmitter = formSubmitters.find((submitter) =\u003e !submitter.disabled) ?? null;\n    if (formSubmitter !== null) {\n      requestSubmitForm(form, formSubmitter);\n    }\n  };\n  #onKeyDown = (e) =\u003e {\n    switch (e.key) {\n      case \"Enter\": {\n        this.#formSubmitHandler();\n        break;\n      }\n      case \"Home\": {\n        if (this.type === \"number\") {\n          const min = getAttribute(this, \"min\");\n          if (min !== null \u0026\u0026 !isNaN(parseFloat(min))) {\n            this.#$input.value = min;\n            setFormValue(this.#internals, min);\n          }\n        }\n        break;\n      }\n      case \"End\": {\n        if (this.type === \"number\") {\n          const max = getAttribute(this, \"max\");\n          if (max !== null \u0026\u0026 !isNaN(parseFloat(max))) {\n            this.#$input.value = max;\n            setFormValue(this.#internals, max);\n          }\n        }\n      }\n    }\n  };\n  static get observedAttributes() {\n    return [\n      \"name\",\n      \"type\",\n      \"value\",\n      \"placeholder\",\n      \"mask\",\n      \"max\",\n      \"min\",\n      \"invalid\",\n      \"disabled\",\n      \"size\",\n      \"step\",\n      \"autocomplete\",\n      \"readonly\",\n      \"autofocus\",\n      \"data-size\",\n      \"aria-label\",\n      \"maxlength\",\n      \"required\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"name\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          return;\n        }\n        updateAttribute(this.#$input, \"name\", newVal);\n        break;\n      }\n      case \"type\": {\n        updateLiteralAttribute(this.#$input, inputTypes, \"type\", newVal);\n        updateAttribute(this.#$input, \"spellcheck\", newVal === \"password\" ? \"false\" : null);\n        const role = newVal === \"number\" ? \"spinbutton\" : \"textbox\";\n        this.#setRole(role);\n        if (newVal === \"number\") {\n          this.#resetAriaPlaceholder();\n        }\n        break;\n      }\n      case \"value\": {\n        const nextVal = newVal ?? \"\";\n        const prevVal = this.#$input.value;\n        if (this.#wasClearedByMask) {\n          this.#wasClearedByMask = false;\n          if (nextVal.length === 0) {\n            break;\n          }\n        }\n        if (this.#maskSymbols !== null) {\n          const { value, placeholder } = splitValueAndMask(nextVal, this.#maskSymbols);\n          this.#$input.value = value;\n          setFormValue(this.#internals, value);\n          this.#$inputMask.textContent = placeholder;\n          if (isElementFocused(this.#$input)) {\n            this.#setSelectionRange(this.#selectionEnd, this.#selectionEnd);\n          }\n          break;\n        }\n        if (nextVal !== prevVal) {\n          this.#$input.value = nextVal;\n          setFormValue(this.#internals, nextVal);\n          if (isElementFocused(this.#$input)) {\n            this.#setSelectionRange(this.#selectionEnd, this.#selectionEnd);\n          }\n        }\n        break;\n      }\n      case \"placeholder\": {\n        this.#updatePlaceholder();\n        break;\n      }\n      case \"mask\": {\n        this.#updateMask();\n        break;\n      }\n      case \"invalid\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          return;\n        }\n        const isInvalid = isAttrTrue(newVal);\n        this.ariaInvalid = isInvalid.toString();\n        this.#$input.ariaInvalid = this.ariaInvalid;\n        this.#internals.ariaInvalid = this.ariaInvalid;\n        updateBooleanAttribute(this, name, isInvalid);\n        break;\n      }\n      case \"disabled\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          return;\n        }\n        const isDisabled = isAttrTrue(newVal);\n        this.#$input.disabled = isDisabled;\n        updateBooleanAttribute(this, name, isDisabled);\n        break;\n      }\n      case \"autofocus\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          return;\n        }\n        const isAutofocus = isAttrTrue(newVal);\n        this.#$input.autofocus = isAutofocus;\n        updateBooleanAttribute(this, name, isAutofocus);\n        break;\n      }\n      case \"size\": {\n        updateAttribute(this, \"data-size\", newVal);\n        break;\n      }\n      case \"data-size\": {\n        this.#onSizeUpdate();\n        break;\n      }\n      case \"autocomplete\":\n      case \"maxlength\":\n      case \"required\":\n      case \"readonly\":\n      case \"max\":\n      case \"min\":\n      case \"step\": {\n        updateAttribute(this.#$input, name, newVal);\n        break;\n      }\n      case \"aria-label\": {\n        this.#$input.ariaLabel = newVal;\n        this.#internals.ariaLabel = newVal;\n        break;\n      }\n    }\n  }\n  set name(value) {\n    updateAttribute(this, \"name\", value);\n  }\n  get name() {\n    return getAttribute(this, \"name\", \"\");\n  }\n  set type(value) {\n    updateAttribute(this, \"type\", value);\n  }\n  get type() {\n    return getLiteralAttribute(this, inputTypes, \"type\", \"text\");\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set mask(value) {\n    updateAttribute(this, \"mask\", value);\n  }\n  get mask() {\n    return getAttribute(this, \"mask\");\n  }\n  set placeholder(value) {\n    updateAttribute(this, \"placeholder\", value);\n  }\n  get placeholder() {\n    return getAttribute(this, \"placeholder\");\n  }\n  set invalid(isInvalid) {\n    updateBooleanAttribute(this, \"invalid\", isInvalid);\n  }\n  get invalid() {\n    return getBooleanAttribute(this, \"invalid\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set autofocus(isAutofocus) {\n    updateBooleanAttribute(this, \"autofocus\", isAutofocus);\n  }\n  get autofocus() {\n    return getBooleanAttribute(this, \"autofocus\");\n  }\n  set size(size) {\n    updateLiteralAttribute(this, sizeValues, \"size\", size);\n  }\n  get size() {\n    return getLiteralAttribute(this, sizeValues, \"size\", DEFAULT_SIZE);\n  }\n  set autocomplete(value) {\n    updateAttribute(this, \"autocomplete\", value);\n  }\n  get autocomplete() {\n    return getAttribute(this, \"autocomplete\", \"\");\n  }\n  get selectionStart() {\n    return this.#$input.selectionStart;\n  }\n  set selectionStart(value) {\n    this.#$input.selectionStart = value;\n  }\n  get selectionEnd() {\n    return this.#$input.selectionEnd;\n  }\n  set selectionEnd(value) {\n    this.#$input.selectionEnd = value;\n  }\n  get selectionDirection() {\n    return this.#$input.selectionDirection;\n  }\n  set selectionDirection(value) {\n    this.#$input.selectionDirection = value;\n  }\n  setSelectionRange(selectionStart, selectionEnd) {\n    this.#setSelectionRange(selectionStart, selectionEnd);\n  }\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$input.focus();\n  }\n  blur() {\n    this.#$input.blur();\n  }\n  #setSelectionRange = (start, end, direction) =\u003e {\n    if (this.type !== \"number\") {\n      this.#$input.setSelectionRange(start, end, direction);\n    }\n  };\n  #onCompositionStart = () =\u003e {\n    this.#isCompositionInProgress = true;\n    if (this.#maskSymbols !== null) {\n      const selectionStart = this.#$input.selectionStart;\n      this.#compositionBeginValue = this.#$input.value;\n      if (selectionStart === this.#$input.value.length) {\n        return;\n      }\n      const { value, placeholder } = beginMaskedComposition(this.#$input.value, this.#maskSymbols, selectionStart);\n      this.#$input.value = value;\n      this.#setSelectionRange(selectionStart, selectionStart);\n      this.#$inputMask.textContent = placeholder;\n      this.#compositionBeginValue = value;\n    }\n  };\n  #onCompositionEnd = (e) =\u003e {\n    this.#isCompositionInProgress = false;\n    if (this.#maskSymbols !== null) {\n      const value = this.#$input.value;\n      const wasValueInserted = value.length !== this.#compositionBeginValue.length;\n      const res = endMaskedComposition(value, e.data, this.#maskSymbols, this.#$input.selectionStart, wasValueInserted);\n      this.#compositionBeginValue = \"\";\n      if (res !== null) {\n        const { value: value2, placeholder, mergedValue, cursorPos } = res;\n        this.#$input.value = value2;\n        this.#setSelectionRange(cursorPos, cursorPos);\n        this.#$inputMask.textContent = placeholder;\n        if (mergedValue.length \u003e 0) {\n          this.#selectionStart = cursorPos;\n          this.#selectionEnd = cursorPos;\n          this.#dispatchChangeEvent(mergedValue);\n        }\n      }\n      if ((res === null || res.mergedValue.length === 0) \u0026\u0026 this.value.length !== 0) {\n        this.#dispatchMaskClearChangeEvent();\n      }\n    } else {\n      this.#onInput();\n    }\n  };\n  #onMaskBeforeInput = (e) =\u003e {\n    this.#handleMaskBeforeInput(e.inputType, e.data);\n    e.preventDefault();\n  };\n  #handleMaskBeforeInput(inputType, data2) {\n    const selectionStart = this.#$input.selectionStart ?? 0;\n    const selectionEnd = this.#$input.selectionEnd ?? 0;\n    let res = null;\n    switch (inputType) {\n      case \"insertText\": {\n        res = insertText$1(this.#$input.value, data2, this.#maskSymbols, selectionStart, selectionEnd);\n        break;\n      }\n      case \"insertFromPaste\": {\n        res = insertFromPaste$1(this.#$input.value, data2, this.#maskSymbols, selectionStart, selectionEnd);\n        break;\n      }\n      case \"deleteByCut\":\n      case \"deleteContent\":\n      case \"deleteContentBackward\": {\n        res = deleteContentBackward$1(this.#$input.value, this.#maskSymbols, selectionStart, selectionEnd);\n        break;\n      }\n      case \"deleteContentForward\": {\n        res = deleteContentForward(this.#$input.value, this.#maskSymbols, selectionStart, selectionEnd);\n        break;\n      }\n    }\n    if (res !== null) {\n      const { value, placeholder, mergedValue, cursorPos } = res;\n      this.#$input.value = value;\n      this.#setSelectionRange(cursorPos, cursorPos);\n      this.#$inputMask.textContent = placeholder;\n      if (mergedValue.length \u003e 0) {\n        this.#selectionStart = cursorPos;\n        this.#selectionEnd = cursorPos;\n        this.#dispatchChangeEvent(mergedValue);\n      }\n    }\n    if ((res === null || res.mergedValue.length === 0) \u0026\u0026 this.value.length !== 0) {\n      this.#dispatchMaskClearChangeEvent();\n    }\n  }\n  #handleBeforeInput(inputType, data2) {\n    const selectionStart = this.#$input.selectionStart ?? 0;\n    const selectionEnd = this.#$input.selectionEnd ?? 0;\n    switch (inputType) {\n      case \"insertFromPaste\": {\n        if (data2 === null) {\n          return;\n        }\n        const value = this.value;\n        const cursorPos = selectionStart + data2.length;\n        const nextValue = value.substring(0, selectionStart) + data2 + value.substring(selectionEnd);\n        this.#selectionStart = cursorPos;\n        this.#selectionEnd = cursorPos;\n        this.#dispatchChangeEvent(nextValue);\n        break;\n      }\n      case \"deleteByCut\": {\n        const value = this.value;\n        const cursorPos = selectionStart;\n        const nextValue = value.substring(0, selectionStart) + value.substring(selectionEnd);\n        this.#selectionStart = cursorPos;\n        this.#selectionEnd = cursorPos;\n        this.#dispatchChangeEvent(nextValue);\n        break;\n      }\n    }\n  }\n  #onInput = () =\u003e {\n    if (this.#isCompositionInProgress) {\n      return;\n    }\n    if (this.#maskSymbols !== null) {\n      return;\n    }\n    const nextValue = this.#$input.value;\n    const prevValue = this.value;\n    setFormValue(this.#internals, nextValue);\n    if (prevValue !== nextValue) {\n      const nextSelectionStart = this.#$input.selectionStart;\n      const nextSelectionEnd = this.#$input.selectionEnd;\n      if (this.hasAttribute(\"value\") === true) {\n        this.#$input.value = prevValue;\n        this.#setSelectionRange(this.#selectionStart, this.#selectionEnd);\n      }\n      this.#selectionStart = nextSelectionStart;\n      this.#selectionEnd = nextSelectionEnd;\n      this.#dispatchChangeEvent(nextValue);\n    }\n  };\n  #onWheel = () =\u003e {\n    this.dispatchEvent(\n      new CustomEvent(\"-wheel\")\n    );\n  };\n  #onMaskInputAutofillChange = () =\u003e {\n    const nextVal = this.#$input.value;\n    if (this.#maskSymbols !== null) {\n      const { value, placeholder, mergedValue, cursorPos } = splitValueAndMask(nextVal, this.#maskSymbols);\n      this.#$input.value = value;\n      this.#setSelectionRange(cursorPos, cursorPos);\n      this.#$inputMask.textContent = placeholder;\n      if (mergedValue.length \u003e 0) {\n        this.#selectionStart = cursorPos;\n        this.#selectionEnd = cursorPos;\n        this.#dispatchChangeEvent(mergedValue);\n      } else {\n        this.#dispatchMaskClearChangeEvent();\n      }\n    }\n  };\n  #onCopy = (e) =\u003e {\n    const value = this.#$input.value;\n    const selectionStart = this.#$input.selectionStart ?? 0;\n    const selectionEnd = this.#$input.selectionEnd ?? 0;\n    if (e.clipboardData === null || selectionStart === selectionEnd) {\n      return;\n    }\n    const copiedValue = this.#maskSymbols === null ? value.substring(selectionStart, selectionEnd) : getMergedValueSliced(value, this.#maskSymbols, selectionStart, selectionEnd);\n    let replacedValue = null;\n    const replaceWith = (value2) =\u003e {\n      replacedValue = value2 ?? null;\n    };\n    if (this.#maskSymbols !== null) {\n      e.preventDefault();\n      e.clipboardData.setData(\"text/plain\", copiedValue);\n    }\n    const event = new CustomEvent(\"-copy\", {\n      detail: {\n        value: copiedValue,\n        replaceWith\n      },\n      cancelable: true\n    });\n    this.dispatchEvent(event);\n    if (event.defaultPrevented || replacedValue !== null) {\n      e.preventDefault();\n    }\n    if (replacedValue !== null) {\n      e.clipboardData.setData(\"text/plain\", replacedValue);\n    }\n  };\n  #onCut = (e) =\u003e {\n    const value = this.#$input.value;\n    const selectionStart = this.#$input.selectionStart ?? 0;\n    const selectionEnd = this.#$input.selectionEnd ?? 0;\n    if (e.clipboardData === null || selectionStart === selectionEnd) {\n      return;\n    }\n    const copiedValue = this.#maskSymbols === null ? value.substring(selectionStart, selectionEnd) : getMergedValueSliced(value, this.#maskSymbols, selectionStart, selectionEnd);\n    let replacedValue = null;\n    const replaceWith = (value2) =\u003e {\n      replacedValue = value2 ?? null;\n    };\n    if (this.#maskSymbols !== null) {\n      e.preventDefault();\n      e.clipboardData.setData(\"text/plain\", copiedValue);\n    }\n    const event = new CustomEvent(\"-cut\", {\n      detail: {\n        value: copiedValue,\n        replaceWith\n      },\n      cancelable: true\n    });\n    this.dispatchEvent(event);\n    if (event.defaultPrevented || replacedValue !== null) {\n      e.preventDefault();\n    }\n    if (replacedValue !== null) {\n      e.clipboardData.setData(\"text/plain\", replacedValue);\n      if (this.#maskSymbols !== null) {\n        this.#handleMaskBeforeInput(\"deleteByCut\", null);\n      } else {\n        this.#handleBeforeInput(\"deleteByCut\", null);\n      }\n    }\n  };\n  #onPaste = (e) =\u003e {\n    const pasteValue = e.clipboardData?.getData(\"text/plain\") ?? \"\";\n    let replacedValue = \"\";\n    const replaceWith = (value) =\u003e {\n      replacedValue = value ?? \"\";\n    };\n    const event = new CustomEvent(\"-paste\", {\n      detail: {\n        value: pasteValue,\n        replaceWith\n      },\n      cancelable: true\n    });\n    this.dispatchEvent(event);\n    if (event.defaultPrevented) {\n      e.preventDefault();\n    }\n    if (replacedValue.length === 0) {\n      return;\n    }\n    e.preventDefault();\n    if (this.#maskSymbols !== null) {\n      this.#handleMaskBeforeInput(\"insertFromPaste\", replacedValue);\n    } else {\n      this.#handleBeforeInput(\"insertFromPaste\", replacedValue);\n    }\n  };\n  #dispatchMaskClearChangeEvent() {\n    this.#wasClearedByMask = true;\n    this.#dispatchChangeEvent(\"\");\n  }\n  #dispatchChangeEvent(value) {\n    if (value === this.value) {\n      return;\n    }\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", {\n        detail: value\n      })\n    );\n  }\n  #onContextSize = (e) =\u003e {\n    if (this.hasAttribute(\"size\") === true) {\n      return;\n    }\n    switch (e.detail) {\n      case \"l\": {\n        this.setAttribute(\"data-size\", \"m\");\n        break;\n      }\n      default: {\n        this.setAttribute(\"data-size\", \"s\");\n      }\n    }\n  };\n  #updateMask() {\n    if (this.mask !== null) {\n      if (this.#maskSymbols === null) {\n        this.#$input.addEventListener(\"beforeinput\", this.#onMaskBeforeInput, { signal: this.#controller.signal });\n        this.#$input.addEventListener(\"change\", this.#onMaskInputAutofillChange, { signal: this.#controller.signal });\n      }\n      this.#maskSymbols = getMaskSymbols(this.mask);\n      const { value, placeholder } = splitValueAndMask(this.#$input.value, this.#maskSymbols);\n      this.#$input.value = value;\n      this.#$inputMask.textContent = placeholder;\n    } else {\n      this.#maskSymbols = null;\n      this.#$input.removeEventListener(\"beforeinput\", this.#onMaskBeforeInput);\n      this.#$input.removeEventListener(\"change\", this.#onMaskInputAutofillChange);\n    }\n    this.#updatePlaceholder();\n  }\n  #updatePlaceholder() {\n    if (this.#maskSymbols === null) {\n      const value = this.placeholder;\n      this.#$input.placeholder = value ?? \"\";\n      if (this.type !== \"number\") {\n        this.#internals.ariaPlaceholder = value ?? \"\";\n        updateAttribute(this, \"aria-placeholder\", value);\n      }\n    } else {\n      this.#$input.placeholder = \"\";\n      this.#resetAriaPlaceholder();\n    }\n  }\n  #resetAriaPlaceholder() {\n    updateAttribute(this, \"aria-placeholder\", null);\n    this.#internals.ariaPlaceholder = \"\";\n  }\n  #onIconSlotChange = () =\u003e {\n    const isEmpty = this.#$iconSlot.assignedElements().length === 0;\n    setClass(this.#$iconWrapper, \"empty\", isEmpty);\n  };\n  #onLeftSlotChange = () =\u003e {\n    const isEmpty = this.#$leftSlot.assignedElements().length === 0;\n    setClass(this.#$leftWrapper, \"empty\", isEmpty);\n  };\n  #onRightSlotChange = () =\u003e {\n    const isEmpty = this.#$rightSlot.assignedElements().length === 0;\n    setClass(this.#$rightWrapper, \"empty\", isEmpty);\n  };\n  #onInputFocus = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onInputBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n  };\n  #onSizeUpdate() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const size = this.getAttribute(\"data-size\") ?? DEFAULT_SIZE;\n    this.#sizeContext.dispatch(size);\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n  #onCopyReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-copy\")?.(e);\n  };\n  #onCutReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-cut\")?.(e);\n  };\n  #onPasteReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-paste\")?.(e);\n  };\n  #onWheelReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-wheel\")?.(e);\n  };\n  #setRole = (role) =\u003e {\n    this.setAttribute(\"role\", role);\n    this.#internals.role = role;\n  };\n}\ndefineCustomElement(\"sinch-input\", Input);\nconst orientationValues = [\n  \"top-left\",\n  \"top-right\",\n  \"bottom-left\",\n  \"bottom-right\",\n  \"left\",\n  \"right\",\n  \"bottom\",\n  \"top\"\n];\nconst getPopOrientation = (orientation) =\u003e {\n  if (orientation === \"top\") {\n    return \"top-stretch\";\n  }\n  if (orientation === \"bottom\") {\n    return \"bottom-stretch\";\n  }\n  if (orientation === \"left\") {\n    return \"center-left\";\n  }\n  if (orientation === \"right\") {\n    return \"center-right\";\n  }\n  return orientation;\n};\nconst templateHTML$K = '\u003cstyle\u003e:host{display:contents}#content-wrapper{position:relative;padding-top:4px;width:fit-content;min-width:100%}:host([tip]) #content-wrapper{padding-top:12px;filter:drop-shadow(var(--sinch-comp-popover-shadow))}:host([orientation^=top]) #content-wrapper{padding-top:0;padding-bottom:4px}:host([orientation=left]) #content-wrapper{padding-top:0;padding-right:4px}:host([orientation=right]) #content-wrapper{padding-top:0;padding-left:4px}:host([orientation^=top][tip]) #content-wrapper{padding-top:0;padding-bottom:12px}:host([orientation=left][tip]) #content-wrapper{padding-top:0;padding-right:12px}:host([orientation=right][tip]) #content-wrapper{padding-top:0;padding-left:12px}#content{background-color:var(--sinch-comp-popover-color-default-background-initial);border:1px solid var(--sinch-comp-popover-color-default-border-initial);border-radius:var(--sinch-comp-popover-shape-radius);box-shadow:var(--sinch-comp-popover-shadow);overflow:hidden}:host([tip]) #content{box-shadow:none}#tip{position:absolute;left:50%;top:13px;transform:translateX(-50%) rotate(180deg);transform-origin:top center;fill:var(--sinch-comp-popover-color-default-background-initial);stroke:var(--sinch-comp-popover-color-default-border-initial);stroke-linecap:square;pointer-events:none;display:none}:host([orientation^=top]) #tip{transform:translateX(-50%) rotate(0);top:calc(100% - 13px)}:host([orientation=left]) #tip{transform:translateX(-50%) rotate(-90deg);top:calc(50%);left:calc(100% - 13px)}:host([orientation=right]) #tip{transform:translateX(-50%) rotate(90deg);top:calc(50%);left:13px}:host([tip]) #tip:not(.hidden){display:block}\u003c/style\u003e\u003csinch-pop id=\"pop\" inset=\"4\"\u003e\u003cslot name=\"target\" slot=\"target\"\u003e\u003c/slot\u003e\u003cdiv id=\"content-wrapper\" slot=\"content\"\u003e\u003cdiv id=\"content\"\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003csvg id=\"tip\" width=\"16\" height=\"9\" aria-hidden=\"true\"\u003e\u003cpath d=\"m0 0 8 8 8 -8\"/\u003e\u003c/svg\u003e\u003c/div\u003e\u003c/sinch-pop\u003e';\nconst TIP_SIZE = 16;\nconst template$K = document.createElement(\"template\");\ntemplate$K.innerHTML = templateHTML$K;\nclass Popover extends NectaryElement {\n  #$pop;\n  #$content;\n  #$tip;\n  #controller = null;\n  #resizeObserver = null;\n  #$targetSlot;\n  #$contentSlot;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$K.content.cloneNode(true));\n    this.#$pop = shadowRoot.querySelector(\"#pop\");\n    this.#$content = shadowRoot.querySelector(\"#content\");\n    this.#$tip = shadowRoot.querySelector(\"#tip\");\n    this.#$targetSlot = shadowRoot.querySelector('slot[name=\"target\"]');\n    this.#$contentSlot = shadowRoot.querySelector('slot[name=\"content\"]');\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.addEventListener(\"-close\", this.#onCloseReactHandler, { signal });\n    this.#$pop.addEventListener(\"-close\", this.#onPopClose, { signal });\n    subscribeContext(this.#$content, \"visibility\", this.#onContextVisibility, signal);\n    updateAttribute(this.#$pop, \"orientation\", getPopOrientation(this.orientation));\n    const slottedTarget = this.#getFirstAssignedElementInSlot(this.#$targetSlot);\n    const slottedContent = this.#getFirstAssignedElementInSlot(this.#$contentSlot);\n    const popoverIdReference = `popover-${(/* @__PURE__ */ new Date()).getMilliseconds()}-${Math.round(100 * Math.random())}`;\n    if (slottedContent != null \u0026\u0026 slottedTarget != null) {\n      updateAttribute(slottedContent, \"aria-labelledby\", popoverIdReference);\n    }\n    if (slottedTarget != null) {\n      updateAttribute(slottedTarget, \"aria-controls\", popoverIdReference);\n      updateAttribute(slottedTarget, \"aria-haspopup\", true);\n      const isOpen = this.getAttribute(\"open\") ?? false;\n      updateAttribute(slottedTarget, \"aria-expanded\", isOpen);\n    }\n    this.#resizeObserver = new ResizeObserver(() =\u003e {\n      if (this.#$pop.open) {\n        this.#updateContentMaxWidth();\n      }\n    });\n    this.#resizeObserver.observe(document.body);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n    this.#resizeObserver?.disconnect();\n    this.#resizeObserver = null;\n  }\n  static get observedAttributes() {\n    return [\n      \"orientation\",\n      \"open\",\n      \"modal\",\n      \"tip\",\n      \"aria-label\",\n      \"aria-description\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"orientation\": {\n        updateAttribute(this.#$pop, \"orientation\", getPopOrientation(this.orientation));\n        if (this.#$pop.open) {\n          this.#updateTipOrientation();\n        }\n        break;\n      }\n      case \"tip\": {\n        const hasTip = isAttrTrue(newVal);\n        if (hasTip \u0026\u0026 this.#$pop.open) {\n          this.#updateTipOrientation();\n        }\n        updateBooleanAttribute(this, name, hasTip);\n        break;\n      }\n      case \"modal\":\n      case \"open\": {\n        updateAttribute(this.#$pop, name, newVal);\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        const slottedContent = this.#getFirstAssignedElementInSlot(this.#$targetSlot);\n        if (slottedContent != null) {\n          updateAttribute(slottedContent, \"aria-expanded\", isAttrTrue(newVal));\n        }\n        break;\n      }\n      case \"aria-label\":\n      case \"aria-description\": {\n        updateAttribute(this.#$pop, name, newVal);\n        break;\n      }\n    }\n  }\n  set modal(isModal) {\n    updateBooleanAttribute(this, \"modal\", isModal);\n  }\n  get modal() {\n    return getBooleanAttribute(this, \"modal\");\n  }\n  set open(isOpen) {\n    updateBooleanAttribute(this, \"open\", isOpen);\n  }\n  get open() {\n    return getBooleanAttribute(this, \"open\");\n  }\n  set tip(hasTip) {\n    updateBooleanAttribute(this, \"tip\", hasTip);\n  }\n  get tip() {\n    return getBooleanAttribute(this, \"tip\");\n  }\n  get orientation() {\n    return getLiteralAttribute(this, orientationValues, \"orientation\", \"bottom-left\");\n  }\n  set orientation(value) {\n    updateLiteralAttribute(this, orientationValues, \"orientation\", value);\n  }\n  get footprintRect() {\n    return this.#$pop.footprintRect;\n  }\n  get popoverRect() {\n    return this.#$pop.popoverRect;\n  }\n  #getFirstAssignedElementInSlot(slot) {\n    if (slot === null) {\n      return null;\n    }\n    const elements = slot != null ? slot.assignedElements() : null;\n    if (elements === null) {\n      return null;\n    }\n    return elements[0];\n  }\n  #onPopClose = () =\u003e {\n    this.#dispatchCloseEvent();\n  };\n  #onCloseReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"onClose\")?.();\n    getReactEventHandler(this, \"on-close\")?.(e);\n  };\n  #dispatchCloseEvent() {\n    this.dispatchEvent(\n      new CustomEvent(\"-close\")\n    );\n  }\n  #onContextVisibility = (e) =\u003e {\n    if (e.detail) {\n      this.#updateTipOrientation();\n      this.#updateContentMaxWidth();\n    } else {\n      this.#resetTipOrientation();\n    }\n  };\n  #resetTipOrientation() {\n    this.#$tip.style.top = \"\";\n    this.#$tip.style.left = \"\";\n  }\n  #updateTipOrientation = () =\u003e {\n    const orientation = this.orientation;\n    const targetRect = this.#$pop.footprintRect;\n    const contentRect = this.#$content.getBoundingClientRect();\n    if (orientation.startsWith(\"top\") || orientation.startsWith(\"bottom\")) {\n      const diffX = targetRect.x - contentRect.x;\n      let desiredX = diffX + targetRect.width / 2;\n      if (orientation === \"bottom-left\" || orientation === \"top-left\") {\n        desiredX = Math.max(desiredX, contentRect.width * 0.75);\n      }\n      if (orientation === \"bottom-right\" || orientation === \"top-right\") {\n        desiredX = Math.min(desiredX, contentRect.width * 0.25);\n      }\n      const xPos = Math.max(TIP_SIZE, Math.min(desiredX, contentRect.width - TIP_SIZE));\n      this.#$tip.style.left = `${xPos}px`;\n    } else if (orientation.startsWith(\"left\") || orientation.startsWith(\"right\")) {\n      const diffY = targetRect.y - contentRect.y;\n      const desiredY = diffY + targetRect.height / 2;\n      const yPos = Math.max(TIP_SIZE, Math.min(desiredY, contentRect.height - TIP_SIZE));\n      this.#$tip.style.top = `${yPos}px`;\n    }\n    setClass(this.#$tip, \"hidden\", rectOverlap(targetRect, contentRect));\n  };\n  // Prevent content from overflowing the viewport\n  #updateContentMaxWidth = () =\u003e {\n    const contentRect = this.#$content.getBoundingClientRect();\n    const availableSpace = window.innerWidth - contentRect.left - 16;\n    this.#$content.style.maxWidth = `${availableSpace}px`;\n  };\n}\ndefineCustomElement(\"sinch-popover\", Popover);\nconst templateHTML$J = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;width:100%;height:40px;border-bottom:1px solid var(--sinch-comp-tab-color-default-border-initial);box-sizing:border-box}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$J = document.createElement(\"template\");\ntemplate$J.innerHTML = templateHTML$J;\nclass Tabs extends NectaryElement {\n  #$slot;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$J.content.cloneNode(true));\n    this.#$slot = shadowRoot.querySelector(\"slot\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.setAttribute(\"role\", \"tablist\");\n    this.#$slot.addEventListener(\"option-change\", this.#onOptionChange, { signal });\n    this.#$slot.addEventListener(\"slotchange\", this.#onSlotChange, { signal });\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"value\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"value\": {\n        this.#onValueChange(newVal);\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  nthOptionRect(index) {\n    const $el = this.#$slot.assignedElements()[index];\n    if ($el != null) {\n      return getRect($el);\n    }\n    return null;\n  }\n  #onSlotChange = () =\u003e {\n    this.#onValueChange(this.value);\n  };\n  #onOptionChange = (e) =\u003e {\n    e.stopPropagation();\n    this.#dispatchChangeEvent(e.detail);\n  };\n  #onValueChange(value) {\n    for (const $option of this.#$slot.assignedElements()) {\n      const isChecked = !getBooleanAttribute($option, \"disabled\") \u0026\u0026 value === getAttribute($option, \"value\", \"\");\n      updateBooleanAttribute($option, \"data-checked\", isChecked);\n    }\n  }\n  #dispatchChangeEvent(value) {\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail: value })\n    );\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-tabs\", Tabs);\nconst templateHTML$I = '\u003cstyle\u003e:host{display:block;outline:0}#button{all:initial;position:relative;display:flex;flex-direction:column;padding:12px 16px 0;box-sizing:border-box;cursor:pointer;background-color:var(--sinch-comp-tab-color-default-background-initial);border-top-left-radius:var(--sinch-comp-tab-shape-radius);border-top-right-radius:var(--sinch-comp-tab-shape-radius);height:39px;--sinch-global-color-icon:var(--sinch-comp-tab-color-default-icon-initial);--sinch-global-size-icon:var(--sinch-comp-tab-size-icon)}#button:hover{background-color:var(--sinch-comp-tab-color-default-background-hover)}#button:focus-visible::after{content:\"\";position:absolute;inset:0;bottom:-3px;border:2px solid var(--sinch-comp-tab-color-default-outline-focus);border-top-left-radius:var(--sinch-comp-tab-shape-radius);border-top-right-radius:var(--sinch-comp-tab-shape-radius);pointer-events:none}#button:disabled{cursor:unset;pointer-events:none;--sinch-global-color-icon:var(--sinch-comp-tab-color-disabled-icon-initial)}:host([data-checked]) #button{--sinch-global-color-icon:var(--sinch-comp-tab-color-checked-icon-initial)}:host([data-checked]) #button::before{content:\"\";position:absolute;left:0;right:0;bottom:-1px;pointer-events:none;border-top:2px solid var(--sinch-comp-tab-color-checked-border-initial)}::slotted(*){display:block}\u003c/style\u003e\u003csinch-tooltip id=\"tooltip\"\u003e\u003cbutton id=\"button\" tabindex=\"0\"\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003c/button\u003e\u003c/sinch-tooltip\u003e';\nconst template$I = document.createElement(\"template\");\ntemplate$I.innerHTML = templateHTML$I;\nclass TabsIconOption extends NectaryElement {\n  #$button;\n  #$tooltip;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: true });\n    shadowRoot.appendChild(template$I.content.cloneNode(true));\n    this.#$button = shadowRoot.querySelector(\"#button\");\n    this.#$tooltip = shadowRoot.querySelector(\"#tooltip\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"tab\");\n    this.#$button.addEventListener(\"click\", this.#onClick);\n  }\n  disconnectedCallback() {\n    this.#$button.removeEventListener(\"click\", this.#onClick);\n  }\n  static get observedAttributes() {\n    return [\"data-checked\", \"disabled\", \"aria-label\"];\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"data-checked\": {\n        updateExplicitBooleanAttribute(this, \"aria-selected\", isAttrTrue(newVal));\n        break;\n      }\n      case \"disabled\": {\n        const isDisabled = isAttrTrue(newVal);\n        this.#$button.disabled = isDisabled;\n        updateBooleanAttribute(this, name, isDisabled);\n        break;\n      }\n      case \"aria-label\": {\n        updateAttribute(this.#$tooltip, \"text\", newVal);\n        break;\n      }\n    }\n  }\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$button.focus();\n  }\n  blur() {\n    this.#$button.blur();\n  }\n  #onClick = (e) =\u003e {\n    e.stopPropagation();\n    this.dispatchEvent(\n      new CustomEvent(\"option-change\", { bubbles: true, detail: this.value })\n    );\n  };\n}\ndefineCustomElement(\"sinch-tabs-icon-option\", TabsIconOption);\nconst createDebounce = (delayFn, cancelFn) =\u003e (cb) =\u003e {\n  let id = null;\n  const delayCallback = () =\u003e {\n    id = null;\n    cb();\n  };\n  return {\n    fn: () =\u003e {\n      if (id !== null) {\n        cancelFn(id);\n      }\n      id = delayFn(delayCallback);\n    },\n    cancel: () =\u003e {\n      if (id !== null) {\n        cancelFn(id);\n      }\n    }\n  };\n};\nconst debounceTimeout = (ms) =\u003e createDebounce(\n  (cb) =\u003e globalThis.setTimeout(cb, ms),\n  globalThis.clearTimeout\n);\nconst dataJson = /* @__PURE__ */ JSON.parse('[{\"name\":\"smileys-emotion\",\"emojis\":[{\"emoji\":\"😀\",\"label\":\"grinning face\",\"tone\":0},{\"emoji\":\"😃\",\"label\":\"grinning face with big eyes\",\"tone\":0},{\"emoji\":\"😄\",\"label\":\"grinning face with smiling eyes\",\"tone\":0},{\"emoji\":\"😁\",\"label\":\"beaming face with smiling eyes\",\"tone\":0},{\"emoji\":\"😆\",\"label\":\"grinning squinting face\",\"tone\":0},{\"emoji\":\"😅\",\"label\":\"grinning face with sweat\",\"tone\":0},{\"emoji\":\"🤣\",\"label\":\"rolling on the floor laughing\",\"tone\":0},{\"emoji\":\"😂\",\"label\":\"face with tears of joy\",\"tone\":0},{\"emoji\":\"🙂\",\"label\":\"slightly smiling face\",\"tone\":0},{\"emoji\":\"🙃\",\"label\":\"upside-down face\",\"tone\":0},{\"emoji\":\"😉\",\"label\":\"winking face\",\"tone\":0},{\"emoji\":\"😊\",\"label\":\"smiling face with smiling eyes\",\"tone\":0},{\"emoji\":\"😇\",\"label\":\"smiling face with halo\",\"tone\":0},{\"emoji\":\"🥰\",\"label\":\"smiling face with hearts\",\"tone\":0},{\"emoji\":\"😍\",\"label\":\"smiling face with heart-eyes\",\"tone\":0},{\"emoji\":\"🤩\",\"label\":\"star-struck\",\"tone\":0},{\"emoji\":\"😘\",\"label\":\"face blowing a kiss\",\"tone\":0},{\"emoji\":\"😗\",\"label\":\"kissing face\",\"tone\":0},{\"emoji\":\"☺️\",\"label\":\"smiling face\",\"tone\":0},{\"emoji\":\"😚\",\"label\":\"kissing face with closed eyes\",\"tone\":0},{\"emoji\":\"😙\",\"label\":\"kissing face with smiling eyes\",\"tone\":0},{\"emoji\":\"🥲\",\"label\":\"smiling face with tear\",\"tone\":0},{\"emoji\":\"😋\",\"label\":\"face savoring food\",\"tone\":0},{\"emoji\":\"😛\",\"label\":\"face with tongue\",\"tone\":0},{\"emoji\":\"😜\",\"label\":\"winking face with tongue\",\"tone\":0},{\"emoji\":\"🤪\",\"label\":\"zany face\",\"tone\":0},{\"emoji\":\"😝\",\"label\":\"squinting face with tongue\",\"tone\":0},{\"emoji\":\"🤑\",\"label\":\"money-mouth face\",\"tone\":0},{\"emoji\":\"🤗\",\"label\":\"smiling face with open hands\",\"tone\":0},{\"emoji\":\"🤭\",\"label\":\"face with hand over mouth\",\"tone\":0},{\"emoji\":\"🤫\",\"label\":\"shushing face\",\"tone\":0},{\"emoji\":\"🤔\",\"label\":\"thinking face\",\"tone\":0},{\"emoji\":\"🤐\",\"label\":\"zipper-mouth face\",\"tone\":0},{\"emoji\":\"🤨\",\"label\":\"face with raised eyebrow\",\"tone\":0},{\"emoji\":\"😐️\",\"label\":\"neutral face\",\"tone\":0},{\"emoji\":\"😑\",\"label\":\"expressionless face\",\"tone\":0},{\"emoji\":\"😶\",\"label\":\"face without mouth\",\"tone\":0},{\"emoji\":\"😶‍🌫️\",\"label\":\"face in clouds\",\"tone\":0},{\"emoji\":\"😏\",\"label\":\"smirking face\",\"tone\":0},{\"emoji\":\"😒\",\"label\":\"unamused face\",\"tone\":0},{\"emoji\":\"🙄\",\"label\":\"face with rolling eyes\",\"tone\":0},{\"emoji\":\"😬\",\"label\":\"grimacing face\",\"tone\":0},{\"emoji\":\"😮‍💨\",\"label\":\"face exhaling\",\"tone\":0},{\"emoji\":\"🤥\",\"label\":\"lying face\",\"tone\":0},{\"emoji\":\"😌\",\"label\":\"relieved face\",\"tone\":0},{\"emoji\":\"😔\",\"label\":\"pensive face\",\"tone\":0},{\"emoji\":\"😪\",\"label\":\"sleepy face\",\"tone\":0},{\"emoji\":\"🤤\",\"label\":\"drooling face\",\"tone\":0},{\"emoji\":\"😴\",\"label\":\"sleeping face\",\"tone\":0},{\"emoji\":\"😷\",\"label\":\"face with medical mask\",\"tone\":0},{\"emoji\":\"🤒\",\"label\":\"face with thermometer\",\"tone\":0},{\"emoji\":\"🤕\",\"label\":\"face with head-bandage\",\"tone\":0},{\"emoji\":\"🤢\",\"label\":\"nauseated face\",\"tone\":0},{\"emoji\":\"🤮\",\"label\":\"face vomiting\",\"tone\":0},{\"emoji\":\"🤧\",\"label\":\"sneezing face\",\"tone\":0},{\"emoji\":\"🥵\",\"label\":\"hot face\",\"tone\":0},{\"emoji\":\"🥶\",\"label\":\"cold face\",\"tone\":0},{\"emoji\":\"🥴\",\"label\":\"woozy face\",\"tone\":0},{\"emoji\":\"😵\",\"label\":\"face with crossed-out eyes\",\"tone\":0},{\"emoji\":\"😵‍💫\",\"label\":\"face with spiral eyes\",\"tone\":0},{\"emoji\":\"🤯\",\"label\":\"exploding head\",\"tone\":0},{\"emoji\":\"🤠\",\"label\":\"cowboy hat face\",\"tone\":0},{\"emoji\":\"🥳\",\"label\":\"partying face\",\"tone\":0},{\"emoji\":\"🥸\",\"label\":\"disguised face\",\"tone\":0},{\"emoji\":\"😎\",\"label\":\"smiling face with sunglasses\",\"tone\":0},{\"emoji\":\"🤓\",\"label\":\"nerd face\",\"tone\":0},{\"emoji\":\"🧐\",\"label\":\"face with monocle\",\"tone\":0},{\"emoji\":\"😕\",\"label\":\"confused face\",\"tone\":0},{\"emoji\":\"😟\",\"label\":\"worried face\",\"tone\":0},{\"emoji\":\"🙁\",\"label\":\"slightly frowning face\",\"tone\":0},{\"emoji\":\"☹️\",\"label\":\"frowning face\",\"tone\":0},{\"emoji\":\"😮\",\"label\":\"face with open mouth\",\"tone\":0},{\"emoji\":\"😯\",\"label\":\"hushed face\",\"tone\":0},{\"emoji\":\"😲\",\"label\":\"astonished face\",\"tone\":0},{\"emoji\":\"😳\",\"label\":\"flushed face\",\"tone\":0},{\"emoji\":\"🥺\",\"label\":\"pleading face\",\"tone\":0},{\"emoji\":\"😦\",\"label\":\"frowning face with open mouth\",\"tone\":0},{\"emoji\":\"😧\",\"label\":\"anguished face\",\"tone\":0},{\"emoji\":\"😨\",\"label\":\"fearful face\",\"tone\":0},{\"emoji\":\"😰\",\"label\":\"anxious face with sweat\",\"tone\":0},{\"emoji\":\"😥\",\"label\":\"sad but relieved face\",\"tone\":0},{\"emoji\":\"😢\",\"label\":\"crying face\",\"tone\":0},{\"emoji\":\"😭\",\"label\":\"loudly crying face\",\"tone\":0},{\"emoji\":\"😱\",\"label\":\"face screaming in fear\",\"tone\":0},{\"emoji\":\"😖\",\"label\":\"confounded face\",\"tone\":0},{\"emoji\":\"😣\",\"label\":\"persevering face\",\"tone\":0},{\"emoji\":\"😞\",\"label\":\"disappointed face\",\"tone\":0},{\"emoji\":\"😓\",\"label\":\"downcast face with sweat\",\"tone\":0},{\"emoji\":\"😩\",\"label\":\"weary face\",\"tone\":0},{\"emoji\":\"😫\",\"label\":\"tired face\",\"tone\":0},{\"emoji\":\"🥱\",\"label\":\"yawning face\",\"tone\":0},{\"emoji\":\"😤\",\"label\":\"face with steam from nose\",\"tone\":0},{\"emoji\":\"😡\",\"label\":\"enraged face\",\"tone\":0},{\"emoji\":\"😠\",\"label\":\"angry face\",\"tone\":0},{\"emoji\":\"🤬\",\"label\":\"face with symbols on mouth\",\"tone\":0},{\"emoji\":\"😈\",\"label\":\"smiling face with horns\",\"tone\":0},{\"emoji\":\"👿\",\"label\":\"angry face with horns\",\"tone\":0},{\"emoji\":\"💀\",\"label\":\"skull\",\"tone\":0},{\"emoji\":\"☠️\",\"label\":\"skull and crossbones\",\"tone\":0},{\"emoji\":\"💩\",\"label\":\"pile of poo\",\"tone\":0},{\"emoji\":\"🤡\",\"label\":\"clown face\",\"tone\":0},{\"emoji\":\"👹\",\"label\":\"ogre\",\"tone\":0},{\"emoji\":\"👺\",\"label\":\"goblin\",\"tone\":0},{\"emoji\":\"👻\",\"label\":\"ghost\",\"tone\":0},{\"emoji\":\"👽️\",\"label\":\"alien\",\"tone\":0},{\"emoji\":\"👾\",\"label\":\"alien monster\",\"tone\":0},{\"emoji\":\"🤖\",\"label\":\"robot\",\"tone\":0},{\"emoji\":\"😺\",\"label\":\"grinning cat\",\"tone\":0},{\"emoji\":\"😸\",\"label\":\"grinning cat with smiling eyes\",\"tone\":0},{\"emoji\":\"😹\",\"label\":\"cat with tears of joy\",\"tone\":0},{\"emoji\":\"😻\",\"label\":\"smiling cat with heart-eyes\",\"tone\":0},{\"emoji\":\"😼\",\"label\":\"cat with wry smile\",\"tone\":0},{\"emoji\":\"😽\",\"label\":\"kissing cat\",\"tone\":0},{\"emoji\":\"🙀\",\"label\":\"weary cat\",\"tone\":0},{\"emoji\":\"😿\",\"label\":\"crying cat\",\"tone\":0},{\"emoji\":\"😾\",\"label\":\"pouting cat\",\"tone\":0},{\"emoji\":\"🙈\",\"label\":\"see-no-evil monkey\",\"tone\":0},{\"emoji\":\"🙉\",\"label\":\"hear-no-evil monkey\",\"tone\":0},{\"emoji\":\"🙊\",\"label\":\"speak-no-evil monkey\",\"tone\":0},{\"emoji\":\"💋\",\"label\":\"kiss mark\",\"tone\":0},{\"emoji\":\"💌\",\"label\":\"love letter\",\"tone\":0},{\"emoji\":\"💘\",\"label\":\"heart with arrow\",\"tone\":0},{\"emoji\":\"💝\",\"label\":\"heart with ribbon\",\"tone\":0},{\"emoji\":\"💖\",\"label\":\"sparkling heart\",\"tone\":0},{\"emoji\":\"💗\",\"label\":\"growing heart\",\"tone\":0},{\"emoji\":\"💓\",\"label\":\"beating heart\",\"tone\":0},{\"emoji\":\"💞\",\"label\":\"revolving hearts\",\"tone\":0},{\"emoji\":\"💕\",\"label\":\"two hearts\",\"tone\":0},{\"emoji\":\"💟\",\"label\":\"heart decoration\",\"tone\":0},{\"emoji\":\"❣️\",\"label\":\"heart exclamation\",\"tone\":0},{\"emoji\":\"💔\",\"label\":\"broken heart\",\"tone\":0},{\"emoji\":\"❤️‍🔥\",\"label\":\"heart on fire\",\"tone\":0},{\"emoji\":\"❤️‍🩹\",\"label\":\"mending heart\",\"tone\":0},{\"emoji\":\"❤️\",\"label\":\"red heart\",\"tone\":0},{\"emoji\":\"🧡\",\"label\":\"orange heart\",\"tone\":0},{\"emoji\":\"💛\",\"label\":\"yellow heart\",\"tone\":0},{\"emoji\":\"💚\",\"label\":\"green heart\",\"tone\":0},{\"emoji\":\"💙\",\"label\":\"blue heart\",\"tone\":0},{\"emoji\":\"💜\",\"label\":\"purple heart\",\"tone\":0},{\"emoji\":\"🤎\",\"label\":\"brown heart\",\"tone\":0},{\"emoji\":\"🖤\",\"label\":\"black heart\",\"tone\":0},{\"emoji\":\"🤍\",\"label\":\"white heart\",\"tone\":0},{\"emoji\":\"💯\",\"label\":\"hundred points\",\"tone\":0},{\"emoji\":\"💢\",\"label\":\"anger symbol\",\"tone\":0},{\"emoji\":\"💥\",\"label\":\"collision\",\"tone\":0},{\"emoji\":\"💫\",\"label\":\"dizzy\",\"tone\":0},{\"emoji\":\"💦\",\"label\":\"sweat droplets\",\"tone\":0},{\"emoji\":\"💨\",\"label\":\"dashing away\",\"tone\":0},{\"emoji\":\"🕳️\",\"label\":\"hole\",\"tone\":0},{\"emoji\":\"💣️\",\"label\":\"bomb\",\"tone\":0},{\"emoji\":\"💬\",\"label\":\"speech balloon\",\"tone\":0},{\"emoji\":\"👁️‍🗨️\",\"label\":\"eye in speech bubble\",\"tone\":0},{\"emoji\":\"🗨️\",\"label\":\"left speech bubble\",\"tone\":0},{\"emoji\":\"🗯️\",\"label\":\"right anger bubble\",\"tone\":0},{\"emoji\":\"💭\",\"label\":\"thought balloon\",\"tone\":0},{\"emoji\":\"💤\",\"label\":\"ZZZ\",\"tone\":0}]},{\"name\":\"people-body\",\"emojis\":[{\"emoji\":\"👋\",\"label\":\"waving hand\",\"tone\":0,\"skins\":[{\"emoji\":\"👋🏻\",\"label\":\"waving hand: light skin tone\",\"tone\":1},{\"emoji\":\"👋🏼\",\"label\":\"waving hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👋🏽\",\"label\":\"waving hand: medium skin tone\",\"tone\":3},{\"emoji\":\"👋🏾\",\"label\":\"waving hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👋🏿\",\"label\":\"waving hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤚\",\"label\":\"raised back of hand\",\"tone\":0,\"skins\":[{\"emoji\":\"🤚🏻\",\"label\":\"raised back of hand: light skin tone\",\"tone\":1},{\"emoji\":\"🤚🏼\",\"label\":\"raised back of hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤚🏽\",\"label\":\"raised back of hand: medium skin tone\",\"tone\":3},{\"emoji\":\"🤚🏾\",\"label\":\"raised back of hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤚🏿\",\"label\":\"raised back of hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🖐️\",\"label\":\"hand with fingers splayed\",\"tone\":0,\"skins\":[{\"emoji\":\"🖐🏻\",\"label\":\"hand with fingers splayed: light skin tone\",\"tone\":1},{\"emoji\":\"🖐🏼\",\"label\":\"hand with fingers splayed: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🖐🏽\",\"label\":\"hand with fingers splayed: medium skin tone\",\"tone\":3},{\"emoji\":\"🖐🏾\",\"label\":\"hand with fingers splayed: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🖐🏿\",\"label\":\"hand with fingers splayed: dark skin tone\",\"tone\":5}]},{\"emoji\":\"✋\",\"label\":\"raised hand\",\"tone\":0,\"skins\":[{\"emoji\":\"✋🏻\",\"label\":\"raised hand: light skin tone\",\"tone\":1},{\"emoji\":\"✋🏼\",\"label\":\"raised hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"✋🏽\",\"label\":\"raised hand: medium skin tone\",\"tone\":3},{\"emoji\":\"✋🏾\",\"label\":\"raised hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"✋🏿\",\"label\":\"raised hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🖖\",\"label\":\"vulcan salute\",\"tone\":0,\"skins\":[{\"emoji\":\"🖖🏻\",\"label\":\"vulcan salute: light skin tone\",\"tone\":1},{\"emoji\":\"🖖🏼\",\"label\":\"vulcan salute: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🖖🏽\",\"label\":\"vulcan salute: medium skin tone\",\"tone\":3},{\"emoji\":\"🖖🏾\",\"label\":\"vulcan salute: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🖖🏿\",\"label\":\"vulcan salute: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👌\",\"label\":\"OK hand\",\"tone\":0,\"skins\":[{\"emoji\":\"👌🏻\",\"label\":\"OK hand: light skin tone\",\"tone\":1},{\"emoji\":\"👌🏼\",\"label\":\"OK hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👌🏽\",\"label\":\"OK hand: medium skin tone\",\"tone\":3},{\"emoji\":\"👌🏾\",\"label\":\"OK hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👌🏿\",\"label\":\"OK hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤌\",\"label\":\"pinched fingers\",\"tone\":0,\"skins\":[{\"emoji\":\"🤌🏻\",\"label\":\"pinched fingers: light skin tone\",\"tone\":1},{\"emoji\":\"🤌🏼\",\"label\":\"pinched fingers: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤌🏽\",\"label\":\"pinched fingers: medium skin tone\",\"tone\":3},{\"emoji\":\"🤌🏾\",\"label\":\"pinched fingers: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤌🏿\",\"label\":\"pinched fingers: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤏\",\"label\":\"pinching hand\",\"tone\":0,\"skins\":[{\"emoji\":\"🤏🏻\",\"label\":\"pinching hand: light skin tone\",\"tone\":1},{\"emoji\":\"🤏🏼\",\"label\":\"pinching hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤏🏽\",\"label\":\"pinching hand: medium skin tone\",\"tone\":3},{\"emoji\":\"🤏🏾\",\"label\":\"pinching hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤏🏿\",\"label\":\"pinching hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"✌️\",\"label\":\"victory hand\",\"tone\":0,\"skins\":[{\"emoji\":\"✌🏻\",\"label\":\"victory hand: light skin tone\",\"tone\":1},{\"emoji\":\"✌🏼\",\"label\":\"victory hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"✌🏽\",\"label\":\"victory hand: medium skin tone\",\"tone\":3},{\"emoji\":\"✌🏾\",\"label\":\"victory hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"✌🏿\",\"label\":\"victory hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤞\",\"label\":\"crossed fingers\",\"tone\":0,\"skins\":[{\"emoji\":\"🤞🏻\",\"label\":\"crossed fingers: light skin tone\",\"tone\":1},{\"emoji\":\"🤞🏼\",\"label\":\"crossed fingers: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤞🏽\",\"label\":\"crossed fingers: medium skin tone\",\"tone\":3},{\"emoji\":\"🤞🏾\",\"label\":\"crossed fingers: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤞🏿\",\"label\":\"crossed fingers: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤟\",\"label\":\"love-you gesture\",\"tone\":0,\"skins\":[{\"emoji\":\"🤟🏻\",\"label\":\"love-you gesture: light skin tone\",\"tone\":1},{\"emoji\":\"🤟🏼\",\"label\":\"love-you gesture: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤟🏽\",\"label\":\"love-you gesture: medium skin tone\",\"tone\":3},{\"emoji\":\"🤟🏾\",\"label\":\"love-you gesture: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤟🏿\",\"label\":\"love-you gesture: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤘\",\"label\":\"sign of the horns\",\"tone\":0,\"skins\":[{\"emoji\":\"🤘🏻\",\"label\":\"sign of the horns: light skin tone\",\"tone\":1},{\"emoji\":\"🤘🏼\",\"label\":\"sign of the horns: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤘🏽\",\"label\":\"sign of the horns: medium skin tone\",\"tone\":3},{\"emoji\":\"🤘🏾\",\"label\":\"sign of the horns: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤘🏿\",\"label\":\"sign of the horns: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤙\",\"label\":\"call me hand\",\"tone\":0,\"skins\":[{\"emoji\":\"🤙🏻\",\"label\":\"call me hand: light skin tone\",\"tone\":1},{\"emoji\":\"🤙🏼\",\"label\":\"call me hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤙🏽\",\"label\":\"call me hand: medium skin tone\",\"tone\":3},{\"emoji\":\"🤙🏾\",\"label\":\"call me hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤙🏿\",\"label\":\"call me hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👈️\",\"label\":\"backhand index pointing left\",\"tone\":0,\"skins\":[{\"emoji\":\"👈🏻\",\"label\":\"backhand index pointing left: light skin tone\",\"tone\":1},{\"emoji\":\"👈🏼\",\"label\":\"backhand index pointing left: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👈🏽\",\"label\":\"backhand index pointing left: medium skin tone\",\"tone\":3},{\"emoji\":\"👈🏾\",\"label\":\"backhand index pointing left: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👈🏿\",\"label\":\"backhand index pointing left: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👉️\",\"label\":\"backhand index pointing right\",\"tone\":0,\"skins\":[{\"emoji\":\"👉🏻\",\"label\":\"backhand index pointing right: light skin tone\",\"tone\":1},{\"emoji\":\"👉🏼\",\"label\":\"backhand index pointing right: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👉🏽\",\"label\":\"backhand index pointing right: medium skin tone\",\"tone\":3},{\"emoji\":\"👉🏾\",\"label\":\"backhand index pointing right: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👉🏿\",\"label\":\"backhand index pointing right: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👆️\",\"label\":\"backhand index pointing up\",\"tone\":0,\"skins\":[{\"emoji\":\"👆🏻\",\"label\":\"backhand index pointing up: light skin tone\",\"tone\":1},{\"emoji\":\"👆🏼\",\"label\":\"backhand index pointing up: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👆🏽\",\"label\":\"backhand index pointing up: medium skin tone\",\"tone\":3},{\"emoji\":\"👆🏾\",\"label\":\"backhand index pointing up: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👆🏿\",\"label\":\"backhand index pointing up: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🖕\",\"label\":\"middle finger\",\"tone\":0,\"skins\":[{\"emoji\":\"🖕🏻\",\"label\":\"middle finger: light skin tone\",\"tone\":1},{\"emoji\":\"🖕🏼\",\"label\":\"middle finger: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🖕🏽\",\"label\":\"middle finger: medium skin tone\",\"tone\":3},{\"emoji\":\"🖕🏾\",\"label\":\"middle finger: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🖕🏿\",\"label\":\"middle finger: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👇️\",\"label\":\"backhand index pointing down\",\"tone\":0,\"skins\":[{\"emoji\":\"👇🏻\",\"label\":\"backhand index pointing down: light skin tone\",\"tone\":1},{\"emoji\":\"👇🏼\",\"label\":\"backhand index pointing down: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👇🏽\",\"label\":\"backhand index pointing down: medium skin tone\",\"tone\":3},{\"emoji\":\"👇🏾\",\"label\":\"backhand index pointing down: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👇🏿\",\"label\":\"backhand index pointing down: dark skin tone\",\"tone\":5}]},{\"emoji\":\"☝️\",\"label\":\"index pointing up\",\"tone\":0,\"skins\":[{\"emoji\":\"☝🏻\",\"label\":\"index pointing up: light skin tone\",\"tone\":1},{\"emoji\":\"☝🏼\",\"label\":\"index pointing up: medium-light skin tone\",\"tone\":2},{\"emoji\":\"☝🏽\",\"label\":\"index pointing up: medium skin tone\",\"tone\":3},{\"emoji\":\"☝🏾\",\"label\":\"index pointing up: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"☝🏿\",\"label\":\"index pointing up: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👍️\",\"label\":\"thumbs up\",\"tone\":0,\"skins\":[{\"emoji\":\"👍🏻\",\"label\":\"thumbs up: light skin tone\",\"tone\":1},{\"emoji\":\"👍🏼\",\"label\":\"thumbs up: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👍🏽\",\"label\":\"thumbs up: medium skin tone\",\"tone\":3},{\"emoji\":\"👍🏾\",\"label\":\"thumbs up: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👍🏿\",\"label\":\"thumbs up: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👎️\",\"label\":\"thumbs down\",\"tone\":0,\"skins\":[{\"emoji\":\"👎🏻\",\"label\":\"thumbs down: light skin tone\",\"tone\":1},{\"emoji\":\"👎🏼\",\"label\":\"thumbs down: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👎🏽\",\"label\":\"thumbs down: medium skin tone\",\"tone\":3},{\"emoji\":\"👎🏾\",\"label\":\"thumbs down: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👎🏿\",\"label\":\"thumbs down: dark skin tone\",\"tone\":5}]},{\"emoji\":\"✊\",\"label\":\"raised fist\",\"tone\":0,\"skins\":[{\"emoji\":\"✊🏻\",\"label\":\"raised fist: light skin tone\",\"tone\":1},{\"emoji\":\"✊🏼\",\"label\":\"raised fist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"✊🏽\",\"label\":\"raised fist: medium skin tone\",\"tone\":3},{\"emoji\":\"✊🏾\",\"label\":\"raised fist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"✊🏿\",\"label\":\"raised fist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👊\",\"label\":\"oncoming fist\",\"tone\":0,\"skins\":[{\"emoji\":\"👊🏻\",\"label\":\"oncoming fist: light skin tone\",\"tone\":1},{\"emoji\":\"👊🏼\",\"label\":\"oncoming fist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👊🏽\",\"label\":\"oncoming fist: medium skin tone\",\"tone\":3},{\"emoji\":\"👊🏾\",\"label\":\"oncoming fist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👊🏿\",\"label\":\"oncoming fist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤛\",\"label\":\"left-facing fist\",\"tone\":0,\"skins\":[{\"emoji\":\"🤛🏻\",\"label\":\"left-facing fist: light skin tone\",\"tone\":1},{\"emoji\":\"🤛🏼\",\"label\":\"left-facing fist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤛🏽\",\"label\":\"left-facing fist: medium skin tone\",\"tone\":3},{\"emoji\":\"🤛🏾\",\"label\":\"left-facing fist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤛🏿\",\"label\":\"left-facing fist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤜\",\"label\":\"right-facing fist\",\"tone\":0,\"skins\":[{\"emoji\":\"🤜🏻\",\"label\":\"right-facing fist: light skin tone\",\"tone\":1},{\"emoji\":\"🤜🏼\",\"label\":\"right-facing fist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤜🏽\",\"label\":\"right-facing fist: medium skin tone\",\"tone\":3},{\"emoji\":\"🤜🏾\",\"label\":\"right-facing fist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤜🏿\",\"label\":\"right-facing fist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👏\",\"label\":\"clapping hands\",\"tone\":0,\"skins\":[{\"emoji\":\"👏🏻\",\"label\":\"clapping hands: light skin tone\",\"tone\":1},{\"emoji\":\"👏🏼\",\"label\":\"clapping hands: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👏🏽\",\"label\":\"clapping hands: medium skin tone\",\"tone\":3},{\"emoji\":\"👏🏾\",\"label\":\"clapping hands: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👏🏿\",\"label\":\"clapping hands: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙌\",\"label\":\"raising hands\",\"tone\":0,\"skins\":[{\"emoji\":\"🙌🏻\",\"label\":\"raising hands: light skin tone\",\"tone\":1},{\"emoji\":\"🙌🏼\",\"label\":\"raising hands: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙌🏽\",\"label\":\"raising hands: medium skin tone\",\"tone\":3},{\"emoji\":\"🙌🏾\",\"label\":\"raising hands: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙌🏿\",\"label\":\"raising hands: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👐\",\"label\":\"open hands\",\"tone\":0,\"skins\":[{\"emoji\":\"👐🏻\",\"label\":\"open hands: light skin tone\",\"tone\":1},{\"emoji\":\"👐🏼\",\"label\":\"open hands: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👐🏽\",\"label\":\"open hands: medium skin tone\",\"tone\":3},{\"emoji\":\"👐🏾\",\"label\":\"open hands: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👐🏿\",\"label\":\"open hands: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤲\",\"label\":\"palms up together\",\"tone\":0,\"skins\":[{\"emoji\":\"🤲🏻\",\"label\":\"palms up together: light skin tone\",\"tone\":1},{\"emoji\":\"🤲🏼\",\"label\":\"palms up together: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤲🏽\",\"label\":\"palms up together: medium skin tone\",\"tone\":3},{\"emoji\":\"🤲🏾\",\"label\":\"palms up together: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤲🏿\",\"label\":\"palms up together: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤝\",\"label\":\"handshake\",\"tone\":0,\"skins\":[{\"emoji\":\"🤝🏻\",\"label\":\"handshake: light skin tone\",\"tone\":1},{\"emoji\":\"🤝🏼\",\"label\":\"handshake: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤝🏽\",\"label\":\"handshake: medium skin tone\",\"tone\":3},{\"emoji\":\"🤝🏾\",\"label\":\"handshake: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤝🏿\",\"label\":\"handshake: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙏\",\"label\":\"folded hands\",\"tone\":0,\"skins\":[{\"emoji\":\"🙏🏻\",\"label\":\"folded hands: light skin tone\",\"tone\":1},{\"emoji\":\"🙏🏼\",\"label\":\"folded hands: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙏🏽\",\"label\":\"folded hands: medium skin tone\",\"tone\":3},{\"emoji\":\"🙏🏾\",\"label\":\"folded hands: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙏🏿\",\"label\":\"folded hands: dark skin tone\",\"tone\":5}]},{\"emoji\":\"✍️\",\"label\":\"writing hand\",\"tone\":0,\"skins\":[{\"emoji\":\"✍🏻\",\"label\":\"writing hand: light skin tone\",\"tone\":1},{\"emoji\":\"✍🏼\",\"label\":\"writing hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"✍🏽\",\"label\":\"writing hand: medium skin tone\",\"tone\":3},{\"emoji\":\"✍🏾\",\"label\":\"writing hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"✍🏿\",\"label\":\"writing hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💅\",\"label\":\"nail polish\",\"tone\":0,\"skins\":[{\"emoji\":\"💅🏻\",\"label\":\"nail polish: light skin tone\",\"tone\":1},{\"emoji\":\"💅🏼\",\"label\":\"nail polish: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💅🏽\",\"label\":\"nail polish: medium skin tone\",\"tone\":3},{\"emoji\":\"💅🏾\",\"label\":\"nail polish: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💅🏿\",\"label\":\"nail polish: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤳\",\"label\":\"selfie\",\"tone\":0,\"skins\":[{\"emoji\":\"🤳🏻\",\"label\":\"selfie: light skin tone\",\"tone\":1},{\"emoji\":\"🤳🏼\",\"label\":\"selfie: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤳🏽\",\"label\":\"selfie: medium skin tone\",\"tone\":3},{\"emoji\":\"🤳🏾\",\"label\":\"selfie: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤳🏿\",\"label\":\"selfie: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💪\",\"label\":\"flexed biceps\",\"tone\":0,\"skins\":[{\"emoji\":\"💪🏻\",\"label\":\"flexed biceps: light skin tone\",\"tone\":1},{\"emoji\":\"💪🏼\",\"label\":\"flexed biceps: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💪🏽\",\"label\":\"flexed biceps: medium skin tone\",\"tone\":3},{\"emoji\":\"💪🏾\",\"label\":\"flexed biceps: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💪🏿\",\"label\":\"flexed biceps: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦾\",\"label\":\"mechanical arm\",\"tone\":0},{\"emoji\":\"🦿\",\"label\":\"mechanical leg\",\"tone\":0},{\"emoji\":\"🦵\",\"label\":\"leg\",\"tone\":0,\"skins\":[{\"emoji\":\"🦵🏻\",\"label\":\"leg: light skin tone\",\"tone\":1},{\"emoji\":\"🦵🏼\",\"label\":\"leg: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦵🏽\",\"label\":\"leg: medium skin tone\",\"tone\":3},{\"emoji\":\"🦵🏾\",\"label\":\"leg: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦵🏿\",\"label\":\"leg: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦶\",\"label\":\"foot\",\"tone\":0,\"skins\":[{\"emoji\":\"🦶🏻\",\"label\":\"foot: light skin tone\",\"tone\":1},{\"emoji\":\"🦶🏼\",\"label\":\"foot: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦶🏽\",\"label\":\"foot: medium skin tone\",\"tone\":3},{\"emoji\":\"🦶🏾\",\"label\":\"foot: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦶🏿\",\"label\":\"foot: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👂️\",\"label\":\"ear\",\"tone\":0,\"skins\":[{\"emoji\":\"👂🏻\",\"label\":\"ear: light skin tone\",\"tone\":1},{\"emoji\":\"👂🏼\",\"label\":\"ear: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👂🏽\",\"label\":\"ear: medium skin tone\",\"tone\":3},{\"emoji\":\"👂🏾\",\"label\":\"ear: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👂🏿\",\"label\":\"ear: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦻\",\"label\":\"ear with hearing aid\",\"tone\":0,\"skins\":[{\"emoji\":\"🦻🏻\",\"label\":\"ear with hearing aid: light skin tone\",\"tone\":1},{\"emoji\":\"🦻🏼\",\"label\":\"ear with hearing aid: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦻🏽\",\"label\":\"ear with hearing aid: medium skin tone\",\"tone\":3},{\"emoji\":\"🦻🏾\",\"label\":\"ear with hearing aid: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦻🏿\",\"label\":\"ear with hearing aid: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👃\",\"label\":\"nose\",\"tone\":0,\"skins\":[{\"emoji\":\"👃🏻\",\"label\":\"nose: light skin tone\",\"tone\":1},{\"emoji\":\"👃🏼\",\"label\":\"nose: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👃🏽\",\"label\":\"nose: medium skin tone\",\"tone\":3},{\"emoji\":\"👃🏾\",\"label\":\"nose: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👃🏿\",\"label\":\"nose: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧠\",\"label\":\"brain\",\"tone\":0},{\"emoji\":\"🫀\",\"label\":\"anatomical heart\",\"tone\":0},{\"emoji\":\"🫁\",\"label\":\"lungs\",\"tone\":0},{\"emoji\":\"🦷\",\"label\":\"tooth\",\"tone\":0},{\"emoji\":\"🦴\",\"label\":\"bone\",\"tone\":0},{\"emoji\":\"👀\",\"label\":\"eyes\",\"tone\":0},{\"emoji\":\"👁️\",\"label\":\"eye\",\"tone\":0},{\"emoji\":\"👅\",\"label\":\"tongue\",\"tone\":0},{\"emoji\":\"👄\",\"label\":\"mouth\",\"tone\":0},{\"emoji\":\"👶\",\"label\":\"baby\",\"tone\":0,\"skins\":[{\"emoji\":\"👶🏻\",\"label\":\"baby: light skin tone\",\"tone\":1},{\"emoji\":\"👶🏼\",\"label\":\"baby: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👶🏽\",\"label\":\"baby: medium skin tone\",\"tone\":3},{\"emoji\":\"👶🏾\",\"label\":\"baby: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👶🏿\",\"label\":\"baby: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧒\",\"label\":\"child\",\"tone\":0,\"skins\":[{\"emoji\":\"🧒🏻\",\"label\":\"child: light skin tone\",\"tone\":1},{\"emoji\":\"🧒🏼\",\"label\":\"child: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧒🏽\",\"label\":\"child: medium skin tone\",\"tone\":3},{\"emoji\":\"🧒🏾\",\"label\":\"child: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧒🏿\",\"label\":\"child: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👦\",\"label\":\"boy\",\"tone\":0,\"skins\":[{\"emoji\":\"👦🏻\",\"label\":\"boy: light skin tone\",\"tone\":1},{\"emoji\":\"👦🏼\",\"label\":\"boy: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👦🏽\",\"label\":\"boy: medium skin tone\",\"tone\":3},{\"emoji\":\"👦🏾\",\"label\":\"boy: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👦🏿\",\"label\":\"boy: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👧\",\"label\":\"girl\",\"tone\":0,\"skins\":[{\"emoji\":\"👧🏻\",\"label\":\"girl: light skin tone\",\"tone\":1},{\"emoji\":\"👧🏼\",\"label\":\"girl: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👧🏽\",\"label\":\"girl: medium skin tone\",\"tone\":3},{\"emoji\":\"👧🏾\",\"label\":\"girl: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👧🏿\",\"label\":\"girl: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑\",\"label\":\"person\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻\",\"label\":\"person: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼\",\"label\":\"person: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽\",\"label\":\"person: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾\",\"label\":\"person: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿\",\"label\":\"person: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👱\",\"label\":\"person: blond hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👱🏻\",\"label\":\"person: light skin tone, blond hair\",\"tone\":1},{\"emoji\":\"👱🏼\",\"label\":\"person: medium-light skin tone, blond hair\",\"tone\":2},{\"emoji\":\"👱🏽\",\"label\":\"person: medium skin tone, blond hair\",\"tone\":3},{\"emoji\":\"👱🏾\",\"label\":\"person: medium-dark skin tone, blond hair\",\"tone\":4},{\"emoji\":\"👱🏿\",\"label\":\"person: dark skin tone, blond hair\",\"tone\":5}]},{\"emoji\":\"👨\",\"label\":\"man\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻\",\"label\":\"man: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼\",\"label\":\"man: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽\",\"label\":\"man: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾\",\"label\":\"man: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿\",\"label\":\"man: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧔\",\"label\":\"person: beard\",\"tone\":0,\"skins\":[{\"emoji\":\"🧔🏻\",\"label\":\"person: light skin tone, beard\",\"tone\":1},{\"emoji\":\"🧔🏼\",\"label\":\"person: medium-light skin tone, beard\",\"tone\":2},{\"emoji\":\"🧔🏽\",\"label\":\"person: medium skin tone, beard\",\"tone\":3},{\"emoji\":\"🧔🏾\",\"label\":\"person: medium-dark skin tone, beard\",\"tone\":4},{\"emoji\":\"🧔🏿\",\"label\":\"person: dark skin tone, beard\",\"tone\":5}]},{\"emoji\":\"🧔‍♂️\",\"label\":\"man: beard\",\"tone\":0,\"skins\":[{\"emoji\":\"🧔🏻‍♂️\",\"label\":\"man: light skin tone, beard\",\"tone\":1},{\"emoji\":\"🧔🏼‍♂️\",\"label\":\"man: medium-light skin tone, beard\",\"tone\":2},{\"emoji\":\"🧔🏽‍♂️\",\"label\":\"man: medium skin tone, beard\",\"tone\":3},{\"emoji\":\"🧔🏾‍♂️\",\"label\":\"man: medium-dark skin tone, beard\",\"tone\":4},{\"emoji\":\"🧔🏿‍♂️\",\"label\":\"man: dark skin tone, beard\",\"tone\":5}]},{\"emoji\":\"🧔‍♀️\",\"label\":\"woman: beard\",\"tone\":0,\"skins\":[{\"emoji\":\"🧔🏻‍♀️\",\"label\":\"woman: light skin tone, beard\",\"tone\":1},{\"emoji\":\"🧔🏼‍♀️\",\"label\":\"woman: medium-light skin tone, beard\",\"tone\":2},{\"emoji\":\"🧔🏽‍♀️\",\"label\":\"woman: medium skin tone, beard\",\"tone\":3},{\"emoji\":\"🧔🏾‍♀️\",\"label\":\"woman: medium-dark skin tone, beard\",\"tone\":4},{\"emoji\":\"🧔🏿‍♀️\",\"label\":\"woman: dark skin tone, beard\",\"tone\":5}]},{\"emoji\":\"👨‍🦰\",\"label\":\"man: red hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🦰\",\"label\":\"man: light skin tone, red hair\",\"tone\":1},{\"emoji\":\"👨🏼‍🦰\",\"label\":\"man: medium-light skin tone, red hair\",\"tone\":2},{\"emoji\":\"👨🏽‍🦰\",\"label\":\"man: medium skin tone, red hair\",\"tone\":3},{\"emoji\":\"👨🏾‍🦰\",\"label\":\"man: medium-dark skin tone, red hair\",\"tone\":4},{\"emoji\":\"👨🏿‍🦰\",\"label\":\"man: dark skin tone, red hair\",\"tone\":5}]},{\"emoji\":\"👨‍🦱\",\"label\":\"man: curly hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🦱\",\"label\":\"man: light skin tone, curly hair\",\"tone\":1},{\"emoji\":\"👨🏼‍🦱\",\"label\":\"man: medium-light skin tone, curly hair\",\"tone\":2},{\"emoji\":\"👨🏽‍🦱\",\"label\":\"man: medium skin tone, curly hair\",\"tone\":3},{\"emoji\":\"👨🏾‍🦱\",\"label\":\"man: medium-dark skin tone, curly hair\",\"tone\":4},{\"emoji\":\"👨🏿‍🦱\",\"label\":\"man: dark skin tone, curly hair\",\"tone\":5}]},{\"emoji\":\"👨‍🦳\",\"label\":\"man: white hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🦳\",\"label\":\"man: light skin tone, white hair\",\"tone\":1},{\"emoji\":\"👨🏼‍🦳\",\"label\":\"man: medium-light skin tone, white hair\",\"tone\":2},{\"emoji\":\"👨🏽‍🦳\",\"label\":\"man: medium skin tone, white hair\",\"tone\":3},{\"emoji\":\"👨🏾‍🦳\",\"label\":\"man: medium-dark skin tone, white hair\",\"tone\":4},{\"emoji\":\"👨🏿‍🦳\",\"label\":\"man: dark skin tone, white hair\",\"tone\":5}]},{\"emoji\":\"👨‍🦲\",\"label\":\"man: bald\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🦲\",\"label\":\"man: light skin tone, bald\",\"tone\":1},{\"emoji\":\"👨🏼‍🦲\",\"label\":\"man: medium-light skin tone, bald\",\"tone\":2},{\"emoji\":\"👨🏽‍🦲\",\"label\":\"man: medium skin tone, bald\",\"tone\":3},{\"emoji\":\"👨🏾‍🦲\",\"label\":\"man: medium-dark skin tone, bald\",\"tone\":4},{\"emoji\":\"👨🏿‍🦲\",\"label\":\"man: dark skin tone, bald\",\"tone\":5}]},{\"emoji\":\"👩\",\"label\":\"woman\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻\",\"label\":\"woman: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼\",\"label\":\"woman: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽\",\"label\":\"woman: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾\",\"label\":\"woman: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿\",\"label\":\"woman: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🦰\",\"label\":\"woman: red hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🦰\",\"label\":\"woman: light skin tone, red hair\",\"tone\":1},{\"emoji\":\"👩🏼‍🦰\",\"label\":\"woman: medium-light skin tone, red hair\",\"tone\":2},{\"emoji\":\"👩🏽‍🦰\",\"label\":\"woman: medium skin tone, red hair\",\"tone\":3},{\"emoji\":\"👩🏾‍🦰\",\"label\":\"woman: medium-dark skin tone, red hair\",\"tone\":4},{\"emoji\":\"👩🏿‍🦰\",\"label\":\"woman: dark skin tone, red hair\",\"tone\":5}]},{\"emoji\":\"🧑‍🦰\",\"label\":\"person: red hair\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🦰\",\"label\":\"person: light skin tone, red hair\",\"tone\":1},{\"emoji\":\"🧑🏼‍🦰\",\"label\":\"person: medium-light skin tone, red hair\",\"tone\":2},{\"emoji\":\"🧑🏽‍🦰\",\"label\":\"person: medium skin tone, red hair\",\"tone\":3},{\"emoji\":\"🧑🏾‍🦰\",\"label\":\"person: medium-dark skin tone, red hair\",\"tone\":4},{\"emoji\":\"🧑🏿‍🦰\",\"label\":\"person: dark skin tone, red hair\",\"tone\":5}]},{\"emoji\":\"👩‍🦱\",\"label\":\"woman: curly hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🦱\",\"label\":\"woman: light skin tone, curly hair\",\"tone\":1},{\"emoji\":\"👩🏼‍🦱\",\"label\":\"woman: medium-light skin tone, curly hair\",\"tone\":2},{\"emoji\":\"👩🏽‍🦱\",\"label\":\"woman: medium skin tone, curly hair\",\"tone\":3},{\"emoji\":\"👩🏾‍🦱\",\"label\":\"woman: medium-dark skin tone, curly hair\",\"tone\":4},{\"emoji\":\"👩🏿‍🦱\",\"label\":\"woman: dark skin tone, curly hair\",\"tone\":5}]},{\"emoji\":\"🧑‍🦱\",\"label\":\"person: curly hair\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🦱\",\"label\":\"person: light skin tone, curly hair\",\"tone\":1},{\"emoji\":\"🧑🏼‍🦱\",\"label\":\"person: medium-light skin tone, curly hair\",\"tone\":2},{\"emoji\":\"🧑🏽‍🦱\",\"label\":\"person: medium skin tone, curly hair\",\"tone\":3},{\"emoji\":\"🧑🏾‍🦱\",\"label\":\"person: medium-dark skin tone, curly hair\",\"tone\":4},{\"emoji\":\"🧑🏿‍🦱\",\"label\":\"person: dark skin tone, curly hair\",\"tone\":5}]},{\"emoji\":\"👩‍🦳\",\"label\":\"woman: white hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🦳\",\"label\":\"woman: light skin tone, white hair\",\"tone\":1},{\"emoji\":\"👩🏼‍🦳\",\"label\":\"woman: medium-light skin tone, white hair\",\"tone\":2},{\"emoji\":\"👩🏽‍🦳\",\"label\":\"woman: medium skin tone, white hair\",\"tone\":3},{\"emoji\":\"👩🏾‍🦳\",\"label\":\"woman: medium-dark skin tone, white hair\",\"tone\":4},{\"emoji\":\"👩🏿‍🦳\",\"label\":\"woman: dark skin tone, white hair\",\"tone\":5}]},{\"emoji\":\"🧑‍🦳\",\"label\":\"person: white hair\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🦳\",\"label\":\"person: light skin tone, white hair\",\"tone\":1},{\"emoji\":\"🧑🏼‍🦳\",\"label\":\"person: medium-light skin tone, white hair\",\"tone\":2},{\"emoji\":\"🧑🏽‍🦳\",\"label\":\"person: medium skin tone, white hair\",\"tone\":3},{\"emoji\":\"🧑🏾‍🦳\",\"label\":\"person: medium-dark skin tone, white hair\",\"tone\":4},{\"emoji\":\"🧑🏿‍🦳\",\"label\":\"person: dark skin tone, white hair\",\"tone\":5}]},{\"emoji\":\"👩‍🦲\",\"label\":\"woman: bald\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🦲\",\"label\":\"woman: light skin tone, bald\",\"tone\":1},{\"emoji\":\"👩🏼‍🦲\",\"label\":\"woman: medium-light skin tone, bald\",\"tone\":2},{\"emoji\":\"👩🏽‍🦲\",\"label\":\"woman: medium skin tone, bald\",\"tone\":3},{\"emoji\":\"👩🏾‍🦲\",\"label\":\"woman: medium-dark skin tone, bald\",\"tone\":4},{\"emoji\":\"👩🏿‍🦲\",\"label\":\"woman: dark skin tone, bald\",\"tone\":5}]},{\"emoji\":\"🧑‍🦲\",\"label\":\"person: bald\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🦲\",\"label\":\"person: light skin tone, bald\",\"tone\":1},{\"emoji\":\"🧑🏼‍🦲\",\"label\":\"person: medium-light skin tone, bald\",\"tone\":2},{\"emoji\":\"🧑🏽‍🦲\",\"label\":\"person: medium skin tone, bald\",\"tone\":3},{\"emoji\":\"🧑🏾‍🦲\",\"label\":\"person: medium-dark skin tone, bald\",\"tone\":4},{\"emoji\":\"🧑🏿‍🦲\",\"label\":\"person: dark skin tone, bald\",\"tone\":5}]},{\"emoji\":\"👱‍♀️\",\"label\":\"woman: blond hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👱🏻‍♀️\",\"label\":\"woman: light skin tone, blond hair\",\"tone\":1},{\"emoji\":\"👱🏼‍♀️\",\"label\":\"woman: medium-light skin tone, blond hair\",\"tone\":2},{\"emoji\":\"👱🏽‍♀️\",\"label\":\"woman: medium skin tone, blond hair\",\"tone\":3},{\"emoji\":\"👱🏾‍♀️\",\"label\":\"woman: medium-dark skin tone, blond hair\",\"tone\":4},{\"emoji\":\"👱🏿‍♀️\",\"label\":\"woman: dark skin tone, blond hair\",\"tone\":5}]},{\"emoji\":\"👱‍♂️\",\"label\":\"man: blond hair\",\"tone\":0,\"skins\":[{\"emoji\":\"👱🏻‍♂️\",\"label\":\"man: light skin tone, blond hair\",\"tone\":1},{\"emoji\":\"👱🏼‍♂️\",\"label\":\"man: medium-light skin tone, blond hair\",\"tone\":2},{\"emoji\":\"👱🏽‍♂️\",\"label\":\"man: medium skin tone, blond hair\",\"tone\":3},{\"emoji\":\"👱🏾‍♂️\",\"label\":\"man: medium-dark skin tone, blond hair\",\"tone\":4},{\"emoji\":\"👱🏿‍♂️\",\"label\":\"man: dark skin tone, blond hair\",\"tone\":5}]},{\"emoji\":\"🧓\",\"label\":\"older person\",\"tone\":0,\"skins\":[{\"emoji\":\"🧓🏻\",\"label\":\"older person: light skin tone\",\"tone\":1},{\"emoji\":\"🧓🏼\",\"label\":\"older person: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧓🏽\",\"label\":\"older person: medium skin tone\",\"tone\":3},{\"emoji\":\"🧓🏾\",\"label\":\"older person: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧓🏿\",\"label\":\"older person: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👴\",\"label\":\"old man\",\"tone\":0,\"skins\":[{\"emoji\":\"👴🏻\",\"label\":\"old man: light skin tone\",\"tone\":1},{\"emoji\":\"👴🏼\",\"label\":\"old man: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👴🏽\",\"label\":\"old man: medium skin tone\",\"tone\":3},{\"emoji\":\"👴🏾\",\"label\":\"old man: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👴🏿\",\"label\":\"old man: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👵\",\"label\":\"old woman\",\"tone\":0,\"skins\":[{\"emoji\":\"👵🏻\",\"label\":\"old woman: light skin tone\",\"tone\":1},{\"emoji\":\"👵🏼\",\"label\":\"old woman: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👵🏽\",\"label\":\"old woman: medium skin tone\",\"tone\":3},{\"emoji\":\"👵🏾\",\"label\":\"old woman: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👵🏿\",\"label\":\"old woman: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙍\",\"label\":\"person frowning\",\"tone\":0,\"skins\":[{\"emoji\":\"🙍🏻\",\"label\":\"person frowning: light skin tone\",\"tone\":1},{\"emoji\":\"🙍🏼\",\"label\":\"person frowning: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙍🏽\",\"label\":\"person frowning: medium skin tone\",\"tone\":3},{\"emoji\":\"🙍🏾\",\"label\":\"person frowning: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙍🏿\",\"label\":\"person frowning: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙍‍♂️\",\"label\":\"man frowning\",\"tone\":0,\"skins\":[{\"emoji\":\"🙍🏻‍♂️\",\"label\":\"man frowning: light skin tone\",\"tone\":1},{\"emoji\":\"🙍🏼‍♂️\",\"label\":\"man frowning: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙍🏽‍♂️\",\"label\":\"man frowning: medium skin tone\",\"tone\":3},{\"emoji\":\"🙍🏾‍♂️\",\"label\":\"man frowning: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙍🏿‍♂️\",\"label\":\"man frowning: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙍‍♀️\",\"label\":\"woman frowning\",\"tone\":0,\"skins\":[{\"emoji\":\"🙍🏻‍♀️\",\"label\":\"woman frowning: light skin tone\",\"tone\":1},{\"emoji\":\"🙍🏼‍♀️\",\"label\":\"woman frowning: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙍🏽‍♀️\",\"label\":\"woman frowning: medium skin tone\",\"tone\":3},{\"emoji\":\"🙍🏾‍♀️\",\"label\":\"woman frowning: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙍🏿‍♀️\",\"label\":\"woman frowning: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙎\",\"label\":\"person pouting\",\"tone\":0,\"skins\":[{\"emoji\":\"🙎🏻\",\"label\":\"person pouting: light skin tone\",\"tone\":1},{\"emoji\":\"🙎🏼\",\"label\":\"person pouting: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙎🏽\",\"label\":\"person pouting: medium skin tone\",\"tone\":3},{\"emoji\":\"🙎🏾\",\"label\":\"person pouting: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙎🏿\",\"label\":\"person pouting: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙎‍♂️\",\"label\":\"man pouting\",\"tone\":0,\"skins\":[{\"emoji\":\"🙎🏻‍♂️\",\"label\":\"man pouting: light skin tone\",\"tone\":1},{\"emoji\":\"🙎🏼‍♂️\",\"label\":\"man pouting: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙎🏽‍♂️\",\"label\":\"man pouting: medium skin tone\",\"tone\":3},{\"emoji\":\"🙎🏾‍♂️\",\"label\":\"man pouting: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙎🏿‍♂️\",\"label\":\"man pouting: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙎‍♀️\",\"label\":\"woman pouting\",\"tone\":0,\"skins\":[{\"emoji\":\"🙎🏻‍♀️\",\"label\":\"woman pouting: light skin tone\",\"tone\":1},{\"emoji\":\"🙎🏼‍♀️\",\"label\":\"woman pouting: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙎🏽‍♀️\",\"label\":\"woman pouting: medium skin tone\",\"tone\":3},{\"emoji\":\"🙎🏾‍♀️\",\"label\":\"woman pouting: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙎🏿‍♀️\",\"label\":\"woman pouting: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙅\",\"label\":\"person gesturing NO\",\"tone\":0,\"skins\":[{\"emoji\":\"🙅🏻\",\"label\":\"person gesturing NO: light skin tone\",\"tone\":1},{\"emoji\":\"🙅🏼\",\"label\":\"person gesturing NO: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙅🏽\",\"label\":\"person gesturing NO: medium skin tone\",\"tone\":3},{\"emoji\":\"🙅🏾\",\"label\":\"person gesturing NO: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙅🏿\",\"label\":\"person gesturing NO: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙅‍♂️\",\"label\":\"man gesturing NO\",\"tone\":0,\"skins\":[{\"emoji\":\"🙅🏻‍♂️\",\"label\":\"man gesturing NO: light skin tone\",\"tone\":1},{\"emoji\":\"🙅🏼‍♂️\",\"label\":\"man gesturing NO: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙅🏽‍♂️\",\"label\":\"man gesturing NO: medium skin tone\",\"tone\":3},{\"emoji\":\"🙅🏾‍♂️\",\"label\":\"man gesturing NO: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙅🏿‍♂️\",\"label\":\"man gesturing NO: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙅‍♀️\",\"label\":\"woman gesturing NO\",\"tone\":0,\"skins\":[{\"emoji\":\"🙅🏻‍♀️\",\"label\":\"woman gesturing NO: light skin tone\",\"tone\":1},{\"emoji\":\"🙅🏼‍♀️\",\"label\":\"woman gesturing NO: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙅🏽‍♀️\",\"label\":\"woman gesturing NO: medium skin tone\",\"tone\":3},{\"emoji\":\"🙅🏾‍♀️\",\"label\":\"woman gesturing NO: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙅🏿‍♀️\",\"label\":\"woman gesturing NO: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙆\",\"label\":\"person gesturing OK\",\"tone\":0,\"skins\":[{\"emoji\":\"🙆🏻\",\"label\":\"person gesturing OK: light skin tone\",\"tone\":1},{\"emoji\":\"🙆🏼\",\"label\":\"person gesturing OK: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙆🏽\",\"label\":\"person gesturing OK: medium skin tone\",\"tone\":3},{\"emoji\":\"🙆🏾\",\"label\":\"person gesturing OK: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙆🏿\",\"label\":\"person gesturing OK: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙆‍♂️\",\"label\":\"man gesturing OK\",\"tone\":0,\"skins\":[{\"emoji\":\"🙆🏻‍♂️\",\"label\":\"man gesturing OK: light skin tone\",\"tone\":1},{\"emoji\":\"🙆🏼‍♂️\",\"label\":\"man gesturing OK: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙆🏽‍♂️\",\"label\":\"man gesturing OK: medium skin tone\",\"tone\":3},{\"emoji\":\"🙆🏾‍♂️\",\"label\":\"man gesturing OK: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙆🏿‍♂️\",\"label\":\"man gesturing OK: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙆‍♀️\",\"label\":\"woman gesturing OK\",\"tone\":0,\"skins\":[{\"emoji\":\"🙆🏻‍♀️\",\"label\":\"woman gesturing OK: light skin tone\",\"tone\":1},{\"emoji\":\"🙆🏼‍♀️\",\"label\":\"woman gesturing OK: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙆🏽‍♀️\",\"label\":\"woman gesturing OK: medium skin tone\",\"tone\":3},{\"emoji\":\"🙆🏾‍♀️\",\"label\":\"woman gesturing OK: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙆🏿‍♀️\",\"label\":\"woman gesturing OK: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💁\",\"label\":\"person tipping hand\",\"tone\":0,\"skins\":[{\"emoji\":\"💁🏻\",\"label\":\"person tipping hand: light skin tone\",\"tone\":1},{\"emoji\":\"💁🏼\",\"label\":\"person tipping hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💁🏽\",\"label\":\"person tipping hand: medium skin tone\",\"tone\":3},{\"emoji\":\"💁🏾\",\"label\":\"person tipping hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💁🏿\",\"label\":\"person tipping hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💁‍♂️\",\"label\":\"man tipping hand\",\"tone\":0,\"skins\":[{\"emoji\":\"💁🏻‍♂️\",\"label\":\"man tipping hand: light skin tone\",\"tone\":1},{\"emoji\":\"💁🏼‍♂️\",\"label\":\"man tipping hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💁🏽‍♂️\",\"label\":\"man tipping hand: medium skin tone\",\"tone\":3},{\"emoji\":\"💁🏾‍♂️\",\"label\":\"man tipping hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💁🏿‍♂️\",\"label\":\"man tipping hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💁‍♀️\",\"label\":\"woman tipping hand\",\"tone\":0,\"skins\":[{\"emoji\":\"💁🏻‍♀️\",\"label\":\"woman tipping hand: light skin tone\",\"tone\":1},{\"emoji\":\"💁🏼‍♀️\",\"label\":\"woman tipping hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💁🏽‍♀️\",\"label\":\"woman tipping hand: medium skin tone\",\"tone\":3},{\"emoji\":\"💁🏾‍♀️\",\"label\":\"woman tipping hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💁🏿‍♀️\",\"label\":\"woman tipping hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙋\",\"label\":\"person raising hand\",\"tone\":0,\"skins\":[{\"emoji\":\"🙋🏻\",\"label\":\"person raising hand: light skin tone\",\"tone\":1},{\"emoji\":\"🙋🏼\",\"label\":\"person raising hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙋🏽\",\"label\":\"person raising hand: medium skin tone\",\"tone\":3},{\"emoji\":\"🙋🏾\",\"label\":\"person raising hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙋🏿\",\"label\":\"person raising hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙋‍♂️\",\"label\":\"man raising hand\",\"tone\":0,\"skins\":[{\"emoji\":\"🙋🏻‍♂️\",\"label\":\"man raising hand: light skin tone\",\"tone\":1},{\"emoji\":\"🙋🏼‍♂️\",\"label\":\"man raising hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙋🏽‍♂️\",\"label\":\"man raising hand: medium skin tone\",\"tone\":3},{\"emoji\":\"🙋🏾‍♂️\",\"label\":\"man raising hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙋🏿‍♂️\",\"label\":\"man raising hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙋‍♀️\",\"label\":\"woman raising hand\",\"tone\":0,\"skins\":[{\"emoji\":\"🙋🏻‍♀️\",\"label\":\"woman raising hand: light skin tone\",\"tone\":1},{\"emoji\":\"🙋🏼‍♀️\",\"label\":\"woman raising hand: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙋🏽‍♀️\",\"label\":\"woman raising hand: medium skin tone\",\"tone\":3},{\"emoji\":\"🙋🏾‍♀️\",\"label\":\"woman raising hand: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙋🏿‍♀️\",\"label\":\"woman raising hand: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧏\",\"label\":\"deaf person\",\"tone\":0,\"skins\":[{\"emoji\":\"🧏🏻\",\"label\":\"deaf person: light skin tone\",\"tone\":1},{\"emoji\":\"🧏🏼\",\"label\":\"deaf person: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧏🏽\",\"label\":\"deaf person: medium skin tone\",\"tone\":3},{\"emoji\":\"🧏🏾\",\"label\":\"deaf person: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧏🏿\",\"label\":\"deaf person: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧏‍♂️\",\"label\":\"deaf man\",\"tone\":0,\"skins\":[{\"emoji\":\"🧏🏻‍♂️\",\"label\":\"deaf man: light skin tone\",\"tone\":1},{\"emoji\":\"🧏🏼‍♂️\",\"label\":\"deaf man: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧏🏽‍♂️\",\"label\":\"deaf man: medium skin tone\",\"tone\":3},{\"emoji\":\"🧏🏾‍♂️\",\"label\":\"deaf man: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧏🏿‍♂️\",\"label\":\"deaf man: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧏‍♀️\",\"label\":\"deaf woman\",\"tone\":0,\"skins\":[{\"emoji\":\"🧏🏻‍♀️\",\"label\":\"deaf woman: light skin tone\",\"tone\":1},{\"emoji\":\"🧏🏼‍♀️\",\"label\":\"deaf woman: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧏🏽‍♀️\",\"label\":\"deaf woman: medium skin tone\",\"tone\":3},{\"emoji\":\"🧏🏾‍♀️\",\"label\":\"deaf woman: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧏🏿‍♀️\",\"label\":\"deaf woman: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙇\",\"label\":\"person bowing\",\"tone\":0,\"skins\":[{\"emoji\":\"🙇🏻\",\"label\":\"person bowing: light skin tone\",\"tone\":1},{\"emoji\":\"🙇🏼\",\"label\":\"person bowing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙇🏽\",\"label\":\"person bowing: medium skin tone\",\"tone\":3},{\"emoji\":\"🙇🏾\",\"label\":\"person bowing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙇🏿\",\"label\":\"person bowing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙇‍♂️\",\"label\":\"man bowing\",\"tone\":0,\"skins\":[{\"emoji\":\"🙇🏻‍♂️\",\"label\":\"man bowing: light skin tone\",\"tone\":1},{\"emoji\":\"🙇🏼‍♂️\",\"label\":\"man bowing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙇🏽‍♂️\",\"label\":\"man bowing: medium skin tone\",\"tone\":3},{\"emoji\":\"🙇🏾‍♂️\",\"label\":\"man bowing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙇🏿‍♂️\",\"label\":\"man bowing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🙇‍♀️\",\"label\":\"woman bowing\",\"tone\":0,\"skins\":[{\"emoji\":\"🙇🏻‍♀️\",\"label\":\"woman bowing: light skin tone\",\"tone\":1},{\"emoji\":\"🙇🏼‍♀️\",\"label\":\"woman bowing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🙇🏽‍♀️\",\"label\":\"woman bowing: medium skin tone\",\"tone\":3},{\"emoji\":\"🙇🏾‍♀️\",\"label\":\"woman bowing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🙇🏿‍♀️\",\"label\":\"woman bowing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤦\",\"label\":\"person facepalming\",\"tone\":0,\"skins\":[{\"emoji\":\"🤦🏻\",\"label\":\"person facepalming: light skin tone\",\"tone\":1},{\"emoji\":\"🤦🏼\",\"label\":\"person facepalming: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤦🏽\",\"label\":\"person facepalming: medium skin tone\",\"tone\":3},{\"emoji\":\"🤦🏾\",\"label\":\"person facepalming: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤦🏿\",\"label\":\"person facepalming: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤦‍♂️\",\"label\":\"man facepalming\",\"tone\":0,\"skins\":[{\"emoji\":\"🤦🏻‍♂️\",\"label\":\"man facepalming: light skin tone\",\"tone\":1},{\"emoji\":\"🤦🏼‍♂️\",\"label\":\"man facepalming: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤦🏽‍♂️\",\"label\":\"man facepalming: medium skin tone\",\"tone\":3},{\"emoji\":\"🤦🏾‍♂️\",\"label\":\"man facepalming: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤦🏿‍♂️\",\"label\":\"man facepalming: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤦‍♀️\",\"label\":\"woman facepalming\",\"tone\":0,\"skins\":[{\"emoji\":\"🤦🏻‍♀️\",\"label\":\"woman facepalming: light skin tone\",\"tone\":1},{\"emoji\":\"🤦🏼‍♀️\",\"label\":\"woman facepalming: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤦🏽‍♀️\",\"label\":\"woman facepalming: medium skin tone\",\"tone\":3},{\"emoji\":\"🤦🏾‍♀️\",\"label\":\"woman facepalming: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤦🏿‍♀️\",\"label\":\"woman facepalming: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤷\",\"label\":\"person shrugging\",\"tone\":0,\"skins\":[{\"emoji\":\"🤷🏻\",\"label\":\"person shrugging: light skin tone\",\"tone\":1},{\"emoji\":\"🤷🏼\",\"label\":\"person shrugging: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤷🏽\",\"label\":\"person shrugging: medium skin tone\",\"tone\":3},{\"emoji\":\"🤷🏾\",\"label\":\"person shrugging: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤷🏿\",\"label\":\"person shrugging: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤷‍♂️\",\"label\":\"man shrugging\",\"tone\":0,\"skins\":[{\"emoji\":\"🤷🏻‍♂️\",\"label\":\"man shrugging: light skin tone\",\"tone\":1},{\"emoji\":\"🤷🏼‍♂️\",\"label\":\"man shrugging: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤷🏽‍♂️\",\"label\":\"man shrugging: medium skin tone\",\"tone\":3},{\"emoji\":\"🤷🏾‍♂️\",\"label\":\"man shrugging: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤷🏿‍♂️\",\"label\":\"man shrugging: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤷‍♀️\",\"label\":\"woman shrugging\",\"tone\":0,\"skins\":[{\"emoji\":\"🤷🏻‍♀️\",\"label\":\"woman shrugging: light skin tone\",\"tone\":1},{\"emoji\":\"🤷🏼‍♀️\",\"label\":\"woman shrugging: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤷🏽‍♀️\",\"label\":\"woman shrugging: medium skin tone\",\"tone\":3},{\"emoji\":\"🤷🏾‍♀️\",\"label\":\"woman shrugging: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤷🏿‍♀️\",\"label\":\"woman shrugging: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍⚕️\",\"label\":\"health worker\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍⚕️\",\"label\":\"health worker: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍⚕️\",\"label\":\"health worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍⚕️\",\"label\":\"health worker: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍⚕️\",\"label\":\"health worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍⚕️\",\"label\":\"health worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍⚕️\",\"label\":\"man health worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍⚕️\",\"label\":\"man health worker: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍⚕️\",\"label\":\"man health worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍⚕️\",\"label\":\"man health worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍⚕️\",\"label\":\"man health worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍⚕️\",\"label\":\"man health worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍⚕️\",\"label\":\"woman health worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍⚕️\",\"label\":\"woman health worker: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍⚕️\",\"label\":\"woman health worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍⚕️\",\"label\":\"woman health worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍⚕️\",\"label\":\"woman health worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍⚕️\",\"label\":\"woman health worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🎓\",\"label\":\"student\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🎓\",\"label\":\"student: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🎓\",\"label\":\"student: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🎓\",\"label\":\"student: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🎓\",\"label\":\"student: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🎓\",\"label\":\"student: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🎓\",\"label\":\"man student\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🎓\",\"label\":\"man student: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🎓\",\"label\":\"man student: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🎓\",\"label\":\"man student: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🎓\",\"label\":\"man student: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🎓\",\"label\":\"man student: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🎓\",\"label\":\"woman student\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🎓\",\"label\":\"woman student: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🎓\",\"label\":\"woman student: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🎓\",\"label\":\"woman student: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🎓\",\"label\":\"woman student: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🎓\",\"label\":\"woman student: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🏫\",\"label\":\"teacher\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🏫\",\"label\":\"teacher: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🏫\",\"label\":\"teacher: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🏫\",\"label\":\"teacher: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🏫\",\"label\":\"teacher: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🏫\",\"label\":\"teacher: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🏫\",\"label\":\"man teacher\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🏫\",\"label\":\"man teacher: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🏫\",\"label\":\"man teacher: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🏫\",\"label\":\"man teacher: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🏫\",\"label\":\"man teacher: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🏫\",\"label\":\"man teacher: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🏫\",\"label\":\"woman teacher\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🏫\",\"label\":\"woman teacher: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🏫\",\"label\":\"woman teacher: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🏫\",\"label\":\"woman teacher: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🏫\",\"label\":\"woman teacher: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🏫\",\"label\":\"woman teacher: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍⚖️\",\"label\":\"judge\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍⚖️\",\"label\":\"judge: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍⚖️\",\"label\":\"judge: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍⚖️\",\"label\":\"judge: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍⚖️\",\"label\":\"judge: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍⚖️\",\"label\":\"judge: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍⚖️\",\"label\":\"man judge\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍⚖️\",\"label\":\"man judge: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍⚖️\",\"label\":\"man judge: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍⚖️\",\"label\":\"man judge: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍⚖️\",\"label\":\"man judge: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍⚖️\",\"label\":\"man judge: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍⚖️\",\"label\":\"woman judge\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍⚖️\",\"label\":\"woman judge: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍⚖️\",\"label\":\"woman judge: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍⚖️\",\"label\":\"woman judge: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍⚖️\",\"label\":\"woman judge: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍⚖️\",\"label\":\"woman judge: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🌾\",\"label\":\"farmer\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🌾\",\"label\":\"farmer: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🌾\",\"label\":\"farmer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🌾\",\"label\":\"farmer: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🌾\",\"label\":\"farmer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🌾\",\"label\":\"farmer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🌾\",\"label\":\"man farmer\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🌾\",\"label\":\"man farmer: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🌾\",\"label\":\"man farmer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🌾\",\"label\":\"man farmer: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🌾\",\"label\":\"man farmer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🌾\",\"label\":\"man farmer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🌾\",\"label\":\"woman farmer\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🌾\",\"label\":\"woman farmer: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🌾\",\"label\":\"woman farmer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🌾\",\"label\":\"woman farmer: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🌾\",\"label\":\"woman farmer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🌾\",\"label\":\"woman farmer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🍳\",\"label\":\"cook\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🍳\",\"label\":\"cook: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🍳\",\"label\":\"cook: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🍳\",\"label\":\"cook: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🍳\",\"label\":\"cook: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🍳\",\"label\":\"cook: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🍳\",\"label\":\"man cook\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🍳\",\"label\":\"man cook: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🍳\",\"label\":\"man cook: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🍳\",\"label\":\"man cook: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🍳\",\"label\":\"man cook: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🍳\",\"label\":\"man cook: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🍳\",\"label\":\"woman cook\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🍳\",\"label\":\"woman cook: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🍳\",\"label\":\"woman cook: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🍳\",\"label\":\"woman cook: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🍳\",\"label\":\"woman cook: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🍳\",\"label\":\"woman cook: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🔧\",\"label\":\"mechanic\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🔧\",\"label\":\"mechanic: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🔧\",\"label\":\"mechanic: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🔧\",\"label\":\"mechanic: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🔧\",\"label\":\"mechanic: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🔧\",\"label\":\"mechanic: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🔧\",\"label\":\"man mechanic\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🔧\",\"label\":\"man mechanic: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🔧\",\"label\":\"man mechanic: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🔧\",\"label\":\"man mechanic: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🔧\",\"label\":\"man mechanic: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🔧\",\"label\":\"man mechanic: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🔧\",\"label\":\"woman mechanic\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🔧\",\"label\":\"woman mechanic: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🔧\",\"label\":\"woman mechanic: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🔧\",\"label\":\"woman mechanic: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🔧\",\"label\":\"woman mechanic: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🔧\",\"label\":\"woman mechanic: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🏭\",\"label\":\"factory worker\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🏭\",\"label\":\"factory worker: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🏭\",\"label\":\"factory worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🏭\",\"label\":\"factory worker: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🏭\",\"label\":\"factory worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🏭\",\"label\":\"factory worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🏭\",\"label\":\"man factory worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🏭\",\"label\":\"man factory worker: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🏭\",\"label\":\"man factory worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🏭\",\"label\":\"man factory worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🏭\",\"label\":\"man factory worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🏭\",\"label\":\"man factory worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🏭\",\"label\":\"woman factory worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🏭\",\"label\":\"woman factory worker: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🏭\",\"label\":\"woman factory worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🏭\",\"label\":\"woman factory worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🏭\",\"label\":\"woman factory worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🏭\",\"label\":\"woman factory worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍💼\",\"label\":\"office worker\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍💼\",\"label\":\"office worker: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍💼\",\"label\":\"office worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍💼\",\"label\":\"office worker: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍💼\",\"label\":\"office worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍💼\",\"label\":\"office worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍💼\",\"label\":\"man office worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍💼\",\"label\":\"man office worker: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍💼\",\"label\":\"man office worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍💼\",\"label\":\"man office worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍💼\",\"label\":\"man office worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍💼\",\"label\":\"man office worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍💼\",\"label\":\"woman office worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍💼\",\"label\":\"woman office worker: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍💼\",\"label\":\"woman office worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍💼\",\"label\":\"woman office worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍💼\",\"label\":\"woman office worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍💼\",\"label\":\"woman office worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🔬\",\"label\":\"scientist\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🔬\",\"label\":\"scientist: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🔬\",\"label\":\"scientist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🔬\",\"label\":\"scientist: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🔬\",\"label\":\"scientist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🔬\",\"label\":\"scientist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🔬\",\"label\":\"man scientist\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🔬\",\"label\":\"man scientist: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🔬\",\"label\":\"man scientist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🔬\",\"label\":\"man scientist: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🔬\",\"label\":\"man scientist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🔬\",\"label\":\"man scientist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🔬\",\"label\":\"woman scientist\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🔬\",\"label\":\"woman scientist: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🔬\",\"label\":\"woman scientist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🔬\",\"label\":\"woman scientist: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🔬\",\"label\":\"woman scientist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🔬\",\"label\":\"woman scientist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍💻\",\"label\":\"technologist\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍💻\",\"label\":\"technologist: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍💻\",\"label\":\"technologist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍💻\",\"label\":\"technologist: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍💻\",\"label\":\"technologist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍💻\",\"label\":\"technologist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍💻\",\"label\":\"man technologist\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍💻\",\"label\":\"man technologist: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍💻\",\"label\":\"man technologist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍💻\",\"label\":\"man technologist: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍💻\",\"label\":\"man technologist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍💻\",\"label\":\"man technologist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍💻\",\"label\":\"woman technologist\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍💻\",\"label\":\"woman technologist: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍💻\",\"label\":\"woman technologist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍💻\",\"label\":\"woman technologist: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍💻\",\"label\":\"woman technologist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍💻\",\"label\":\"woman technologist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🎤\",\"label\":\"singer\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🎤\",\"label\":\"singer: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🎤\",\"label\":\"singer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🎤\",\"label\":\"singer: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🎤\",\"label\":\"singer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🎤\",\"label\":\"singer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🎤\",\"label\":\"man singer\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🎤\",\"label\":\"man singer: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🎤\",\"label\":\"man singer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🎤\",\"label\":\"man singer: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🎤\",\"label\":\"man singer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🎤\",\"label\":\"man singer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🎤\",\"label\":\"woman singer\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🎤\",\"label\":\"woman singer: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🎤\",\"label\":\"woman singer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🎤\",\"label\":\"woman singer: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🎤\",\"label\":\"woman singer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🎤\",\"label\":\"woman singer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🎨\",\"label\":\"artist\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🎨\",\"label\":\"artist: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🎨\",\"label\":\"artist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🎨\",\"label\":\"artist: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🎨\",\"label\":\"artist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🎨\",\"label\":\"artist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🎨\",\"label\":\"man artist\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🎨\",\"label\":\"man artist: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🎨\",\"label\":\"man artist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🎨\",\"label\":\"man artist: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🎨\",\"label\":\"man artist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🎨\",\"label\":\"man artist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🎨\",\"label\":\"woman artist\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🎨\",\"label\":\"woman artist: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🎨\",\"label\":\"woman artist: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🎨\",\"label\":\"woman artist: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🎨\",\"label\":\"woman artist: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🎨\",\"label\":\"woman artist: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍✈️\",\"label\":\"pilot\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍✈️\",\"label\":\"pilot: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍✈️\",\"label\":\"pilot: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍✈️\",\"label\":\"pilot: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍✈️\",\"label\":\"pilot: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍✈️\",\"label\":\"pilot: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍✈️\",\"label\":\"man pilot\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍✈️\",\"label\":\"man pilot: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍✈️\",\"label\":\"man pilot: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍✈️\",\"label\":\"man pilot: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍✈️\",\"label\":\"man pilot: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍✈️\",\"label\":\"man pilot: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍✈️\",\"label\":\"woman pilot\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍✈️\",\"label\":\"woman pilot: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍✈️\",\"label\":\"woman pilot: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍✈️\",\"label\":\"woman pilot: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍✈️\",\"label\":\"woman pilot: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍✈️\",\"label\":\"woman pilot: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🚀\",\"label\":\"astronaut\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🚀\",\"label\":\"astronaut: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🚀\",\"label\":\"astronaut: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🚀\",\"label\":\"astronaut: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🚀\",\"label\":\"astronaut: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🚀\",\"label\":\"astronaut: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🚀\",\"label\":\"man astronaut\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🚀\",\"label\":\"man astronaut: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🚀\",\"label\":\"man astronaut: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🚀\",\"label\":\"man astronaut: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🚀\",\"label\":\"man astronaut: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🚀\",\"label\":\"man astronaut: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🚀\",\"label\":\"woman astronaut\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🚀\",\"label\":\"woman astronaut: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🚀\",\"label\":\"woman astronaut: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🚀\",\"label\":\"woman astronaut: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🚀\",\"label\":\"woman astronaut: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🚀\",\"label\":\"woman astronaut: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🚒\",\"label\":\"firefighter\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🚒\",\"label\":\"firefighter: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🚒\",\"label\":\"firefighter: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🚒\",\"label\":\"firefighter: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🚒\",\"label\":\"firefighter: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🚒\",\"label\":\"firefighter: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🚒\",\"label\":\"man firefighter\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🚒\",\"label\":\"man firefighter: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🚒\",\"label\":\"man firefighter: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🚒\",\"label\":\"man firefighter: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🚒\",\"label\":\"man firefighter: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🚒\",\"label\":\"man firefighter: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🚒\",\"label\":\"woman firefighter\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🚒\",\"label\":\"woman firefighter: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🚒\",\"label\":\"woman firefighter: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🚒\",\"label\":\"woman firefighter: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🚒\",\"label\":\"woman firefighter: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🚒\",\"label\":\"woman firefighter: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👮\",\"label\":\"police officer\",\"tone\":0,\"skins\":[{\"emoji\":\"👮🏻\",\"label\":\"police officer: light skin tone\",\"tone\":1},{\"emoji\":\"👮🏼\",\"label\":\"police officer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👮🏽\",\"label\":\"police officer: medium skin tone\",\"tone\":3},{\"emoji\":\"👮🏾\",\"label\":\"police officer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👮🏿\",\"label\":\"police officer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👮‍♂️\",\"label\":\"man police officer\",\"tone\":0,\"skins\":[{\"emoji\":\"👮🏻‍♂️\",\"label\":\"man police officer: light skin tone\",\"tone\":1},{\"emoji\":\"👮🏼‍♂️\",\"label\":\"man police officer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👮🏽‍♂️\",\"label\":\"man police officer: medium skin tone\",\"tone\":3},{\"emoji\":\"👮🏾‍♂️\",\"label\":\"man police officer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👮🏿‍♂️\",\"label\":\"man police officer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👮‍♀️\",\"label\":\"woman police officer\",\"tone\":0,\"skins\":[{\"emoji\":\"👮🏻‍♀️\",\"label\":\"woman police officer: light skin tone\",\"tone\":1},{\"emoji\":\"👮🏼‍♀️\",\"label\":\"woman police officer: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👮🏽‍♀️\",\"label\":\"woman police officer: medium skin tone\",\"tone\":3},{\"emoji\":\"👮🏾‍♀️\",\"label\":\"woman police officer: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👮🏿‍♀️\",\"label\":\"woman police officer: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🕵️\",\"label\":\"detective\",\"tone\":0,\"skins\":[{\"emoji\":\"🕵🏻\",\"label\":\"detective: light skin tone\",\"tone\":1},{\"emoji\":\"🕵🏼\",\"label\":\"detective: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🕵🏽\",\"label\":\"detective: medium skin tone\",\"tone\":3},{\"emoji\":\"🕵🏾\",\"label\":\"detective: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🕵🏿\",\"label\":\"detective: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🕵️‍♂️\",\"label\":\"man detective\",\"tone\":0,\"skins\":[{\"emoji\":\"🕵🏻‍♂️\",\"label\":\"man detective: light skin tone\",\"tone\":1},{\"emoji\":\"🕵🏼‍♂️\",\"label\":\"man detective: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🕵🏽‍♂️\",\"label\":\"man detective: medium skin tone\",\"tone\":3},{\"emoji\":\"🕵🏾‍♂️\",\"label\":\"man detective: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🕵🏿‍♂️\",\"label\":\"man detective: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🕵️‍♀️\",\"label\":\"woman detective\",\"tone\":0,\"skins\":[{\"emoji\":\"🕵🏻‍♀️\",\"label\":\"woman detective: light skin tone\",\"tone\":1},{\"emoji\":\"🕵🏼‍♀️\",\"label\":\"woman detective: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🕵🏽‍♀️\",\"label\":\"woman detective: medium skin tone\",\"tone\":3},{\"emoji\":\"🕵🏾‍♀️\",\"label\":\"woman detective: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🕵🏿‍♀️\",\"label\":\"woman detective: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💂\",\"label\":\"guard\",\"tone\":0,\"skins\":[{\"emoji\":\"💂🏻\",\"label\":\"guard: light skin tone\",\"tone\":1},{\"emoji\":\"💂🏼\",\"label\":\"guard: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💂🏽\",\"label\":\"guard: medium skin tone\",\"tone\":3},{\"emoji\":\"💂🏾\",\"label\":\"guard: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💂🏿\",\"label\":\"guard: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💂‍♂️\",\"label\":\"man guard\",\"tone\":0,\"skins\":[{\"emoji\":\"💂🏻‍♂️\",\"label\":\"man guard: light skin tone\",\"tone\":1},{\"emoji\":\"💂🏼‍♂️\",\"label\":\"man guard: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💂🏽‍♂️\",\"label\":\"man guard: medium skin tone\",\"tone\":3},{\"emoji\":\"💂🏾‍♂️\",\"label\":\"man guard: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💂🏿‍♂️\",\"label\":\"man guard: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💂‍♀️\",\"label\":\"woman guard\",\"tone\":0,\"skins\":[{\"emoji\":\"💂🏻‍♀️\",\"label\":\"woman guard: light skin tone\",\"tone\":1},{\"emoji\":\"💂🏼‍♀️\",\"label\":\"woman guard: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💂🏽‍♀️\",\"label\":\"woman guard: medium skin tone\",\"tone\":3},{\"emoji\":\"💂🏾‍♀️\",\"label\":\"woman guard: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💂🏿‍♀️\",\"label\":\"woman guard: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🥷\",\"label\":\"ninja\",\"tone\":0,\"skins\":[{\"emoji\":\"🥷🏻\",\"label\":\"ninja: light skin tone\",\"tone\":1},{\"emoji\":\"🥷🏼\",\"label\":\"ninja: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🥷🏽\",\"label\":\"ninja: medium skin tone\",\"tone\":3},{\"emoji\":\"🥷🏾\",\"label\":\"ninja: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🥷🏿\",\"label\":\"ninja: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👷\",\"label\":\"construction worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👷🏻\",\"label\":\"construction worker: light skin tone\",\"tone\":1},{\"emoji\":\"👷🏼\",\"label\":\"construction worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👷🏽\",\"label\":\"construction worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👷🏾\",\"label\":\"construction worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👷🏿\",\"label\":\"construction worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👷‍♂️\",\"label\":\"man construction worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👷🏻‍♂️\",\"label\":\"man construction worker: light skin tone\",\"tone\":1},{\"emoji\":\"👷🏼‍♂️\",\"label\":\"man construction worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👷🏽‍♂️\",\"label\":\"man construction worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👷🏾‍♂️\",\"label\":\"man construction worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👷🏿‍♂️\",\"label\":\"man construction worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👷‍♀️\",\"label\":\"woman construction worker\",\"tone\":0,\"skins\":[{\"emoji\":\"👷🏻‍♀️\",\"label\":\"woman construction worker: light skin tone\",\"tone\":1},{\"emoji\":\"👷🏼‍♀️\",\"label\":\"woman construction worker: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👷🏽‍♀️\",\"label\":\"woman construction worker: medium skin tone\",\"tone\":3},{\"emoji\":\"👷🏾‍♀️\",\"label\":\"woman construction worker: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👷🏿‍♀️\",\"label\":\"woman construction worker: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤴\",\"label\":\"prince\",\"tone\":0,\"skins\":[{\"emoji\":\"🤴🏻\",\"label\":\"prince: light skin tone\",\"tone\":1},{\"emoji\":\"🤴🏼\",\"label\":\"prince: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤴🏽\",\"label\":\"prince: medium skin tone\",\"tone\":3},{\"emoji\":\"🤴🏾\",\"label\":\"prince: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤴🏿\",\"label\":\"prince: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👸\",\"label\":\"princess\",\"tone\":0,\"skins\":[{\"emoji\":\"👸🏻\",\"label\":\"princess: light skin tone\",\"tone\":1},{\"emoji\":\"👸🏼\",\"label\":\"princess: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👸🏽\",\"label\":\"princess: medium skin tone\",\"tone\":3},{\"emoji\":\"👸🏾\",\"label\":\"princess: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👸🏿\",\"label\":\"princess: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👳\",\"label\":\"person wearing turban\",\"tone\":0,\"skins\":[{\"emoji\":\"👳🏻\",\"label\":\"person wearing turban: light skin tone\",\"tone\":1},{\"emoji\":\"👳🏼\",\"label\":\"person wearing turban: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👳🏽\",\"label\":\"person wearing turban: medium skin tone\",\"tone\":3},{\"emoji\":\"👳🏾\",\"label\":\"person wearing turban: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👳🏿\",\"label\":\"person wearing turban: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👳‍♂️\",\"label\":\"man wearing turban\",\"tone\":0,\"skins\":[{\"emoji\":\"👳🏻‍♂️\",\"label\":\"man wearing turban: light skin tone\",\"tone\":1},{\"emoji\":\"👳🏼‍♂️\",\"label\":\"man wearing turban: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👳🏽‍♂️\",\"label\":\"man wearing turban: medium skin tone\",\"tone\":3},{\"emoji\":\"👳🏾‍♂️\",\"label\":\"man wearing turban: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👳🏿‍♂️\",\"label\":\"man wearing turban: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👳‍♀️\",\"label\":\"woman wearing turban\",\"tone\":0,\"skins\":[{\"emoji\":\"👳🏻‍♀️\",\"label\":\"woman wearing turban: light skin tone\",\"tone\":1},{\"emoji\":\"👳🏼‍♀️\",\"label\":\"woman wearing turban: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👳🏽‍♀️\",\"label\":\"woman wearing turban: medium skin tone\",\"tone\":3},{\"emoji\":\"👳🏾‍♀️\",\"label\":\"woman wearing turban: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👳🏿‍♀️\",\"label\":\"woman wearing turban: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👲\",\"label\":\"person with skullcap\",\"tone\":0,\"skins\":[{\"emoji\":\"👲🏻\",\"label\":\"person with skullcap: light skin tone\",\"tone\":1},{\"emoji\":\"👲🏼\",\"label\":\"person with skullcap: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👲🏽\",\"label\":\"person with skullcap: medium skin tone\",\"tone\":3},{\"emoji\":\"👲🏾\",\"label\":\"person with skullcap: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👲🏿\",\"label\":\"person with skullcap: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧕\",\"label\":\"woman with headscarf\",\"tone\":0,\"skins\":[{\"emoji\":\"🧕🏻\",\"label\":\"woman with headscarf: light skin tone\",\"tone\":1},{\"emoji\":\"🧕🏼\",\"label\":\"woman with headscarf: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧕🏽\",\"label\":\"woman with headscarf: medium skin tone\",\"tone\":3},{\"emoji\":\"🧕🏾\",\"label\":\"woman with headscarf: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧕🏿\",\"label\":\"woman with headscarf: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤵\",\"label\":\"person in tuxedo\",\"tone\":0,\"skins\":[{\"emoji\":\"🤵🏻\",\"label\":\"person in tuxedo: light skin tone\",\"tone\":1},{\"emoji\":\"🤵🏼\",\"label\":\"person in tuxedo: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤵🏽\",\"label\":\"person in tuxedo: medium skin tone\",\"tone\":3},{\"emoji\":\"🤵🏾\",\"label\":\"person in tuxedo: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤵🏿\",\"label\":\"person in tuxedo: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤵‍♂️\",\"label\":\"man in tuxedo\",\"tone\":0,\"skins\":[{\"emoji\":\"🤵🏻‍♂️\",\"label\":\"man in tuxedo: light skin tone\",\"tone\":1},{\"emoji\":\"🤵🏼‍♂️\",\"label\":\"man in tuxedo: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤵🏽‍♂️\",\"label\":\"man in tuxedo: medium skin tone\",\"tone\":3},{\"emoji\":\"🤵🏾‍♂️\",\"label\":\"man in tuxedo: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤵🏿‍♂️\",\"label\":\"man in tuxedo: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤵‍♀️\",\"label\":\"woman in tuxedo\",\"tone\":0,\"skins\":[{\"emoji\":\"🤵🏻‍♀️\",\"label\":\"woman in tuxedo: light skin tone\",\"tone\":1},{\"emoji\":\"🤵🏼‍♀️\",\"label\":\"woman in tuxedo: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤵🏽‍♀️\",\"label\":\"woman in tuxedo: medium skin tone\",\"tone\":3},{\"emoji\":\"🤵🏾‍♀️\",\"label\":\"woman in tuxedo: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤵🏿‍♀️\",\"label\":\"woman in tuxedo: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👰\",\"label\":\"person with veil\",\"tone\":0,\"skins\":[{\"emoji\":\"👰🏻\",\"label\":\"person with veil: light skin tone\",\"tone\":1},{\"emoji\":\"👰🏼\",\"label\":\"person with veil: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👰🏽\",\"label\":\"person with veil: medium skin tone\",\"tone\":3},{\"emoji\":\"👰🏾\",\"label\":\"person with veil: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👰🏿\",\"label\":\"person with veil: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👰‍♂️\",\"label\":\"man with veil\",\"tone\":0,\"skins\":[{\"emoji\":\"👰🏻‍♂️\",\"label\":\"man with veil: light skin tone\",\"tone\":1},{\"emoji\":\"👰🏼‍♂️\",\"label\":\"man with veil: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👰🏽‍♂️\",\"label\":\"man with veil: medium skin tone\",\"tone\":3},{\"emoji\":\"👰🏾‍♂️\",\"label\":\"man with veil: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👰🏿‍♂️\",\"label\":\"man with veil: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👰‍♀️\",\"label\":\"woman with veil\",\"tone\":0,\"skins\":[{\"emoji\":\"👰🏻‍♀️\",\"label\":\"woman with veil: light skin tone\",\"tone\":1},{\"emoji\":\"👰🏼‍♀️\",\"label\":\"woman with veil: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👰🏽‍♀️\",\"label\":\"woman with veil: medium skin tone\",\"tone\":3},{\"emoji\":\"👰🏾‍♀️\",\"label\":\"woman with veil: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👰🏿‍♀️\",\"label\":\"woman with veil: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤰\",\"label\":\"pregnant woman\",\"tone\":0,\"skins\":[{\"emoji\":\"🤰🏻\",\"label\":\"pregnant woman: light skin tone\",\"tone\":1},{\"emoji\":\"🤰🏼\",\"label\":\"pregnant woman: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤰🏽\",\"label\":\"pregnant woman: medium skin tone\",\"tone\":3},{\"emoji\":\"🤰🏾\",\"label\":\"pregnant woman: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤰🏿\",\"label\":\"pregnant woman: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤱\",\"label\":\"breast-feeding\",\"tone\":0,\"skins\":[{\"emoji\":\"🤱🏻\",\"label\":\"breast-feeding: light skin tone\",\"tone\":1},{\"emoji\":\"🤱🏼\",\"label\":\"breast-feeding: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤱🏽\",\"label\":\"breast-feeding: medium skin tone\",\"tone\":3},{\"emoji\":\"🤱🏾\",\"label\":\"breast-feeding: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤱🏿\",\"label\":\"breast-feeding: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🍼\",\"label\":\"woman feeding baby\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🍼\",\"label\":\"woman feeding baby: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🍼\",\"label\":\"woman feeding baby: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🍼\",\"label\":\"woman feeding baby: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🍼\",\"label\":\"woman feeding baby: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🍼\",\"label\":\"woman feeding baby: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🍼\",\"label\":\"man feeding baby\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🍼\",\"label\":\"man feeding baby: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🍼\",\"label\":\"man feeding baby: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🍼\",\"label\":\"man feeding baby: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🍼\",\"label\":\"man feeding baby: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🍼\",\"label\":\"man feeding baby: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🍼\",\"label\":\"person feeding baby\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🍼\",\"label\":\"person feeding baby: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🍼\",\"label\":\"person feeding baby: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🍼\",\"label\":\"person feeding baby: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🍼\",\"label\":\"person feeding baby: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🍼\",\"label\":\"person feeding baby: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👼\",\"label\":\"baby angel\",\"tone\":0,\"skins\":[{\"emoji\":\"👼🏻\",\"label\":\"baby angel: light skin tone\",\"tone\":1},{\"emoji\":\"👼🏼\",\"label\":\"baby angel: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👼🏽\",\"label\":\"baby angel: medium skin tone\",\"tone\":3},{\"emoji\":\"👼🏾\",\"label\":\"baby angel: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👼🏿\",\"label\":\"baby angel: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🎅\",\"label\":\"Santa Claus\",\"tone\":0,\"skins\":[{\"emoji\":\"🎅🏻\",\"label\":\"Santa Claus: light skin tone\",\"tone\":1},{\"emoji\":\"🎅🏼\",\"label\":\"Santa Claus: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🎅🏽\",\"label\":\"Santa Claus: medium skin tone\",\"tone\":3},{\"emoji\":\"🎅🏾\",\"label\":\"Santa Claus: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🎅🏿\",\"label\":\"Santa Claus: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤶\",\"label\":\"Mrs. Claus\",\"tone\":0,\"skins\":[{\"emoji\":\"🤶🏻\",\"label\":\"Mrs. Claus: light skin tone\",\"tone\":1},{\"emoji\":\"🤶🏼\",\"label\":\"Mrs. Claus: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤶🏽\",\"label\":\"Mrs. Claus: medium skin tone\",\"tone\":3},{\"emoji\":\"🤶🏾\",\"label\":\"Mrs. Claus: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤶🏿\",\"label\":\"Mrs. Claus: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🎄\",\"label\":\"mx claus\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🎄\",\"label\":\"mx claus: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🎄\",\"label\":\"mx claus: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🎄\",\"label\":\"mx claus: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🎄\",\"label\":\"mx claus: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🎄\",\"label\":\"mx claus: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦸\",\"label\":\"superhero\",\"tone\":0,\"skins\":[{\"emoji\":\"🦸🏻\",\"label\":\"superhero: light skin tone\",\"tone\":1},{\"emoji\":\"🦸🏼\",\"label\":\"superhero: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦸🏽\",\"label\":\"superhero: medium skin tone\",\"tone\":3},{\"emoji\":\"🦸🏾\",\"label\":\"superhero: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦸🏿\",\"label\":\"superhero: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦸‍♂️\",\"label\":\"man superhero\",\"tone\":0,\"skins\":[{\"emoji\":\"🦸🏻‍♂️\",\"label\":\"man superhero: light skin tone\",\"tone\":1},{\"emoji\":\"🦸🏼‍♂️\",\"label\":\"man superhero: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦸🏽‍♂️\",\"label\":\"man superhero: medium skin tone\",\"tone\":3},{\"emoji\":\"🦸🏾‍♂️\",\"label\":\"man superhero: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦸🏿‍♂️\",\"label\":\"man superhero: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦸‍♀️\",\"label\":\"woman superhero\",\"tone\":0,\"skins\":[{\"emoji\":\"🦸🏻‍♀️\",\"label\":\"woman superhero: light skin tone\",\"tone\":1},{\"emoji\":\"🦸🏼‍♀️\",\"label\":\"woman superhero: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦸🏽‍♀️\",\"label\":\"woman superhero: medium skin tone\",\"tone\":3},{\"emoji\":\"🦸🏾‍♀️\",\"label\":\"woman superhero: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦸🏿‍♀️\",\"label\":\"woman superhero: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦹\",\"label\":\"supervillain\",\"tone\":0,\"skins\":[{\"emoji\":\"🦹🏻\",\"label\":\"supervillain: light skin tone\",\"tone\":1},{\"emoji\":\"🦹🏼\",\"label\":\"supervillain: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦹🏽\",\"label\":\"supervillain: medium skin tone\",\"tone\":3},{\"emoji\":\"🦹🏾\",\"label\":\"supervillain: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦹🏿\",\"label\":\"supervillain: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦹‍♂️\",\"label\":\"man supervillain\",\"tone\":0,\"skins\":[{\"emoji\":\"🦹🏻‍♂️\",\"label\":\"man supervillain: light skin tone\",\"tone\":1},{\"emoji\":\"🦹🏼‍♂️\",\"label\":\"man supervillain: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦹🏽‍♂️\",\"label\":\"man supervillain: medium skin tone\",\"tone\":3},{\"emoji\":\"🦹🏾‍♂️\",\"label\":\"man supervillain: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦹🏿‍♂️\",\"label\":\"man supervillain: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🦹‍♀️\",\"label\":\"woman supervillain\",\"tone\":0,\"skins\":[{\"emoji\":\"🦹🏻‍♀️\",\"label\":\"woman supervillain: light skin tone\",\"tone\":1},{\"emoji\":\"🦹🏼‍♀️\",\"label\":\"woman supervillain: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🦹🏽‍♀️\",\"label\":\"woman supervillain: medium skin tone\",\"tone\":3},{\"emoji\":\"🦹🏾‍♀️\",\"label\":\"woman supervillain: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🦹🏿‍♀️\",\"label\":\"woman supervillain: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧙\",\"label\":\"mage\",\"tone\":0,\"skins\":[{\"emoji\":\"🧙🏻\",\"label\":\"mage: light skin tone\",\"tone\":1},{\"emoji\":\"🧙🏼\",\"label\":\"mage: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧙🏽\",\"label\":\"mage: medium skin tone\",\"tone\":3},{\"emoji\":\"🧙🏾\",\"label\":\"mage: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧙🏿\",\"label\":\"mage: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧙‍♂️\",\"label\":\"man mage\",\"tone\":0,\"skins\":[{\"emoji\":\"🧙🏻‍♂️\",\"label\":\"man mage: light skin tone\",\"tone\":1},{\"emoji\":\"🧙🏼‍♂️\",\"label\":\"man mage: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧙🏽‍♂️\",\"label\":\"man mage: medium skin tone\",\"tone\":3},{\"emoji\":\"🧙🏾‍♂️\",\"label\":\"man mage: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧙🏿‍♂️\",\"label\":\"man mage: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧙‍♀️\",\"label\":\"woman mage\",\"tone\":0,\"skins\":[{\"emoji\":\"🧙🏻‍♀️\",\"label\":\"woman mage: light skin tone\",\"tone\":1},{\"emoji\":\"🧙🏼‍♀️\",\"label\":\"woman mage: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧙🏽‍♀️\",\"label\":\"woman mage: medium skin tone\",\"tone\":3},{\"emoji\":\"🧙🏾‍♀️\",\"label\":\"woman mage: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧙🏿‍♀️\",\"label\":\"woman mage: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧚\",\"label\":\"fairy\",\"tone\":0,\"skins\":[{\"emoji\":\"🧚🏻\",\"label\":\"fairy: light skin tone\",\"tone\":1},{\"emoji\":\"🧚🏼\",\"label\":\"fairy: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧚🏽\",\"label\":\"fairy: medium skin tone\",\"tone\":3},{\"emoji\":\"🧚🏾\",\"label\":\"fairy: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧚🏿\",\"label\":\"fairy: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧚‍♂️\",\"label\":\"man fairy\",\"tone\":0,\"skins\":[{\"emoji\":\"🧚🏻‍♂️\",\"label\":\"man fairy: light skin tone\",\"tone\":1},{\"emoji\":\"🧚🏼‍♂️\",\"label\":\"man fairy: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧚🏽‍♂️\",\"label\":\"man fairy: medium skin tone\",\"tone\":3},{\"emoji\":\"🧚🏾‍♂️\",\"label\":\"man fairy: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧚🏿‍♂️\",\"label\":\"man fairy: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧚‍♀️\",\"label\":\"woman fairy\",\"tone\":0,\"skins\":[{\"emoji\":\"🧚🏻‍♀️\",\"label\":\"woman fairy: light skin tone\",\"tone\":1},{\"emoji\":\"🧚🏼‍♀️\",\"label\":\"woman fairy: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧚🏽‍♀️\",\"label\":\"woman fairy: medium skin tone\",\"tone\":3},{\"emoji\":\"🧚🏾‍♀️\",\"label\":\"woman fairy: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧚🏿‍♀️\",\"label\":\"woman fairy: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧛\",\"label\":\"vampire\",\"tone\":0,\"skins\":[{\"emoji\":\"🧛🏻\",\"label\":\"vampire: light skin tone\",\"tone\":1},{\"emoji\":\"🧛🏼\",\"label\":\"vampire: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧛🏽\",\"label\":\"vampire: medium skin tone\",\"tone\":3},{\"emoji\":\"🧛🏾\",\"label\":\"vampire: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧛🏿\",\"label\":\"vampire: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧛‍♂️\",\"label\":\"man vampire\",\"tone\":0,\"skins\":[{\"emoji\":\"🧛🏻‍♂️\",\"label\":\"man vampire: light skin tone\",\"tone\":1},{\"emoji\":\"🧛🏼‍♂️\",\"label\":\"man vampire: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧛🏽‍♂️\",\"label\":\"man vampire: medium skin tone\",\"tone\":3},{\"emoji\":\"🧛🏾‍♂️\",\"label\":\"man vampire: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧛🏿‍♂️\",\"label\":\"man vampire: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧛‍♀️\",\"label\":\"woman vampire\",\"tone\":0,\"skins\":[{\"emoji\":\"🧛🏻‍♀️\",\"label\":\"woman vampire: light skin tone\",\"tone\":1},{\"emoji\":\"🧛🏼‍♀️\",\"label\":\"woman vampire: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧛🏽‍♀️\",\"label\":\"woman vampire: medium skin tone\",\"tone\":3},{\"emoji\":\"🧛🏾‍♀️\",\"label\":\"woman vampire: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧛🏿‍♀️\",\"label\":\"woman vampire: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧜\",\"label\":\"merperson\",\"tone\":0,\"skins\":[{\"emoji\":\"🧜🏻\",\"label\":\"merperson: light skin tone\",\"tone\":1},{\"emoji\":\"🧜🏼\",\"label\":\"merperson: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧜🏽\",\"label\":\"merperson: medium skin tone\",\"tone\":3},{\"emoji\":\"🧜🏾\",\"label\":\"merperson: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧜🏿\",\"label\":\"merperson: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧜‍♂️\",\"label\":\"merman\",\"tone\":0,\"skins\":[{\"emoji\":\"🧜🏻‍♂️\",\"label\":\"merman: light skin tone\",\"tone\":1},{\"emoji\":\"🧜🏼‍♂️\",\"label\":\"merman: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧜🏽‍♂️\",\"label\":\"merman: medium skin tone\",\"tone\":3},{\"emoji\":\"🧜🏾‍♂️\",\"label\":\"merman: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧜🏿‍♂️\",\"label\":\"merman: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧜‍♀️\",\"label\":\"mermaid\",\"tone\":0,\"skins\":[{\"emoji\":\"🧜🏻‍♀️\",\"label\":\"mermaid: light skin tone\",\"tone\":1},{\"emoji\":\"🧜🏼‍♀️\",\"label\":\"mermaid: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧜🏽‍♀️\",\"label\":\"mermaid: medium skin tone\",\"tone\":3},{\"emoji\":\"🧜🏾‍♀️\",\"label\":\"mermaid: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧜🏿‍♀️\",\"label\":\"mermaid: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧝\",\"label\":\"elf\",\"tone\":0,\"skins\":[{\"emoji\":\"🧝🏻\",\"label\":\"elf: light skin tone\",\"tone\":1},{\"emoji\":\"🧝🏼\",\"label\":\"elf: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧝🏽\",\"label\":\"elf: medium skin tone\",\"tone\":3},{\"emoji\":\"🧝🏾\",\"label\":\"elf: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧝🏿\",\"label\":\"elf: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧝‍♂️\",\"label\":\"man elf\",\"tone\":0,\"skins\":[{\"emoji\":\"🧝🏻‍♂️\",\"label\":\"man elf: light skin tone\",\"tone\":1},{\"emoji\":\"🧝🏼‍♂️\",\"label\":\"man elf: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧝🏽‍♂️\",\"label\":\"man elf: medium skin tone\",\"tone\":3},{\"emoji\":\"🧝🏾‍♂️\",\"label\":\"man elf: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧝🏿‍♂️\",\"label\":\"man elf: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧝‍♀️\",\"label\":\"woman elf\",\"tone\":0,\"skins\":[{\"emoji\":\"🧝🏻‍♀️\",\"label\":\"woman elf: light skin tone\",\"tone\":1},{\"emoji\":\"🧝🏼‍♀️\",\"label\":\"woman elf: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧝🏽‍♀️\",\"label\":\"woman elf: medium skin tone\",\"tone\":3},{\"emoji\":\"🧝🏾‍♀️\",\"label\":\"woman elf: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧝🏿‍♀️\",\"label\":\"woman elf: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧞\",\"label\":\"genie\",\"tone\":0},{\"emoji\":\"🧞‍♂️\",\"label\":\"man genie\",\"tone\":0},{\"emoji\":\"🧞‍♀️\",\"label\":\"woman genie\",\"tone\":0},{\"emoji\":\"🧟\",\"label\":\"zombie\",\"tone\":0},{\"emoji\":\"🧟‍♂️\",\"label\":\"man zombie\",\"tone\":0},{\"emoji\":\"🧟‍♀️\",\"label\":\"woman zombie\",\"tone\":0},{\"emoji\":\"💆\",\"label\":\"person getting massage\",\"tone\":0,\"skins\":[{\"emoji\":\"💆🏻\",\"label\":\"person getting massage: light skin tone\",\"tone\":1},{\"emoji\":\"💆🏼\",\"label\":\"person getting massage: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💆🏽\",\"label\":\"person getting massage: medium skin tone\",\"tone\":3},{\"emoji\":\"💆🏾\",\"label\":\"person getting massage: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💆🏿\",\"label\":\"person getting massage: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💆‍♂️\",\"label\":\"man getting massage\",\"tone\":0,\"skins\":[{\"emoji\":\"💆🏻‍♂️\",\"label\":\"man getting massage: light skin tone\",\"tone\":1},{\"emoji\":\"💆🏼‍♂️\",\"label\":\"man getting massage: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💆🏽‍♂️\",\"label\":\"man getting massage: medium skin tone\",\"tone\":3},{\"emoji\":\"💆🏾‍♂️\",\"label\":\"man getting massage: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💆🏿‍♂️\",\"label\":\"man getting massage: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💆‍♀️\",\"label\":\"woman getting massage\",\"tone\":0,\"skins\":[{\"emoji\":\"💆🏻‍♀️\",\"label\":\"woman getting massage: light skin tone\",\"tone\":1},{\"emoji\":\"💆🏼‍♀️\",\"label\":\"woman getting massage: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💆🏽‍♀️\",\"label\":\"woman getting massage: medium skin tone\",\"tone\":3},{\"emoji\":\"💆🏾‍♀️\",\"label\":\"woman getting massage: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💆🏿‍♀️\",\"label\":\"woman getting massage: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💇\",\"label\":\"person getting haircut\",\"tone\":0,\"skins\":[{\"emoji\":\"💇🏻\",\"label\":\"person getting haircut: light skin tone\",\"tone\":1},{\"emoji\":\"💇🏼\",\"label\":\"person getting haircut: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💇🏽\",\"label\":\"person getting haircut: medium skin tone\",\"tone\":3},{\"emoji\":\"💇🏾\",\"label\":\"person getting haircut: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💇🏿\",\"label\":\"person getting haircut: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💇‍♂️\",\"label\":\"man getting haircut\",\"tone\":0,\"skins\":[{\"emoji\":\"💇🏻‍♂️\",\"label\":\"man getting haircut: light skin tone\",\"tone\":1},{\"emoji\":\"💇🏼‍♂️\",\"label\":\"man getting haircut: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💇🏽‍♂️\",\"label\":\"man getting haircut: medium skin tone\",\"tone\":3},{\"emoji\":\"💇🏾‍♂️\",\"label\":\"man getting haircut: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💇🏿‍♂️\",\"label\":\"man getting haircut: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💇‍♀️\",\"label\":\"woman getting haircut\",\"tone\":0,\"skins\":[{\"emoji\":\"💇🏻‍♀️\",\"label\":\"woman getting haircut: light skin tone\",\"tone\":1},{\"emoji\":\"💇🏼‍♀️\",\"label\":\"woman getting haircut: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💇🏽‍♀️\",\"label\":\"woman getting haircut: medium skin tone\",\"tone\":3},{\"emoji\":\"💇🏾‍♀️\",\"label\":\"woman getting haircut: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💇🏿‍♀️\",\"label\":\"woman getting haircut: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚶\",\"label\":\"person walking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚶🏻\",\"label\":\"person walking: light skin tone\",\"tone\":1},{\"emoji\":\"🚶🏼\",\"label\":\"person walking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚶🏽\",\"label\":\"person walking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚶🏾\",\"label\":\"person walking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚶🏿\",\"label\":\"person walking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚶‍♂️\",\"label\":\"man walking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚶🏻‍♂️\",\"label\":\"man walking: light skin tone\",\"tone\":1},{\"emoji\":\"🚶🏼‍♂️\",\"label\":\"man walking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚶🏽‍♂️\",\"label\":\"man walking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚶🏾‍♂️\",\"label\":\"man walking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚶🏿‍♂️\",\"label\":\"man walking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚶‍♀️\",\"label\":\"woman walking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚶🏻‍♀️\",\"label\":\"woman walking: light skin tone\",\"tone\":1},{\"emoji\":\"🚶🏼‍♀️\",\"label\":\"woman walking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚶🏽‍♀️\",\"label\":\"woman walking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚶🏾‍♀️\",\"label\":\"woman walking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚶🏿‍♀️\",\"label\":\"woman walking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧍\",\"label\":\"person standing\",\"tone\":0,\"skins\":[{\"emoji\":\"🧍🏻\",\"label\":\"person standing: light skin tone\",\"tone\":1},{\"emoji\":\"🧍🏼\",\"label\":\"person standing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧍🏽\",\"label\":\"person standing: medium skin tone\",\"tone\":3},{\"emoji\":\"🧍🏾\",\"label\":\"person standing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧍🏿\",\"label\":\"person standing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧍‍♂️\",\"label\":\"man standing\",\"tone\":0,\"skins\":[{\"emoji\":\"🧍🏻‍♂️\",\"label\":\"man standing: light skin tone\",\"tone\":1},{\"emoji\":\"🧍🏼‍♂️\",\"label\":\"man standing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧍🏽‍♂️\",\"label\":\"man standing: medium skin tone\",\"tone\":3},{\"emoji\":\"🧍🏾‍♂️\",\"label\":\"man standing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧍🏿‍♂️\",\"label\":\"man standing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧍‍♀️\",\"label\":\"woman standing\",\"tone\":0,\"skins\":[{\"emoji\":\"🧍🏻‍♀️\",\"label\":\"woman standing: light skin tone\",\"tone\":1},{\"emoji\":\"🧍🏼‍♀️\",\"label\":\"woman standing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧍🏽‍♀️\",\"label\":\"woman standing: medium skin tone\",\"tone\":3},{\"emoji\":\"🧍🏾‍♀️\",\"label\":\"woman standing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧍🏿‍♀️\",\"label\":\"woman standing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧎\",\"label\":\"person kneeling\",\"tone\":0,\"skins\":[{\"emoji\":\"🧎🏻\",\"label\":\"person kneeling: light skin tone\",\"tone\":1},{\"emoji\":\"🧎🏼\",\"label\":\"person kneeling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧎🏽\",\"label\":\"person kneeling: medium skin tone\",\"tone\":3},{\"emoji\":\"🧎🏾\",\"label\":\"person kneeling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧎🏿\",\"label\":\"person kneeling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧎‍♂️\",\"label\":\"man kneeling\",\"tone\":0,\"skins\":[{\"emoji\":\"🧎🏻‍♂️\",\"label\":\"man kneeling: light skin tone\",\"tone\":1},{\"emoji\":\"🧎🏼‍♂️\",\"label\":\"man kneeling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧎🏽‍♂️\",\"label\":\"man kneeling: medium skin tone\",\"tone\":3},{\"emoji\":\"🧎🏾‍♂️\",\"label\":\"man kneeling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧎🏿‍♂️\",\"label\":\"man kneeling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧎‍♀️\",\"label\":\"woman kneeling\",\"tone\":0,\"skins\":[{\"emoji\":\"🧎🏻‍♀️\",\"label\":\"woman kneeling: light skin tone\",\"tone\":1},{\"emoji\":\"🧎🏼‍♀️\",\"label\":\"woman kneeling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧎🏽‍♀️\",\"label\":\"woman kneeling: medium skin tone\",\"tone\":3},{\"emoji\":\"🧎🏾‍♀️\",\"label\":\"woman kneeling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧎🏿‍♀️\",\"label\":\"woman kneeling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🦯\",\"label\":\"person with white cane\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🦯\",\"label\":\"person with white cane: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🦯\",\"label\":\"person with white cane: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🦯\",\"label\":\"person with white cane: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🦯\",\"label\":\"person with white cane: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🦯\",\"label\":\"person with white cane: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🦯\",\"label\":\"man with white cane\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🦯\",\"label\":\"man with white cane: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🦯\",\"label\":\"man with white cane: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🦯\",\"label\":\"man with white cane: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🦯\",\"label\":\"man with white cane: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🦯\",\"label\":\"man with white cane: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🦯\",\"label\":\"woman with white cane\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🦯\",\"label\":\"woman with white cane: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🦯\",\"label\":\"woman with white cane: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🦯\",\"label\":\"woman with white cane: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🦯\",\"label\":\"woman with white cane: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🦯\",\"label\":\"woman with white cane: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🦼\",\"label\":\"person in motorized wheelchair\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🦼\",\"label\":\"person in motorized wheelchair: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🦼\",\"label\":\"person in motorized wheelchair: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🦼\",\"label\":\"person in motorized wheelchair: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🦼\",\"label\":\"person in motorized wheelchair: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🦼\",\"label\":\"person in motorized wheelchair: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🦼\",\"label\":\"man in motorized wheelchair\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🦼\",\"label\":\"man in motorized wheelchair: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🦼\",\"label\":\"man in motorized wheelchair: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🦼\",\"label\":\"man in motorized wheelchair: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🦼\",\"label\":\"man in motorized wheelchair: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🦼\",\"label\":\"man in motorized wheelchair: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🦼\",\"label\":\"woman in motorized wheelchair\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🦼\",\"label\":\"woman in motorized wheelchair: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🦼\",\"label\":\"woman in motorized wheelchair: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🦼\",\"label\":\"woman in motorized wheelchair: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🦼\",\"label\":\"woman in motorized wheelchair: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🦼\",\"label\":\"woman in motorized wheelchair: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🦽\",\"label\":\"person in manual wheelchair\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🦽\",\"label\":\"person in manual wheelchair: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏼‍🦽\",\"label\":\"person in manual wheelchair: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏽‍🦽\",\"label\":\"person in manual wheelchair: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏾‍🦽\",\"label\":\"person in manual wheelchair: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏿‍🦽\",\"label\":\"person in manual wheelchair: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍🦽\",\"label\":\"man in manual wheelchair\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍🦽\",\"label\":\"man in manual wheelchair: light skin tone\",\"tone\":1},{\"emoji\":\"👨🏼‍🦽\",\"label\":\"man in manual wheelchair: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏽‍🦽\",\"label\":\"man in manual wheelchair: medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏾‍🦽\",\"label\":\"man in manual wheelchair: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏿‍🦽\",\"label\":\"man in manual wheelchair: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍🦽\",\"label\":\"woman in manual wheelchair\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍🦽\",\"label\":\"woman in manual wheelchair: light skin tone\",\"tone\":1},{\"emoji\":\"👩🏼‍🦽\",\"label\":\"woman in manual wheelchair: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏽‍🦽\",\"label\":\"woman in manual wheelchair: medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏾‍🦽\",\"label\":\"woman in manual wheelchair: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏿‍🦽\",\"label\":\"woman in manual wheelchair: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏃\",\"label\":\"person running\",\"tone\":0,\"skins\":[{\"emoji\":\"🏃🏻\",\"label\":\"person running: light skin tone\",\"tone\":1},{\"emoji\":\"🏃🏼\",\"label\":\"person running: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏃🏽\",\"label\":\"person running: medium skin tone\",\"tone\":3},{\"emoji\":\"🏃🏾\",\"label\":\"person running: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏃🏿\",\"label\":\"person running: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏃‍♂️\",\"label\":\"man running\",\"tone\":0,\"skins\":[{\"emoji\":\"🏃🏻‍♂️\",\"label\":\"man running: light skin tone\",\"tone\":1},{\"emoji\":\"🏃🏼‍♂️\",\"label\":\"man running: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏃🏽‍♂️\",\"label\":\"man running: medium skin tone\",\"tone\":3},{\"emoji\":\"🏃🏾‍♂️\",\"label\":\"man running: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏃🏿‍♂️\",\"label\":\"man running: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏃‍♀️\",\"label\":\"woman running\",\"tone\":0,\"skins\":[{\"emoji\":\"🏃🏻‍♀️\",\"label\":\"woman running: light skin tone\",\"tone\":1},{\"emoji\":\"🏃🏼‍♀️\",\"label\":\"woman running: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏃🏽‍♀️\",\"label\":\"woman running: medium skin tone\",\"tone\":3},{\"emoji\":\"🏃🏾‍♀️\",\"label\":\"woman running: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏃🏿‍♀️\",\"label\":\"woman running: dark skin tone\",\"tone\":5}]},{\"emoji\":\"💃\",\"label\":\"woman dancing\",\"tone\":0,\"skins\":[{\"emoji\":\"💃🏻\",\"label\":\"woman dancing: light skin tone\",\"tone\":1},{\"emoji\":\"💃🏼\",\"label\":\"woman dancing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💃🏽\",\"label\":\"woman dancing: medium skin tone\",\"tone\":3},{\"emoji\":\"💃🏾\",\"label\":\"woman dancing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💃🏿\",\"label\":\"woman dancing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🕺\",\"label\":\"man dancing\",\"tone\":0,\"skins\":[{\"emoji\":\"🕺🏻\",\"label\":\"man dancing: light skin tone\",\"tone\":1},{\"emoji\":\"🕺🏼\",\"label\":\"man dancing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🕺🏽\",\"label\":\"man dancing: medium skin tone\",\"tone\":3},{\"emoji\":\"🕺🏾\",\"label\":\"man dancing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🕺🏿\",\"label\":\"man dancing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🕴️\",\"label\":\"person in suit levitating\",\"tone\":0,\"skins\":[{\"emoji\":\"🕴🏻\",\"label\":\"person in suit levitating: light skin tone\",\"tone\":1},{\"emoji\":\"🕴🏼\",\"label\":\"person in suit levitating: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🕴🏽\",\"label\":\"person in suit levitating: medium skin tone\",\"tone\":3},{\"emoji\":\"🕴🏾\",\"label\":\"person in suit levitating: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🕴🏿\",\"label\":\"person in suit levitating: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👯\",\"label\":\"people with bunny ears\",\"tone\":0},{\"emoji\":\"👯‍♂️\",\"label\":\"men with bunny ears\",\"tone\":0},{\"emoji\":\"👯‍♀️\",\"label\":\"women with bunny ears\",\"tone\":0},{\"emoji\":\"🧖\",\"label\":\"person in steamy room\",\"tone\":0,\"skins\":[{\"emoji\":\"🧖🏻\",\"label\":\"person in steamy room: light skin tone\",\"tone\":1},{\"emoji\":\"🧖🏼\",\"label\":\"person in steamy room: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧖🏽\",\"label\":\"person in steamy room: medium skin tone\",\"tone\":3},{\"emoji\":\"🧖🏾\",\"label\":\"person in steamy room: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧖🏿\",\"label\":\"person in steamy room: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧖‍♂️\",\"label\":\"man in steamy room\",\"tone\":0,\"skins\":[{\"emoji\":\"🧖🏻‍♂️\",\"label\":\"man in steamy room: light skin tone\",\"tone\":1},{\"emoji\":\"🧖🏼‍♂️\",\"label\":\"man in steamy room: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧖🏽‍♂️\",\"label\":\"man in steamy room: medium skin tone\",\"tone\":3},{\"emoji\":\"🧖🏾‍♂️\",\"label\":\"man in steamy room: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧖🏿‍♂️\",\"label\":\"man in steamy room: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧖‍♀️\",\"label\":\"woman in steamy room\",\"tone\":0,\"skins\":[{\"emoji\":\"🧖🏻‍♀️\",\"label\":\"woman in steamy room: light skin tone\",\"tone\":1},{\"emoji\":\"🧖🏼‍♀️\",\"label\":\"woman in steamy room: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧖🏽‍♀️\",\"label\":\"woman in steamy room: medium skin tone\",\"tone\":3},{\"emoji\":\"🧖🏾‍♀️\",\"label\":\"woman in steamy room: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧖🏿‍♀️\",\"label\":\"woman in steamy room: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧗\",\"label\":\"person climbing\",\"tone\":0,\"skins\":[{\"emoji\":\"🧗🏻\",\"label\":\"person climbing: light skin tone\",\"tone\":1},{\"emoji\":\"🧗🏼\",\"label\":\"person climbing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧗🏽\",\"label\":\"person climbing: medium skin tone\",\"tone\":3},{\"emoji\":\"🧗🏾\",\"label\":\"person climbing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧗🏿\",\"label\":\"person climbing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧗‍♂️\",\"label\":\"man climbing\",\"tone\":0,\"skins\":[{\"emoji\":\"🧗🏻‍♂️\",\"label\":\"man climbing: light skin tone\",\"tone\":1},{\"emoji\":\"🧗🏼‍♂️\",\"label\":\"man climbing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧗🏽‍♂️\",\"label\":\"man climbing: medium skin tone\",\"tone\":3},{\"emoji\":\"🧗🏾‍♂️\",\"label\":\"man climbing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧗🏿‍♂️\",\"label\":\"man climbing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧗‍♀️\",\"label\":\"woman climbing\",\"tone\":0,\"skins\":[{\"emoji\":\"🧗🏻‍♀️\",\"label\":\"woman climbing: light skin tone\",\"tone\":1},{\"emoji\":\"🧗🏼‍♀️\",\"label\":\"woman climbing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧗🏽‍♀️\",\"label\":\"woman climbing: medium skin tone\",\"tone\":3},{\"emoji\":\"🧗🏾‍♀️\",\"label\":\"woman climbing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧗🏿‍♀️\",\"label\":\"woman climbing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤺\",\"label\":\"person fencing\",\"tone\":0},{\"emoji\":\"🏇\",\"label\":\"horse racing\",\"tone\":0,\"skins\":[{\"emoji\":\"🏇🏻\",\"label\":\"horse racing: light skin tone\",\"tone\":1},{\"emoji\":\"🏇🏼\",\"label\":\"horse racing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏇🏽\",\"label\":\"horse racing: medium skin tone\",\"tone\":3},{\"emoji\":\"🏇🏾\",\"label\":\"horse racing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏇🏿\",\"label\":\"horse racing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"⛷️\",\"label\":\"skier\",\"tone\":0},{\"emoji\":\"🏂️\",\"label\":\"snowboarder\",\"tone\":0,\"skins\":[{\"emoji\":\"🏂🏻\",\"label\":\"snowboarder: light skin tone\",\"tone\":1},{\"emoji\":\"🏂🏼\",\"label\":\"snowboarder: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏂🏽\",\"label\":\"snowboarder: medium skin tone\",\"tone\":3},{\"emoji\":\"🏂🏾\",\"label\":\"snowboarder: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏂🏿\",\"label\":\"snowboarder: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏌️\",\"label\":\"person golfing\",\"tone\":0,\"skins\":[{\"emoji\":\"🏌🏻\",\"label\":\"person golfing: light skin tone\",\"tone\":1},{\"emoji\":\"🏌🏼\",\"label\":\"person golfing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏌🏽\",\"label\":\"person golfing: medium skin tone\",\"tone\":3},{\"emoji\":\"🏌🏾\",\"label\":\"person golfing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏌🏿\",\"label\":\"person golfing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏌️‍♂️\",\"label\":\"man golfing\",\"tone\":0,\"skins\":[{\"emoji\":\"🏌🏻‍♂️\",\"label\":\"man golfing: light skin tone\",\"tone\":1},{\"emoji\":\"🏌🏼‍♂️\",\"label\":\"man golfing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏌🏽‍♂️\",\"label\":\"man golfing: medium skin tone\",\"tone\":3},{\"emoji\":\"🏌🏾‍♂️\",\"label\":\"man golfing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏌🏿‍♂️\",\"label\":\"man golfing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏌️‍♀️\",\"label\":\"woman golfing\",\"tone\":0,\"skins\":[{\"emoji\":\"🏌🏻‍♀️\",\"label\":\"woman golfing: light skin tone\",\"tone\":1},{\"emoji\":\"🏌🏼‍♀️\",\"label\":\"woman golfing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏌🏽‍♀️\",\"label\":\"woman golfing: medium skin tone\",\"tone\":3},{\"emoji\":\"🏌🏾‍♀️\",\"label\":\"woman golfing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏌🏿‍♀️\",\"label\":\"woman golfing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏄️\",\"label\":\"person surfing\",\"tone\":0,\"skins\":[{\"emoji\":\"🏄🏻\",\"label\":\"person surfing: light skin tone\",\"tone\":1},{\"emoji\":\"🏄🏼\",\"label\":\"person surfing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏄🏽\",\"label\":\"person surfing: medium skin tone\",\"tone\":3},{\"emoji\":\"🏄🏾\",\"label\":\"person surfing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏄🏿\",\"label\":\"person surfing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏄‍♂️\",\"label\":\"man surfing\",\"tone\":0,\"skins\":[{\"emoji\":\"🏄🏻‍♂️\",\"label\":\"man surfing: light skin tone\",\"tone\":1},{\"emoji\":\"🏄🏼‍♂️\",\"label\":\"man surfing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏄🏽‍♂️\",\"label\":\"man surfing: medium skin tone\",\"tone\":3},{\"emoji\":\"🏄🏾‍♂️\",\"label\":\"man surfing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏄🏿‍♂️\",\"label\":\"man surfing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏄‍♀️\",\"label\":\"woman surfing\",\"tone\":0,\"skins\":[{\"emoji\":\"🏄🏻‍♀️\",\"label\":\"woman surfing: light skin tone\",\"tone\":1},{\"emoji\":\"🏄🏼‍♀️\",\"label\":\"woman surfing: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏄🏽‍♀️\",\"label\":\"woman surfing: medium skin tone\",\"tone\":3},{\"emoji\":\"🏄🏾‍♀️\",\"label\":\"woman surfing: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏄🏿‍♀️\",\"label\":\"woman surfing: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚣\",\"label\":\"person rowing boat\",\"tone\":0,\"skins\":[{\"emoji\":\"🚣🏻\",\"label\":\"person rowing boat: light skin tone\",\"tone\":1},{\"emoji\":\"🚣🏼\",\"label\":\"person rowing boat: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚣🏽\",\"label\":\"person rowing boat: medium skin tone\",\"tone\":3},{\"emoji\":\"🚣🏾\",\"label\":\"person rowing boat: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚣🏿\",\"label\":\"person rowing boat: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚣‍♂️\",\"label\":\"man rowing boat\",\"tone\":0,\"skins\":[{\"emoji\":\"🚣🏻‍♂️\",\"label\":\"man rowing boat: light skin tone\",\"tone\":1},{\"emoji\":\"🚣🏼‍♂️\",\"label\":\"man rowing boat: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚣🏽‍♂️\",\"label\":\"man rowing boat: medium skin tone\",\"tone\":3},{\"emoji\":\"🚣🏾‍♂️\",\"label\":\"man rowing boat: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚣🏿‍♂️\",\"label\":\"man rowing boat: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚣‍♀️\",\"label\":\"woman rowing boat\",\"tone\":0,\"skins\":[{\"emoji\":\"🚣🏻‍♀️\",\"label\":\"woman rowing boat: light skin tone\",\"tone\":1},{\"emoji\":\"🚣🏼‍♀️\",\"label\":\"woman rowing boat: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚣🏽‍♀️\",\"label\":\"woman rowing boat: medium skin tone\",\"tone\":3},{\"emoji\":\"🚣🏾‍♀️\",\"label\":\"woman rowing boat: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚣🏿‍♀️\",\"label\":\"woman rowing boat: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏊️\",\"label\":\"person swimming\",\"tone\":0,\"skins\":[{\"emoji\":\"🏊🏻\",\"label\":\"person swimming: light skin tone\",\"tone\":1},{\"emoji\":\"🏊🏼\",\"label\":\"person swimming: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏊🏽\",\"label\":\"person swimming: medium skin tone\",\"tone\":3},{\"emoji\":\"🏊🏾\",\"label\":\"person swimming: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏊🏿\",\"label\":\"person swimming: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏊‍♂️\",\"label\":\"man swimming\",\"tone\":0,\"skins\":[{\"emoji\":\"🏊🏻‍♂️\",\"label\":\"man swimming: light skin tone\",\"tone\":1},{\"emoji\":\"🏊🏼‍♂️\",\"label\":\"man swimming: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏊🏽‍♂️\",\"label\":\"man swimming: medium skin tone\",\"tone\":3},{\"emoji\":\"🏊🏾‍♂️\",\"label\":\"man swimming: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏊🏿‍♂️\",\"label\":\"man swimming: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏊‍♀️\",\"label\":\"woman swimming\",\"tone\":0,\"skins\":[{\"emoji\":\"🏊🏻‍♀️\",\"label\":\"woman swimming: light skin tone\",\"tone\":1},{\"emoji\":\"🏊🏼‍♀️\",\"label\":\"woman swimming: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏊🏽‍♀️\",\"label\":\"woman swimming: medium skin tone\",\"tone\":3},{\"emoji\":\"🏊🏾‍♀️\",\"label\":\"woman swimming: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏊🏿‍♀️\",\"label\":\"woman swimming: dark skin tone\",\"tone\":5}]},{\"emoji\":\"⛹️\",\"label\":\"person bouncing ball\",\"tone\":0,\"skins\":[{\"emoji\":\"⛹🏻\",\"label\":\"person bouncing ball: light skin tone\",\"tone\":1},{\"emoji\":\"⛹🏼\",\"label\":\"person bouncing ball: medium-light skin tone\",\"tone\":2},{\"emoji\":\"⛹🏽\",\"label\":\"person bouncing ball: medium skin tone\",\"tone\":3},{\"emoji\":\"⛹🏾\",\"label\":\"person bouncing ball: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"⛹🏿\",\"label\":\"person bouncing ball: dark skin tone\",\"tone\":5}]},{\"emoji\":\"⛹️‍♂️\",\"label\":\"man bouncing ball\",\"tone\":0,\"skins\":[{\"emoji\":\"⛹🏻‍♂️\",\"label\":\"man bouncing ball: light skin tone\",\"tone\":1},{\"emoji\":\"⛹🏼‍♂️\",\"label\":\"man bouncing ball: medium-light skin tone\",\"tone\":2},{\"emoji\":\"⛹🏽‍♂️\",\"label\":\"man bouncing ball: medium skin tone\",\"tone\":3},{\"emoji\":\"⛹🏾‍♂️\",\"label\":\"man bouncing ball: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"⛹🏿‍♂️\",\"label\":\"man bouncing ball: dark skin tone\",\"tone\":5}]},{\"emoji\":\"⛹️‍♀️\",\"label\":\"woman bouncing ball\",\"tone\":0,\"skins\":[{\"emoji\":\"⛹🏻‍♀️\",\"label\":\"woman bouncing ball: light skin tone\",\"tone\":1},{\"emoji\":\"⛹🏼‍♀️\",\"label\":\"woman bouncing ball: medium-light skin tone\",\"tone\":2},{\"emoji\":\"⛹🏽‍♀️\",\"label\":\"woman bouncing ball: medium skin tone\",\"tone\":3},{\"emoji\":\"⛹🏾‍♀️\",\"label\":\"woman bouncing ball: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"⛹🏿‍♀️\",\"label\":\"woman bouncing ball: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏋️\",\"label\":\"person lifting weights\",\"tone\":0,\"skins\":[{\"emoji\":\"🏋🏻\",\"label\":\"person lifting weights: light skin tone\",\"tone\":1},{\"emoji\":\"🏋🏼\",\"label\":\"person lifting weights: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏋🏽\",\"label\":\"person lifting weights: medium skin tone\",\"tone\":3},{\"emoji\":\"🏋🏾\",\"label\":\"person lifting weights: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏋🏿\",\"label\":\"person lifting weights: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏋️‍♂️\",\"label\":\"man lifting weights\",\"tone\":0,\"skins\":[{\"emoji\":\"🏋🏻‍♂️\",\"label\":\"man lifting weights: light skin tone\",\"tone\":1},{\"emoji\":\"🏋🏼‍♂️\",\"label\":\"man lifting weights: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏋🏽‍♂️\",\"label\":\"man lifting weights: medium skin tone\",\"tone\":3},{\"emoji\":\"🏋🏾‍♂️\",\"label\":\"man lifting weights: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏋🏿‍♂️\",\"label\":\"man lifting weights: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🏋️‍♀️\",\"label\":\"woman lifting weights\",\"tone\":0,\"skins\":[{\"emoji\":\"🏋🏻‍♀️\",\"label\":\"woman lifting weights: light skin tone\",\"tone\":1},{\"emoji\":\"🏋🏼‍♀️\",\"label\":\"woman lifting weights: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🏋🏽‍♀️\",\"label\":\"woman lifting weights: medium skin tone\",\"tone\":3},{\"emoji\":\"🏋🏾‍♀️\",\"label\":\"woman lifting weights: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🏋🏿‍♀️\",\"label\":\"woman lifting weights: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚴\",\"label\":\"person biking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚴🏻\",\"label\":\"person biking: light skin tone\",\"tone\":1},{\"emoji\":\"🚴🏼\",\"label\":\"person biking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚴🏽\",\"label\":\"person biking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚴🏾\",\"label\":\"person biking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚴🏿\",\"label\":\"person biking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚴‍♂️\",\"label\":\"man biking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚴🏻‍♂️\",\"label\":\"man biking: light skin tone\",\"tone\":1},{\"emoji\":\"🚴🏼‍♂️\",\"label\":\"man biking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚴🏽‍♂️\",\"label\":\"man biking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚴🏾‍♂️\",\"label\":\"man biking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚴🏿‍♂️\",\"label\":\"man biking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚴‍♀️\",\"label\":\"woman biking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚴🏻‍♀️\",\"label\":\"woman biking: light skin tone\",\"tone\":1},{\"emoji\":\"🚴🏼‍♀️\",\"label\":\"woman biking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚴🏽‍♀️\",\"label\":\"woman biking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚴🏾‍♀️\",\"label\":\"woman biking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚴🏿‍♀️\",\"label\":\"woman biking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚵\",\"label\":\"person mountain biking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚵🏻\",\"label\":\"person mountain biking: light skin tone\",\"tone\":1},{\"emoji\":\"🚵🏼\",\"label\":\"person mountain biking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚵🏽\",\"label\":\"person mountain biking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚵🏾\",\"label\":\"person mountain biking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚵🏿\",\"label\":\"person mountain biking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚵‍♂️\",\"label\":\"man mountain biking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚵🏻‍♂️\",\"label\":\"man mountain biking: light skin tone\",\"tone\":1},{\"emoji\":\"🚵🏼‍♂️\",\"label\":\"man mountain biking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚵🏽‍♂️\",\"label\":\"man mountain biking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚵🏾‍♂️\",\"label\":\"man mountain biking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚵🏿‍♂️\",\"label\":\"man mountain biking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🚵‍♀️\",\"label\":\"woman mountain biking\",\"tone\":0,\"skins\":[{\"emoji\":\"🚵🏻‍♀️\",\"label\":\"woman mountain biking: light skin tone\",\"tone\":1},{\"emoji\":\"🚵🏼‍♀️\",\"label\":\"woman mountain biking: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🚵🏽‍♀️\",\"label\":\"woman mountain biking: medium skin tone\",\"tone\":3},{\"emoji\":\"🚵🏾‍♀️\",\"label\":\"woman mountain biking: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🚵🏿‍♀️\",\"label\":\"woman mountain biking: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤸\",\"label\":\"person cartwheeling\",\"tone\":0,\"skins\":[{\"emoji\":\"🤸🏻\",\"label\":\"person cartwheeling: light skin tone\",\"tone\":1},{\"emoji\":\"🤸🏼\",\"label\":\"person cartwheeling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤸🏽\",\"label\":\"person cartwheeling: medium skin tone\",\"tone\":3},{\"emoji\":\"🤸🏾\",\"label\":\"person cartwheeling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤸🏿\",\"label\":\"person cartwheeling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤸‍♂️\",\"label\":\"man cartwheeling\",\"tone\":0,\"skins\":[{\"emoji\":\"🤸🏻‍♂️\",\"label\":\"man cartwheeling: light skin tone\",\"tone\":1},{\"emoji\":\"🤸🏼‍♂️\",\"label\":\"man cartwheeling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤸🏽‍♂️\",\"label\":\"man cartwheeling: medium skin tone\",\"tone\":3},{\"emoji\":\"🤸🏾‍♂️\",\"label\":\"man cartwheeling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤸🏿‍♂️\",\"label\":\"man cartwheeling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤸‍♀️\",\"label\":\"woman cartwheeling\",\"tone\":0,\"skins\":[{\"emoji\":\"🤸🏻‍♀️\",\"label\":\"woman cartwheeling: light skin tone\",\"tone\":1},{\"emoji\":\"🤸🏼‍♀️\",\"label\":\"woman cartwheeling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤸🏽‍♀️\",\"label\":\"woman cartwheeling: medium skin tone\",\"tone\":3},{\"emoji\":\"🤸🏾‍♀️\",\"label\":\"woman cartwheeling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤸🏿‍♀️\",\"label\":\"woman cartwheeling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤼\",\"label\":\"people wrestling\",\"tone\":0},{\"emoji\":\"🤼‍♂️\",\"label\":\"men wrestling\",\"tone\":0},{\"emoji\":\"🤼‍♀️\",\"label\":\"women wrestling\",\"tone\":0},{\"emoji\":\"🤽\",\"label\":\"person playing water polo\",\"tone\":0,\"skins\":[{\"emoji\":\"🤽🏻\",\"label\":\"person playing water polo: light skin tone\",\"tone\":1},{\"emoji\":\"🤽🏼\",\"label\":\"person playing water polo: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤽🏽\",\"label\":\"person playing water polo: medium skin tone\",\"tone\":3},{\"emoji\":\"🤽🏾\",\"label\":\"person playing water polo: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤽🏿\",\"label\":\"person playing water polo: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤽‍♂️\",\"label\":\"man playing water polo\",\"tone\":0,\"skins\":[{\"emoji\":\"🤽🏻‍♂️\",\"label\":\"man playing water polo: light skin tone\",\"tone\":1},{\"emoji\":\"🤽🏼‍♂️\",\"label\":\"man playing water polo: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤽🏽‍♂️\",\"label\":\"man playing water polo: medium skin tone\",\"tone\":3},{\"emoji\":\"🤽🏾‍♂️\",\"label\":\"man playing water polo: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤽🏿‍♂️\",\"label\":\"man playing water polo: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤽‍♀️\",\"label\":\"woman playing water polo\",\"tone\":0,\"skins\":[{\"emoji\":\"🤽🏻‍♀️\",\"label\":\"woman playing water polo: light skin tone\",\"tone\":1},{\"emoji\":\"🤽🏼‍♀️\",\"label\":\"woman playing water polo: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤽🏽‍♀️\",\"label\":\"woman playing water polo: medium skin tone\",\"tone\":3},{\"emoji\":\"🤽🏾‍♀️\",\"label\":\"woman playing water polo: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤽🏿‍♀️\",\"label\":\"woman playing water polo: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤾\",\"label\":\"person playing handball\",\"tone\":0,\"skins\":[{\"emoji\":\"🤾🏻\",\"label\":\"person playing handball: light skin tone\",\"tone\":1},{\"emoji\":\"🤾🏼\",\"label\":\"person playing handball: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤾🏽\",\"label\":\"person playing handball: medium skin tone\",\"tone\":3},{\"emoji\":\"🤾🏾\",\"label\":\"person playing handball: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤾🏿\",\"label\":\"person playing handball: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤾‍♂️\",\"label\":\"man playing handball\",\"tone\":0,\"skins\":[{\"emoji\":\"🤾🏻‍♂️\",\"label\":\"man playing handball: light skin tone\",\"tone\":1},{\"emoji\":\"🤾🏼‍♂️\",\"label\":\"man playing handball: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤾🏽‍♂️\",\"label\":\"man playing handball: medium skin tone\",\"tone\":3},{\"emoji\":\"🤾🏾‍♂️\",\"label\":\"man playing handball: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤾🏿‍♂️\",\"label\":\"man playing handball: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤾‍♀️\",\"label\":\"woman playing handball\",\"tone\":0,\"skins\":[{\"emoji\":\"🤾🏻‍♀️\",\"label\":\"woman playing handball: light skin tone\",\"tone\":1},{\"emoji\":\"🤾🏼‍♀️\",\"label\":\"woman playing handball: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤾🏽‍♀️\",\"label\":\"woman playing handball: medium skin tone\",\"tone\":3},{\"emoji\":\"🤾🏾‍♀️\",\"label\":\"woman playing handball: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤾🏿‍♀️\",\"label\":\"woman playing handball: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤹\",\"label\":\"person juggling\",\"tone\":0,\"skins\":[{\"emoji\":\"🤹🏻\",\"label\":\"person juggling: light skin tone\",\"tone\":1},{\"emoji\":\"🤹🏼\",\"label\":\"person juggling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤹🏽\",\"label\":\"person juggling: medium skin tone\",\"tone\":3},{\"emoji\":\"🤹🏾\",\"label\":\"person juggling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤹🏿\",\"label\":\"person juggling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤹‍♂️\",\"label\":\"man juggling\",\"tone\":0,\"skins\":[{\"emoji\":\"🤹🏻‍♂️\",\"label\":\"man juggling: light skin tone\",\"tone\":1},{\"emoji\":\"🤹🏼‍♂️\",\"label\":\"man juggling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤹🏽‍♂️\",\"label\":\"man juggling: medium skin tone\",\"tone\":3},{\"emoji\":\"🤹🏾‍♂️\",\"label\":\"man juggling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤹🏿‍♂️\",\"label\":\"man juggling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🤹‍♀️\",\"label\":\"woman juggling\",\"tone\":0,\"skins\":[{\"emoji\":\"🤹🏻‍♀️\",\"label\":\"woman juggling: light skin tone\",\"tone\":1},{\"emoji\":\"🤹🏼‍♀️\",\"label\":\"woman juggling: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🤹🏽‍♀️\",\"label\":\"woman juggling: medium skin tone\",\"tone\":3},{\"emoji\":\"🤹🏾‍♀️\",\"label\":\"woman juggling: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🤹🏿‍♀️\",\"label\":\"woman juggling: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧘\",\"label\":\"person in lotus position\",\"tone\":0,\"skins\":[{\"emoji\":\"🧘🏻\",\"label\":\"person in lotus position: light skin tone\",\"tone\":1},{\"emoji\":\"🧘🏼\",\"label\":\"person in lotus position: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧘🏽\",\"label\":\"person in lotus position: medium skin tone\",\"tone\":3},{\"emoji\":\"🧘🏾\",\"label\":\"person in lotus position: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧘🏿\",\"label\":\"person in lotus position: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧘‍♂️\",\"label\":\"man in lotus position\",\"tone\":0,\"skins\":[{\"emoji\":\"🧘🏻‍♂️\",\"label\":\"man in lotus position: light skin tone\",\"tone\":1},{\"emoji\":\"🧘🏼‍♂️\",\"label\":\"man in lotus position: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧘🏽‍♂️\",\"label\":\"man in lotus position: medium skin tone\",\"tone\":3},{\"emoji\":\"🧘🏾‍♂️\",\"label\":\"man in lotus position: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧘🏿‍♂️\",\"label\":\"man in lotus position: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧘‍♀️\",\"label\":\"woman in lotus position\",\"tone\":0,\"skins\":[{\"emoji\":\"🧘🏻‍♀️\",\"label\":\"woman in lotus position: light skin tone\",\"tone\":1},{\"emoji\":\"🧘🏼‍♀️\",\"label\":\"woman in lotus position: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧘🏽‍♀️\",\"label\":\"woman in lotus position: medium skin tone\",\"tone\":3},{\"emoji\":\"🧘🏾‍♀️\",\"label\":\"woman in lotus position: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧘🏿‍♀️\",\"label\":\"woman in lotus position: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🛀\",\"label\":\"person taking bath\",\"tone\":0,\"skins\":[{\"emoji\":\"🛀🏻\",\"label\":\"person taking bath: light skin tone\",\"tone\":1},{\"emoji\":\"🛀🏼\",\"label\":\"person taking bath: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🛀🏽\",\"label\":\"person taking bath: medium skin tone\",\"tone\":3},{\"emoji\":\"🛀🏾\",\"label\":\"person taking bath: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🛀🏿\",\"label\":\"person taking bath: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🛌\",\"label\":\"person in bed\",\"tone\":0,\"skins\":[{\"emoji\":\"🛌🏻\",\"label\":\"person in bed: light skin tone\",\"tone\":1},{\"emoji\":\"🛌🏼\",\"label\":\"person in bed: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🛌🏽\",\"label\":\"person in bed: medium skin tone\",\"tone\":3},{\"emoji\":\"🛌🏾\",\"label\":\"person in bed: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🛌🏿\",\"label\":\"person in bed: dark skin tone\",\"tone\":5}]},{\"emoji\":\"🧑‍🤝‍🧑\",\"label\":\"people holding hands\",\"tone\":0,\"skins\":[{\"emoji\":\"🧑🏻‍🤝‍🧑🏻\",\"label\":\"people holding hands: light skin tone\",\"tone\":1},{\"emoji\":\"🧑🏻‍🤝‍🧑🏼\",\"label\":\"people holding hands: light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"🧑🏻‍🤝‍🧑🏽\",\"label\":\"people holding hands: light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"🧑🏻‍🤝‍🧑🏾\",\"label\":\"people holding hands: light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"🧑🏻‍🤝‍🧑🏿\",\"label\":\"people holding hands: light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"🧑🏼‍🤝‍🧑🏻\",\"label\":\"people holding hands: medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"🧑🏼‍🤝‍🧑🏼\",\"label\":\"people holding hands: medium-light skin tone\",\"tone\":2},{\"emoji\":\"🧑🏼‍🤝‍🧑🏽\",\"label\":\"people holding hands: medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"🧑🏼‍🤝‍🧑🏾\",\"label\":\"people holding hands: medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"🧑🏼‍🤝‍🧑🏿\",\"label\":\"people holding hands: medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"🧑🏽‍🤝‍🧑🏻\",\"label\":\"people holding hands: medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"🧑🏽‍🤝‍🧑🏼\",\"label\":\"people holding hands: medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"🧑🏽‍🤝‍🧑🏽\",\"label\":\"people holding hands: medium skin tone\",\"tone\":3},{\"emoji\":\"🧑🏽‍🤝‍🧑🏾\",\"label\":\"people holding hands: medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"🧑🏽‍🤝‍🧑🏿\",\"label\":\"people holding hands: medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"🧑🏾‍🤝‍🧑🏻\",\"label\":\"people holding hands: medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"🧑🏾‍🤝‍🧑🏼\",\"label\":\"people holding hands: medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"🧑🏾‍🤝‍🧑🏽\",\"label\":\"people holding hands: medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"🧑🏾‍🤝‍🧑🏾\",\"label\":\"people holding hands: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"🧑🏾‍🤝‍🧑🏿\",\"label\":\"people holding hands: medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"🧑🏿‍🤝‍🧑🏻\",\"label\":\"people holding hands: dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"🧑🏿‍🤝‍🧑🏼\",\"label\":\"people holding hands: dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"🧑🏿‍🤝‍🧑🏽\",\"label\":\"people holding hands: dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"🧑🏿‍🤝‍🧑🏾\",\"label\":\"people holding hands: dark skin tone, medium-dark skin tone\",\"tone\":[5,4]},{\"emoji\":\"🧑🏿‍🤝‍🧑🏿\",\"label\":\"people holding hands: dark skin tone\",\"tone\":5}]},{\"emoji\":\"👭\",\"label\":\"women holding hands\",\"tone\":0,\"skins\":[{\"emoji\":\"👭🏻\",\"label\":\"women holding hands: light skin tone\",\"tone\":1},{\"emoji\":\"👭🏼\",\"label\":\"women holding hands: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👭🏽\",\"label\":\"women holding hands: medium skin tone\",\"tone\":3},{\"emoji\":\"👭🏾\",\"label\":\"women holding hands: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👭🏿\",\"label\":\"women holding hands: dark skin tone\",\"tone\":5},{\"emoji\":\"👩🏻‍🤝‍👩🏼\",\"label\":\"women holding hands: light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👩🏻‍🤝‍👩🏽\",\"label\":\"women holding hands: light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👩🏻‍🤝‍👩🏾\",\"label\":\"women holding hands: light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👩🏻‍🤝‍👩🏿\",\"label\":\"women holding hands: light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👩🏼‍🤝‍👩🏻\",\"label\":\"women holding hands: medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👩🏼‍🤝‍👩🏽\",\"label\":\"women holding hands: medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👩🏼‍🤝‍👩🏾\",\"label\":\"women holding hands: medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👩🏼‍🤝‍👩🏿\",\"label\":\"women holding hands: medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👩🏽‍🤝‍👩🏻\",\"label\":\"women holding hands: medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👩🏽‍🤝‍👩🏼\",\"label\":\"women holding hands: medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👩🏽‍🤝‍👩🏾\",\"label\":\"women holding hands: medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👩🏽‍🤝‍👩🏿\",\"label\":\"women holding hands: medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👩🏾‍🤝‍👩🏻\",\"label\":\"women holding hands: medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👩🏾‍🤝‍👩🏼\",\"label\":\"women holding hands: medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👩🏾‍🤝‍👩🏽\",\"label\":\"women holding hands: medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👩🏾‍🤝‍👩🏿\",\"label\":\"women holding hands: medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👩🏿‍🤝‍👩🏻\",\"label\":\"women holding hands: dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👩🏿‍🤝‍👩🏼\",\"label\":\"women holding hands: dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👩🏿‍🤝‍👩🏽\",\"label\":\"women holding hands: dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👩🏿‍🤝‍👩🏾\",\"label\":\"women holding hands: dark skin tone, medium-dark skin tone\",\"tone\":[5,4]}]},{\"emoji\":\"👫\",\"label\":\"woman and man holding hands\",\"tone\":0,\"skins\":[{\"emoji\":\"👫🏻\",\"label\":\"woman and man holding hands: light skin tone\",\"tone\":1},{\"emoji\":\"👫🏼\",\"label\":\"woman and man holding hands: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👫🏽\",\"label\":\"woman and man holding hands: medium skin tone\",\"tone\":3},{\"emoji\":\"👫🏾\",\"label\":\"woman and man holding hands: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👫🏿\",\"label\":\"woman and man holding hands: dark skin tone\",\"tone\":5},{\"emoji\":\"👩🏻‍🤝‍👨🏼\",\"label\":\"woman and man holding hands: light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👩🏻‍🤝‍👨🏽\",\"label\":\"woman and man holding hands: light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👩🏻‍🤝‍👨🏾\",\"label\":\"woman and man holding hands: light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👩🏻‍🤝‍👨🏿\",\"label\":\"woman and man holding hands: light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👩🏼‍🤝‍👨🏻\",\"label\":\"woman and man holding hands: medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👩🏼‍🤝‍👨🏽\",\"label\":\"woman and man holding hands: medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👩🏼‍🤝‍👨🏾\",\"label\":\"woman and man holding hands: medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👩🏼‍🤝‍👨🏿\",\"label\":\"woman and man holding hands: medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👩🏽‍🤝‍👨🏻\",\"label\":\"woman and man holding hands: medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👩🏽‍🤝‍👨🏼\",\"label\":\"woman and man holding hands: medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👩🏽‍🤝‍👨🏾\",\"label\":\"woman and man holding hands: medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👩🏽‍🤝‍👨🏿\",\"label\":\"woman and man holding hands: medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👩🏾‍🤝‍👨🏻\",\"label\":\"woman and man holding hands: medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👩🏾‍🤝‍👨🏼\",\"label\":\"woman and man holding hands: medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👩🏾‍🤝‍👨🏽\",\"label\":\"woman and man holding hands: medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👩🏾‍🤝‍👨🏿\",\"label\":\"woman and man holding hands: medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👩🏿‍🤝‍👨🏻\",\"label\":\"woman and man holding hands: dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👩🏿‍🤝‍👨🏼\",\"label\":\"woman and man holding hands: dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👩🏿‍🤝‍👨🏽\",\"label\":\"woman and man holding hands: dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👩🏿‍🤝‍👨🏾\",\"label\":\"woman and man holding hands: dark skin tone, medium-dark skin tone\",\"tone\":[5,4]}]},{\"emoji\":\"👬\",\"label\":\"men holding hands\",\"tone\":0,\"skins\":[{\"emoji\":\"👬🏻\",\"label\":\"men holding hands: light skin tone\",\"tone\":1},{\"emoji\":\"👬🏼\",\"label\":\"men holding hands: medium-light skin tone\",\"tone\":2},{\"emoji\":\"👬🏽\",\"label\":\"men holding hands: medium skin tone\",\"tone\":3},{\"emoji\":\"👬🏾\",\"label\":\"men holding hands: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👬🏿\",\"label\":\"men holding hands: dark skin tone\",\"tone\":5},{\"emoji\":\"👨🏻‍🤝‍👨🏼\",\"label\":\"men holding hands: light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👨🏻‍🤝‍👨🏽\",\"label\":\"men holding hands: light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👨🏻‍🤝‍👨🏾\",\"label\":\"men holding hands: light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👨🏻‍🤝‍👨🏿\",\"label\":\"men holding hands: light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👨🏼‍🤝‍👨🏻\",\"label\":\"men holding hands: medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👨🏼‍🤝‍👨🏽\",\"label\":\"men holding hands: medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👨🏼‍🤝‍👨🏾\",\"label\":\"men holding hands: medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👨🏼‍🤝‍👨🏿\",\"label\":\"men holding hands: medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👨🏽‍🤝‍👨🏻\",\"label\":\"men holding hands: medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👨🏽‍🤝‍👨🏼\",\"label\":\"men holding hands: medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👨🏽‍🤝‍👨🏾\",\"label\":\"men holding hands: medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👨🏽‍🤝‍👨🏿\",\"label\":\"men holding hands: medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👨🏾‍🤝‍👨🏻\",\"label\":\"men holding hands: medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👨🏾‍🤝‍👨🏼\",\"label\":\"men holding hands: medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👨🏾‍🤝‍👨🏽\",\"label\":\"men holding hands: medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👨🏾‍🤝‍👨🏿\",\"label\":\"men holding hands: medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👨🏿‍🤝‍👨🏻\",\"label\":\"men holding hands: dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👨🏿‍🤝‍👨🏼\",\"label\":\"men holding hands: dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👨🏿‍🤝‍👨🏽\",\"label\":\"men holding hands: dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👨🏿‍🤝‍👨🏾\",\"label\":\"men holding hands: dark skin tone, medium-dark skin tone\",\"tone\":[5,4]}]},{\"emoji\":\"💏\",\"label\":\"kiss\",\"tone\":0,\"skins\":[{\"emoji\":\"💏🏻\",\"label\":\"kiss: light skin tone\",\"tone\":1},{\"emoji\":\"💏🏼\",\"label\":\"kiss: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💏🏽\",\"label\":\"kiss: medium skin tone\",\"tone\":3},{\"emoji\":\"💏🏾\",\"label\":\"kiss: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💏🏿\",\"label\":\"kiss: dark skin tone\",\"tone\":5},{\"emoji\":\"🧑🏻‍❤️‍💋‍🧑🏼\",\"label\":\"kiss: person, person, light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"🧑🏻‍❤️‍💋‍🧑🏽\",\"label\":\"kiss: person, person, light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"🧑🏻‍❤️‍💋‍🧑🏾\",\"label\":\"kiss: person, person, light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"🧑🏻‍❤️‍💋‍🧑🏿\",\"label\":\"kiss: person, person, light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"🧑🏼‍❤️‍💋‍🧑🏻\",\"label\":\"kiss: person, person, medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"🧑🏼‍❤️‍💋‍🧑🏽\",\"label\":\"kiss: person, person, medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"🧑🏼‍❤️‍💋‍🧑🏾\",\"label\":\"kiss: person, person, medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"🧑🏼‍❤️‍💋‍🧑🏿\",\"label\":\"kiss: person, person, medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"🧑🏽‍❤️‍💋‍🧑🏻\",\"label\":\"kiss: person, person, medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"🧑🏽‍❤️‍💋‍🧑🏼\",\"label\":\"kiss: person, person, medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"🧑🏽‍❤️‍💋‍🧑🏾\",\"label\":\"kiss: person, person, medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"🧑🏽‍❤️‍💋‍🧑🏿\",\"label\":\"kiss: person, person, medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"🧑🏾‍❤️‍💋‍🧑🏻\",\"label\":\"kiss: person, person, medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"🧑🏾‍❤️‍💋‍🧑🏼\",\"label\":\"kiss: person, person, medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"🧑🏾‍❤️‍💋‍🧑🏽\",\"label\":\"kiss: person, person, medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"🧑🏾‍❤️‍💋‍🧑🏿\",\"label\":\"kiss: person, person, medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"🧑🏿‍❤️‍💋‍🧑🏻\",\"label\":\"kiss: person, person, dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"🧑🏿‍❤️‍💋‍🧑🏼\",\"label\":\"kiss: person, person, dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"🧑🏿‍❤️‍💋‍🧑🏽\",\"label\":\"kiss: person, person, dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"🧑🏿‍❤️‍💋‍🧑🏾\",\"label\":\"kiss: person, person, dark skin tone, medium-dark skin tone\",\"tone\":[5,4]}]},{\"emoji\":\"👩‍❤️‍💋‍👨\",\"label\":\"kiss: woman, man\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍❤️‍💋‍👨🏻\",\"label\":\"kiss: woman, man, light skin tone\",\"tone\":1},{\"emoji\":\"👩🏻‍❤️‍💋‍👨🏼\",\"label\":\"kiss: woman, man, light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👩🏻‍❤️‍💋‍👨🏽\",\"label\":\"kiss: woman, man, light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👩🏻‍❤️‍💋‍👨🏾\",\"label\":\"kiss: woman, man, light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👩🏻‍❤️‍💋‍👨🏿\",\"label\":\"kiss: woman, man, light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👩🏼‍❤️‍💋‍👨🏻\",\"label\":\"kiss: woman, man, medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👩🏼‍❤️‍💋‍👨🏼\",\"label\":\"kiss: woman, man, medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏼‍❤️‍💋‍👨🏽\",\"label\":\"kiss: woman, man, medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👩🏼‍❤️‍💋‍👨🏾\",\"label\":\"kiss: woman, man, medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👩🏼‍❤️‍💋‍👨🏿\",\"label\":\"kiss: woman, man, medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👩🏽‍❤️‍💋‍👨🏻\",\"label\":\"kiss: woman, man, medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👩🏽‍❤️‍💋‍👨🏼\",\"label\":\"kiss: woman, man, medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👩🏽‍❤️‍💋‍👨🏽\",\"label\":\"kiss: woman, man, medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏽‍❤️‍💋‍👨🏾\",\"label\":\"kiss: woman, man, medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👩🏽‍❤️‍💋‍👨🏿\",\"label\":\"kiss: woman, man, medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👩🏾‍❤️‍💋‍👨🏻\",\"label\":\"kiss: woman, man, medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👩🏾‍❤️‍💋‍👨🏼\",\"label\":\"kiss: woman, man, medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👩🏾‍❤️‍💋‍👨🏽\",\"label\":\"kiss: woman, man, medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👩🏾‍❤️‍💋‍👨🏾\",\"label\":\"kiss: woman, man, medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏾‍❤️‍💋‍👨🏿\",\"label\":\"kiss: woman, man, medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👩🏿‍❤️‍💋‍👨🏻\",\"label\":\"kiss: woman, man, dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👩🏿‍❤️‍💋‍👨🏼\",\"label\":\"kiss: woman, man, dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👩🏿‍❤️‍💋‍👨🏽\",\"label\":\"kiss: woman, man, dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👩🏿‍❤️‍💋‍👨🏾\",\"label\":\"kiss: woman, man, dark skin tone, medium-dark skin tone\",\"tone\":[5,4]},{\"emoji\":\"👩🏿‍❤️‍💋‍👨🏿\",\"label\":\"kiss: woman, man, dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍❤️‍💋‍👨\",\"label\":\"kiss: man, man\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍❤️‍💋‍👨🏻\",\"label\":\"kiss: man, man, light skin tone\",\"tone\":1},{\"emoji\":\"👨🏻‍❤️‍💋‍👨🏼\",\"label\":\"kiss: man, man, light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👨🏻‍❤️‍💋‍👨🏽\",\"label\":\"kiss: man, man, light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👨🏻‍❤️‍💋‍👨🏾\",\"label\":\"kiss: man, man, light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👨🏻‍❤️‍💋‍👨🏿\",\"label\":\"kiss: man, man, light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👨🏼‍❤️‍💋‍👨🏻\",\"label\":\"kiss: man, man, medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👨🏼‍❤️‍💋‍👨🏼\",\"label\":\"kiss: man, man, medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏼‍❤️‍💋‍👨🏽\",\"label\":\"kiss: man, man, medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👨🏼‍❤️‍💋‍👨🏾\",\"label\":\"kiss: man, man, medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👨🏼‍❤️‍💋‍👨🏿\",\"label\":\"kiss: man, man, medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👨🏽‍❤️‍💋‍👨🏻\",\"label\":\"kiss: man, man, medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👨🏽‍❤️‍💋‍👨🏼\",\"label\":\"kiss: man, man, medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👨🏽‍❤️‍💋‍👨🏽\",\"label\":\"kiss: man, man, medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏽‍❤️‍💋‍👨🏾\",\"label\":\"kiss: man, man, medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👨🏽‍❤️‍💋‍👨🏿\",\"label\":\"kiss: man, man, medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👨🏾‍❤️‍💋‍👨🏻\",\"label\":\"kiss: man, man, medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👨🏾‍❤️‍💋‍👨🏼\",\"label\":\"kiss: man, man, medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👨🏾‍❤️‍💋‍👨🏽\",\"label\":\"kiss: man, man, medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👨🏾‍❤️‍💋‍👨🏾\",\"label\":\"kiss: man, man, medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏾‍❤️‍💋‍👨🏿\",\"label\":\"kiss: man, man, medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👨🏿‍❤️‍💋‍👨🏻\",\"label\":\"kiss: man, man, dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👨🏿‍❤️‍💋‍👨🏼\",\"label\":\"kiss: man, man, dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👨🏿‍❤️‍💋‍👨🏽\",\"label\":\"kiss: man, man, dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👨🏿‍❤️‍💋‍👨🏾\",\"label\":\"kiss: man, man, dark skin tone, medium-dark skin tone\",\"tone\":[5,4]},{\"emoji\":\"👨🏿‍❤️‍💋‍👨🏿\",\"label\":\"kiss: man, man, dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍❤️‍💋‍👩\",\"label\":\"kiss: woman, woman\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍❤️‍💋‍👩🏻\",\"label\":\"kiss: woman, woman, light skin tone\",\"tone\":1},{\"emoji\":\"👩🏻‍❤️‍💋‍👩🏼\",\"label\":\"kiss: woman, woman, light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👩🏻‍❤️‍💋‍👩🏽\",\"label\":\"kiss: woman, woman, light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👩🏻‍❤️‍💋‍👩🏾\",\"label\":\"kiss: woman, woman, light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👩🏻‍❤️‍💋‍👩🏿\",\"label\":\"kiss: woman, woman, light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👩🏼‍❤️‍💋‍👩🏻\",\"label\":\"kiss: woman, woman, medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👩🏼‍❤️‍💋‍👩🏼\",\"label\":\"kiss: woman, woman, medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏼‍❤️‍💋‍👩🏽\",\"label\":\"kiss: woman, woman, medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👩🏼‍❤️‍💋‍👩🏾\",\"label\":\"kiss: woman, woman, medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👩🏼‍❤️‍💋‍👩🏿\",\"label\":\"kiss: woman, woman, medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👩🏽‍❤️‍💋‍👩🏻\",\"label\":\"kiss: woman, woman, medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👩🏽‍❤️‍💋‍👩🏼\",\"label\":\"kiss: woman, woman, medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👩🏽‍❤️‍💋‍👩🏽\",\"label\":\"kiss: woman, woman, medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏽‍❤️‍💋‍👩🏾\",\"label\":\"kiss: woman, woman, medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👩🏽‍❤️‍💋‍👩🏿\",\"label\":\"kiss: woman, woman, medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👩🏾‍❤️‍💋‍👩🏻\",\"label\":\"kiss: woman, woman, medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👩🏾‍❤️‍💋‍👩🏼\",\"label\":\"kiss: woman, woman, medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👩🏾‍❤️‍💋‍👩🏽\",\"label\":\"kiss: woman, woman, medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👩🏾‍❤️‍💋‍👩🏾\",\"label\":\"kiss: woman, woman, medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏾‍❤️‍💋‍👩🏿\",\"label\":\"kiss: woman, woman, medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👩🏿‍❤️‍💋‍👩🏻\",\"label\":\"kiss: woman, woman, dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👩🏿‍❤️‍💋‍👩🏼\",\"label\":\"kiss: woman, woman, dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👩🏿‍❤️‍💋‍👩🏽\",\"label\":\"kiss: woman, woman, dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👩🏿‍❤️‍💋‍👩🏾\",\"label\":\"kiss: woman, woman, dark skin tone, medium-dark skin tone\",\"tone\":[5,4]},{\"emoji\":\"👩🏿‍❤️‍💋‍👩🏿\",\"label\":\"kiss: woman, woman, dark skin tone\",\"tone\":5}]},{\"emoji\":\"💑\",\"label\":\"couple with heart\",\"tone\":0,\"skins\":[{\"emoji\":\"💑🏻\",\"label\":\"couple with heart: light skin tone\",\"tone\":1},{\"emoji\":\"💑🏼\",\"label\":\"couple with heart: medium-light skin tone\",\"tone\":2},{\"emoji\":\"💑🏽\",\"label\":\"couple with heart: medium skin tone\",\"tone\":3},{\"emoji\":\"💑🏾\",\"label\":\"couple with heart: medium-dark skin tone\",\"tone\":4},{\"emoji\":\"💑🏿\",\"label\":\"couple with heart: dark skin tone\",\"tone\":5},{\"emoji\":\"🧑🏻‍❤️‍🧑🏼\",\"label\":\"couple with heart: person, person, light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"🧑🏻‍❤️‍🧑🏽\",\"label\":\"couple with heart: person, person, light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"🧑🏻‍❤️‍🧑🏾\",\"label\":\"couple with heart: person, person, light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"🧑🏻‍❤️‍🧑🏿\",\"label\":\"couple with heart: person, person, light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"🧑🏼‍❤️‍🧑🏻\",\"label\":\"couple with heart: person, person, medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"🧑🏼‍❤️‍🧑🏽\",\"label\":\"couple with heart: person, person, medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"🧑🏼‍❤️‍🧑🏾\",\"label\":\"couple with heart: person, person, medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"🧑🏼‍❤️‍🧑🏿\",\"label\":\"couple with heart: person, person, medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"🧑🏽‍❤️‍🧑🏻\",\"label\":\"couple with heart: person, person, medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"🧑🏽‍❤️‍🧑🏼\",\"label\":\"couple with heart: person, person, medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"🧑🏽‍❤️‍🧑🏾\",\"label\":\"couple with heart: person, person, medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"🧑🏽‍❤️‍🧑🏿\",\"label\":\"couple with heart: person, person, medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"🧑🏾‍❤️‍🧑🏻\",\"label\":\"couple with heart: person, person, medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"🧑🏾‍❤️‍🧑🏼\",\"label\":\"couple with heart: person, person, medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"🧑🏾‍❤️‍🧑🏽\",\"label\":\"couple with heart: person, person, medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"🧑🏾‍❤️‍🧑🏿\",\"label\":\"couple with heart: person, person, medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"🧑🏿‍❤️‍🧑🏻\",\"label\":\"couple with heart: person, person, dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"🧑🏿‍❤️‍🧑🏼\",\"label\":\"couple with heart: person, person, dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"🧑🏿‍❤️‍🧑🏽\",\"label\":\"couple with heart: person, person, dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"🧑🏿‍❤️‍🧑🏾\",\"label\":\"couple with heart: person, person, dark skin tone, medium-dark skin tone\",\"tone\":[5,4]}]},{\"emoji\":\"👩‍❤️‍👨\",\"label\":\"couple with heart: woman, man\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍❤️‍👨🏻\",\"label\":\"couple with heart: woman, man, light skin tone\",\"tone\":1},{\"emoji\":\"👩🏻‍❤️‍👨🏼\",\"label\":\"couple with heart: woman, man, light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👩🏻‍❤️‍👨🏽\",\"label\":\"couple with heart: woman, man, light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👩🏻‍❤️‍👨🏾\",\"label\":\"couple with heart: woman, man, light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👩🏻‍❤️‍👨🏿\",\"label\":\"couple with heart: woman, man, light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👩🏼‍❤️‍👨🏻\",\"label\":\"couple with heart: woman, man, medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👩🏼‍❤️‍👨🏼\",\"label\":\"couple with heart: woman, man, medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏼‍❤️‍👨🏽\",\"label\":\"couple with heart: woman, man, medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👩🏼‍❤️‍👨🏾\",\"label\":\"couple with heart: woman, man, medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👩🏼‍❤️‍👨🏿\",\"label\":\"couple with heart: woman, man, medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👩🏽‍❤️‍👨🏻\",\"label\":\"couple with heart: woman, man, medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👩🏽‍❤️‍👨🏼\",\"label\":\"couple with heart: woman, man, medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👩🏽‍❤️‍👨🏽\",\"label\":\"couple with heart: woman, man, medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏽‍❤️‍👨🏾\",\"label\":\"couple with heart: woman, man, medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👩🏽‍❤️‍👨🏿\",\"label\":\"couple with heart: woman, man, medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👩🏾‍❤️‍👨🏻\",\"label\":\"couple with heart: woman, man, medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👩🏾‍❤️‍👨🏼\",\"label\":\"couple with heart: woman, man, medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👩🏾‍❤️‍👨🏽\",\"label\":\"couple with heart: woman, man, medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👩🏾‍❤️‍👨🏾\",\"label\":\"couple with heart: woman, man, medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏾‍❤️‍👨🏿\",\"label\":\"couple with heart: woman, man, medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👩🏿‍❤️‍👨🏻\",\"label\":\"couple with heart: woman, man, dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👩🏿‍❤️‍👨🏼\",\"label\":\"couple with heart: woman, man, dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👩🏿‍❤️‍👨🏽\",\"label\":\"couple with heart: woman, man, dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👩🏿‍❤️‍👨🏾\",\"label\":\"couple with heart: woman, man, dark skin tone, medium-dark skin tone\",\"tone\":[5,4]},{\"emoji\":\"👩🏿‍❤️‍👨🏿\",\"label\":\"couple with heart: woman, man, dark skin tone\",\"tone\":5}]},{\"emoji\":\"👨‍❤️‍👨\",\"label\":\"couple with heart: man, man\",\"tone\":0,\"skins\":[{\"emoji\":\"👨🏻‍❤️‍👨🏻\",\"label\":\"couple with heart: man, man, light skin tone\",\"tone\":1},{\"emoji\":\"👨🏻‍❤️‍👨🏼\",\"label\":\"couple with heart: man, man, light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👨🏻‍❤️‍👨🏽\",\"label\":\"couple with heart: man, man, light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👨🏻‍❤️‍👨🏾\",\"label\":\"couple with heart: man, man, light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👨🏻‍❤️‍👨🏿\",\"label\":\"couple with heart: man, man, light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👨🏼‍❤️‍👨🏻\",\"label\":\"couple with heart: man, man, medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👨🏼‍❤️‍👨🏼\",\"label\":\"couple with heart: man, man, medium-light skin tone\",\"tone\":2},{\"emoji\":\"👨🏼‍❤️‍👨🏽\",\"label\":\"couple with heart: man, man, medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👨🏼‍❤️‍👨🏾\",\"label\":\"couple with heart: man, man, medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👨🏼‍❤️‍👨🏿\",\"label\":\"couple with heart: man, man, medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👨🏽‍❤️‍👨🏻\",\"label\":\"couple with heart: man, man, medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👨🏽‍❤️‍👨🏼\",\"label\":\"couple with heart: man, man, medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👨🏽‍❤️‍👨🏽\",\"label\":\"couple with heart: man, man, medium skin tone\",\"tone\":3},{\"emoji\":\"👨🏽‍❤️‍👨🏾\",\"label\":\"couple with heart: man, man, medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👨🏽‍❤️‍👨🏿\",\"label\":\"couple with heart: man, man, medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👨🏾‍❤️‍👨🏻\",\"label\":\"couple with heart: man, man, medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👨🏾‍❤️‍👨🏼\",\"label\":\"couple with heart: man, man, medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👨🏾‍❤️‍👨🏽\",\"label\":\"couple with heart: man, man, medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👨🏾‍❤️‍👨🏾\",\"label\":\"couple with heart: man, man, medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👨🏾‍❤️‍👨🏿\",\"label\":\"couple with heart: man, man, medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👨🏿‍❤️‍👨🏻\",\"label\":\"couple with heart: man, man, dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👨🏿‍❤️‍👨🏼\",\"label\":\"couple with heart: man, man, dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👨🏿‍❤️‍👨🏽\",\"label\":\"couple with heart: man, man, dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👨🏿‍❤️‍👨🏾\",\"label\":\"couple with heart: man, man, dark skin tone, medium-dark skin tone\",\"tone\":[5,4]},{\"emoji\":\"👨🏿‍❤️‍👨🏿\",\"label\":\"couple with heart: man, man, dark skin tone\",\"tone\":5}]},{\"emoji\":\"👩‍❤️‍👩\",\"label\":\"couple with heart: woman, woman\",\"tone\":0,\"skins\":[{\"emoji\":\"👩🏻‍❤️‍👩🏻\",\"label\":\"couple with heart: woman, woman, light skin tone\",\"tone\":1},{\"emoji\":\"👩🏻‍❤️‍👩🏼\",\"label\":\"couple with heart: woman, woman, light skin tone, medium-light skin tone\",\"tone\":[1,2]},{\"emoji\":\"👩🏻‍❤️‍👩🏽\",\"label\":\"couple with heart: woman, woman, light skin tone, medium skin tone\",\"tone\":[1,3]},{\"emoji\":\"👩🏻‍❤️‍👩🏾\",\"label\":\"couple with heart: woman, woman, light skin tone, medium-dark skin tone\",\"tone\":[1,4]},{\"emoji\":\"👩🏻‍❤️‍👩🏿\",\"label\":\"couple with heart: woman, woman, light skin tone, dark skin tone\",\"tone\":[1,5]},{\"emoji\":\"👩🏼‍❤️‍👩🏻\",\"label\":\"couple with heart: woman, woman, medium-light skin tone, light skin tone\",\"tone\":[2,1]},{\"emoji\":\"👩🏼‍❤️‍👩🏼\",\"label\":\"couple with heart: woman, woman, medium-light skin tone\",\"tone\":2},{\"emoji\":\"👩🏼‍❤️‍👩🏽\",\"label\":\"couple with heart: woman, woman, medium-light skin tone, medium skin tone\",\"tone\":[2,3]},{\"emoji\":\"👩🏼‍❤️‍👩🏾\",\"label\":\"couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone\",\"tone\":[2,4]},{\"emoji\":\"👩🏼‍❤️‍👩🏿\",\"label\":\"couple with heart: woman, woman, medium-light skin tone, dark skin tone\",\"tone\":[2,5]},{\"emoji\":\"👩🏽‍❤️‍👩🏻\",\"label\":\"couple with heart: woman, woman, medium skin tone, light skin tone\",\"tone\":[3,1]},{\"emoji\":\"👩🏽‍❤️‍👩🏼\",\"label\":\"couple with heart: woman, woman, medium skin tone, medium-light skin tone\",\"tone\":[3,2]},{\"emoji\":\"👩🏽‍❤️‍👩🏽\",\"label\":\"couple with heart: woman, woman, medium skin tone\",\"tone\":3},{\"emoji\":\"👩🏽‍❤️‍👩🏾\",\"label\":\"couple with heart: woman, woman, medium skin tone, medium-dark skin tone\",\"tone\":[3,4]},{\"emoji\":\"👩🏽‍❤️‍👩🏿\",\"label\":\"couple with heart: woman, woman, medium skin tone, dark skin tone\",\"tone\":[3,5]},{\"emoji\":\"👩🏾‍❤️‍👩🏻\",\"label\":\"couple with heart: woman, woman, medium-dark skin tone, light skin tone\",\"tone\":[4,1]},{\"emoji\":\"👩🏾‍❤️‍👩🏼\",\"label\":\"couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone\",\"tone\":[4,2]},{\"emoji\":\"👩🏾‍❤️‍👩🏽\",\"label\":\"couple with heart: woman, woman, medium-dark skin tone, medium skin tone\",\"tone\":[4,3]},{\"emoji\":\"👩🏾‍❤️‍👩🏾\",\"label\":\"couple with heart: woman, woman, medium-dark skin tone\",\"tone\":4},{\"emoji\":\"👩🏾‍❤️‍👩🏿\",\"label\":\"couple with heart: woman, woman, medium-dark skin tone, dark skin tone\",\"tone\":[4,5]},{\"emoji\":\"👩🏿‍❤️‍👩🏻\",\"label\":\"couple with heart: woman, woman, dark skin tone, light skin tone\",\"tone\":[5,1]},{\"emoji\":\"👩🏿‍❤️‍👩🏼\",\"label\":\"couple with heart: woman, woman, dark skin tone, medium-light skin tone\",\"tone\":[5,2]},{\"emoji\":\"👩🏿‍❤️‍👩🏽\",\"label\":\"couple with heart: woman, woman, dark skin tone, medium skin tone\",\"tone\":[5,3]},{\"emoji\":\"👩🏿‍❤️‍👩🏾\",\"label\":\"couple with heart: woman, woman, dark skin tone, medium-dark skin tone\",\"tone\":[5,4]},{\"emoji\":\"👩🏿‍❤️‍👩🏿\",\"label\":\"couple with heart: woman, woman, dark skin tone\",\"tone\":5}]},{\"emoji\":\"👪️\",\"label\":\"family\",\"tone\":0},{\"emoji\":\"👨‍👩‍👦\",\"label\":\"family: man, woman, boy\",\"tone\":0},{\"emoji\":\"👨‍👩‍👧\",\"label\":\"family: man, woman, girl\",\"tone\":0},{\"emoji\":\"👨‍👩‍👧‍👦\",\"label\":\"family: man, woman, girl, boy\",\"tone\":0},{\"emoji\":\"👨‍👩‍👦‍👦\",\"label\":\"family: man, woman, boy, boy\",\"tone\":0},{\"emoji\":\"👨‍👩‍👧‍👧\",\"label\":\"family: man, woman, girl, girl\",\"tone\":0},{\"emoji\":\"👨‍👨‍👦\",\"label\":\"family: man, man, boy\",\"tone\":0},{\"emoji\":\"👨‍👨‍👧\",\"label\":\"family: man, man, girl\",\"tone\":0},{\"emoji\":\"👨‍👨‍👧‍👦\",\"label\":\"family: man, man, girl, boy\",\"tone\":0},{\"emoji\":\"👨‍👨‍👦‍👦\",\"label\":\"family: man, man, boy, boy\",\"tone\":0},{\"emoji\":\"👨‍👨‍👧‍👧\",\"label\":\"family: man, man, girl, girl\",\"tone\":0},{\"emoji\":\"👩‍👩‍👦\",\"label\":\"family: woman, woman, boy\",\"tone\":0},{\"emoji\":\"👩‍👩‍👧\",\"label\":\"family: woman, woman, girl\",\"tone\":0},{\"emoji\":\"👩‍👩‍👧‍👦\",\"label\":\"family: woman, woman, girl, boy\",\"tone\":0},{\"emoji\":\"👩‍👩‍👦‍👦\",\"label\":\"family: woman, woman, boy, boy\",\"tone\":0},{\"emoji\":\"👩‍👩‍👧‍👧\",\"label\":\"family: woman, woman, girl, girl\",\"tone\":0},{\"emoji\":\"👨‍👦\",\"label\":\"family: man, boy\",\"tone\":0},{\"emoji\":\"👨‍👦‍👦\",\"label\":\"family: man, boy, boy\",\"tone\":0},{\"emoji\":\"👨‍👧\",\"label\":\"family: man, girl\",\"tone\":0},{\"emoji\":\"👨‍👧‍👦\",\"label\":\"family: man, girl, boy\",\"tone\":0},{\"emoji\":\"👨‍👧‍👧\",\"label\":\"family: man, girl, girl\",\"tone\":0},{\"emoji\":\"👩‍👦\",\"label\":\"family: woman, boy\",\"tone\":0},{\"emoji\":\"👩‍👦‍👦\",\"label\":\"family: woman, boy, boy\",\"tone\":0},{\"emoji\":\"👩‍👧\",\"label\":\"family: woman, girl\",\"tone\":0},{\"emoji\":\"👩‍👧‍👦\",\"label\":\"family: woman, girl, boy\",\"tone\":0},{\"emoji\":\"👩‍👧‍👧\",\"label\":\"family: woman, girl, girl\",\"tone\":0},{\"emoji\":\"🗣️\",\"label\":\"speaking head\",\"tone\":0},{\"emoji\":\"👤\",\"label\":\"bust in silhouette\",\"tone\":0},{\"emoji\":\"👥\",\"label\":\"busts in silhouette\",\"tone\":0},{\"emoji\":\"🫂\",\"label\":\"people hugging\",\"tone\":0},{\"emoji\":\"👣\",\"label\":\"footprints\",\"tone\":0}]},{\"name\":\"animals-nature\",\"emojis\":[{\"emoji\":\"🐵\",\"label\":\"monkey face\",\"tone\":0},{\"emoji\":\"🐒\",\"label\":\"monkey\",\"tone\":0},{\"emoji\":\"🦍\",\"label\":\"gorilla\",\"tone\":0},{\"emoji\":\"🦧\",\"label\":\"orangutan\",\"tone\":0},{\"emoji\":\"🐶\",\"label\":\"dog face\",\"tone\":0},{\"emoji\":\"🐕️\",\"label\":\"dog\",\"tone\":0},{\"emoji\":\"🦮\",\"label\":\"guide dog\",\"tone\":0},{\"emoji\":\"🐕‍🦺\",\"label\":\"service dog\",\"tone\":0},{\"emoji\":\"🐩\",\"label\":\"poodle\",\"tone\":0},{\"emoji\":\"🐺\",\"label\":\"wolf\",\"tone\":0},{\"emoji\":\"🦊\",\"label\":\"fox\",\"tone\":0},{\"emoji\":\"🦝\",\"label\":\"raccoon\",\"tone\":0},{\"emoji\":\"🐱\",\"label\":\"cat face\",\"tone\":0},{\"emoji\":\"🐈️\",\"label\":\"cat\",\"tone\":0},{\"emoji\":\"🐈‍⬛\",\"label\":\"black cat\",\"tone\":0},{\"emoji\":\"🦁\",\"label\":\"lion\",\"tone\":0},{\"emoji\":\"🐯\",\"label\":\"tiger face\",\"tone\":0},{\"emoji\":\"🐅\",\"label\":\"tiger\",\"tone\":0},{\"emoji\":\"🐆\",\"label\":\"leopard\",\"tone\":0},{\"emoji\":\"🐴\",\"label\":\"horse face\",\"tone\":0},{\"emoji\":\"🐎\",\"label\":\"horse\",\"tone\":0},{\"emoji\":\"🦄\",\"label\":\"unicorn\",\"tone\":0},{\"emoji\":\"🦓\",\"label\":\"zebra\",\"tone\":0},{\"emoji\":\"🦌\",\"label\":\"deer\",\"tone\":0},{\"emoji\":\"🦬\",\"label\":\"bison\",\"tone\":0},{\"emoji\":\"🐮\",\"label\":\"cow face\",\"tone\":0},{\"emoji\":\"🐂\",\"label\":\"ox\",\"tone\":0},{\"emoji\":\"🐃\",\"label\":\"water buffalo\",\"tone\":0},{\"emoji\":\"🐄\",\"label\":\"cow\",\"tone\":0},{\"emoji\":\"🐷\",\"label\":\"pig face\",\"tone\":0},{\"emoji\":\"🐖\",\"label\":\"pig\",\"tone\":0},{\"emoji\":\"🐗\",\"label\":\"boar\",\"tone\":0},{\"emoji\":\"🐽\",\"label\":\"pig nose\",\"tone\":0},{\"emoji\":\"🐏\",\"label\":\"ram\",\"tone\":0},{\"emoji\":\"🐑\",\"label\":\"ewe\",\"tone\":0},{\"emoji\":\"🐐\",\"label\":\"goat\",\"tone\":0},{\"emoji\":\"🐪\",\"label\":\"camel\",\"tone\":0},{\"emoji\":\"🐫\",\"label\":\"two-hump camel\",\"tone\":0},{\"emoji\":\"🦙\",\"label\":\"llama\",\"tone\":0},{\"emoji\":\"🦒\",\"label\":\"giraffe\",\"tone\":0},{\"emoji\":\"🐘\",\"label\":\"elephant\",\"tone\":0},{\"emoji\":\"🦣\",\"label\":\"mammoth\",\"tone\":0},{\"emoji\":\"🦏\",\"label\":\"rhinoceros\",\"tone\":0},{\"emoji\":\"🦛\",\"label\":\"hippopotamus\",\"tone\":0},{\"emoji\":\"🐭\",\"label\":\"mouse face\",\"tone\":0},{\"emoji\":\"🐁\",\"label\":\"mouse\",\"tone\":0},{\"emoji\":\"🐀\",\"label\":\"rat\",\"tone\":0},{\"emoji\":\"🐹\",\"label\":\"hamster\",\"tone\":0},{\"emoji\":\"🐰\",\"label\":\"rabbit face\",\"tone\":0},{\"emoji\":\"🐇\",\"label\":\"rabbit\",\"tone\":0},{\"emoji\":\"🐿️\",\"label\":\"chipmunk\",\"tone\":0},{\"emoji\":\"🦫\",\"label\":\"beaver\",\"tone\":0},{\"emoji\":\"🦔\",\"label\":\"hedgehog\",\"tone\":0},{\"emoji\":\"🦇\",\"label\":\"bat\",\"tone\":0},{\"emoji\":\"🐻\",\"label\":\"bear\",\"tone\":0},{\"emoji\":\"🐻‍❄️\",\"label\":\"polar bear\",\"tone\":0},{\"emoji\":\"🐨\",\"label\":\"koala\",\"tone\":0},{\"emoji\":\"🐼\",\"label\":\"panda\",\"tone\":0},{\"emoji\":\"🦥\",\"label\":\"sloth\",\"tone\":0},{\"emoji\":\"🦦\",\"label\":\"otter\",\"tone\":0},{\"emoji\":\"🦨\",\"label\":\"skunk\",\"tone\":0},{\"emoji\":\"🦘\",\"label\":\"kangaroo\",\"tone\":0},{\"emoji\":\"🦡\",\"label\":\"badger\",\"tone\":0},{\"emoji\":\"🐾\",\"label\":\"paw prints\",\"tone\":0},{\"emoji\":\"🦃\",\"label\":\"turkey\",\"tone\":0},{\"emoji\":\"🐔\",\"label\":\"chicken\",\"tone\":0},{\"emoji\":\"🐓\",\"label\":\"rooster\",\"tone\":0},{\"emoji\":\"🐣\",\"label\":\"hatching chick\",\"tone\":0},{\"emoji\":\"🐤\",\"label\":\"baby chick\",\"tone\":0},{\"emoji\":\"🐥\",\"label\":\"front-facing baby chick\",\"tone\":0},{\"emoji\":\"🐦️\",\"label\":\"bird\",\"tone\":0},{\"emoji\":\"🐧\",\"label\":\"penguin\",\"tone\":0},{\"emoji\":\"🕊️\",\"label\":\"dove\",\"tone\":0},{\"emoji\":\"🦅\",\"label\":\"eagle\",\"tone\":0},{\"emoji\":\"🦆\",\"label\":\"duck\",\"tone\":0},{\"emoji\":\"🦢\",\"label\":\"swan\",\"tone\":0},{\"emoji\":\"🦉\",\"label\":\"owl\",\"tone\":0},{\"emoji\":\"🦤\",\"label\":\"dodo\",\"tone\":0},{\"emoji\":\"🪶\",\"label\":\"feather\",\"tone\":0},{\"emoji\":\"🦩\",\"label\":\"flamingo\",\"tone\":0},{\"emoji\":\"🦚\",\"label\":\"peacock\",\"tone\":0},{\"emoji\":\"🦜\",\"label\":\"parrot\",\"tone\":0},{\"emoji\":\"🐸\",\"label\":\"frog\",\"tone\":0},{\"emoji\":\"🐊\",\"label\":\"crocodile\",\"tone\":0},{\"emoji\":\"🐢\",\"label\":\"turtle\",\"tone\":0},{\"emoji\":\"🦎\",\"label\":\"lizard\",\"tone\":0},{\"emoji\":\"🐍\",\"label\":\"snake\",\"tone\":0},{\"emoji\":\"🐲\",\"label\":\"dragon face\",\"tone\":0},{\"emoji\":\"🐉\",\"label\":\"dragon\",\"tone\":0},{\"emoji\":\"🦕\",\"label\":\"sauropod\",\"tone\":0},{\"emoji\":\"🦖\",\"label\":\"T-Rex\",\"tone\":0},{\"emoji\":\"🐳\",\"label\":\"spouting whale\",\"tone\":0},{\"emoji\":\"🐋\",\"label\":\"whale\",\"tone\":0},{\"emoji\":\"🐬\",\"label\":\"dolphin\",\"tone\":0},{\"emoji\":\"🦭\",\"label\":\"seal\",\"tone\":0},{\"emoji\":\"🐟️\",\"label\":\"fish\",\"tone\":0},{\"emoji\":\"🐠\",\"label\":\"tropical fish\",\"tone\":0},{\"emoji\":\"🐡\",\"label\":\"blowfish\",\"tone\":0},{\"emoji\":\"🦈\",\"label\":\"shark\",\"tone\":0},{\"emoji\":\"🐙\",\"label\":\"octopus\",\"tone\":0},{\"emoji\":\"🐚\",\"label\":\"spiral shell\",\"tone\":0},{\"emoji\":\"🐌\",\"label\":\"snail\",\"tone\":0},{\"emoji\":\"🦋\",\"label\":\"butterfly\",\"tone\":0},{\"emoji\":\"🐛\",\"label\":\"bug\",\"tone\":0},{\"emoji\":\"🐜\",\"label\":\"ant\",\"tone\":0},{\"emoji\":\"🐝\",\"label\":\"honeybee\",\"tone\":0},{\"emoji\":\"🪲\",\"label\":\"beetle\",\"tone\":0},{\"emoji\":\"🐞\",\"label\":\"lady beetle\",\"tone\":0},{\"emoji\":\"🦗\",\"label\":\"cricket\",\"tone\":0},{\"emoji\":\"🪳\",\"label\":\"cockroach\",\"tone\":0},{\"emoji\":\"🕷️\",\"label\":\"spider\",\"tone\":0},{\"emoji\":\"🕸️\",\"label\":\"spider web\",\"tone\":0},{\"emoji\":\"🦂\",\"label\":\"scorpion\",\"tone\":0},{\"emoji\":\"🦟\",\"label\":\"mosquito\",\"tone\":0},{\"emoji\":\"🪰\",\"label\":\"fly\",\"tone\":0},{\"emoji\":\"🪱\",\"label\":\"worm\",\"tone\":0},{\"emoji\":\"🦠\",\"label\":\"microbe\",\"tone\":0},{\"emoji\":\"💐\",\"label\":\"bouquet\",\"tone\":0},{\"emoji\":\"🌸\",\"label\":\"cherry blossom\",\"tone\":0},{\"emoji\":\"💮\",\"label\":\"white flower\",\"tone\":0},{\"emoji\":\"🏵️\",\"label\":\"rosette\",\"tone\":0},{\"emoji\":\"🌹\",\"label\":\"rose\",\"tone\":0},{\"emoji\":\"🥀\",\"label\":\"wilted flower\",\"tone\":0},{\"emoji\":\"🌺\",\"label\":\"hibiscus\",\"tone\":0},{\"emoji\":\"🌻\",\"label\":\"sunflower\",\"tone\":0},{\"emoji\":\"🌼\",\"label\":\"blossom\",\"tone\":0},{\"emoji\":\"🌷\",\"label\":\"tulip\",\"tone\":0},{\"emoji\":\"🌱\",\"label\":\"seedling\",\"tone\":0},{\"emoji\":\"🪴\",\"label\":\"potted plant\",\"tone\":0},{\"emoji\":\"🌲\",\"label\":\"evergreen tree\",\"tone\":0},{\"emoji\":\"🌳\",\"label\":\"deciduous tree\",\"tone\":0},{\"emoji\":\"🌴\",\"label\":\"palm tree\",\"tone\":0},{\"emoji\":\"🌵\",\"label\":\"cactus\",\"tone\":0},{\"emoji\":\"🌾\",\"label\":\"sheaf of rice\",\"tone\":0},{\"emoji\":\"🌿\",\"label\":\"herb\",\"tone\":0},{\"emoji\":\"☘️\",\"label\":\"shamrock\",\"tone\":0},{\"emoji\":\"🍀\",\"label\":\"four leaf clover\",\"tone\":0},{\"emoji\":\"🍁\",\"label\":\"maple leaf\",\"tone\":0},{\"emoji\":\"🍂\",\"label\":\"fallen leaf\",\"tone\":0},{\"emoji\":\"🍃\",\"label\":\"leaf fluttering in wind\",\"tone\":0}]},{\"name\":\"food-drink\",\"emojis\":[{\"emoji\":\"🍇\",\"label\":\"grapes\",\"tone\":0},{\"emoji\":\"🍈\",\"label\":\"melon\",\"tone\":0},{\"emoji\":\"🍉\",\"label\":\"watermelon\",\"tone\":0},{\"emoji\":\"🍊\",\"label\":\"tangerine\",\"tone\":0},{\"emoji\":\"🍋\",\"label\":\"lemon\",\"tone\":0},{\"emoji\":\"🍌\",\"label\":\"banana\",\"tone\":0},{\"emoji\":\"🍍\",\"label\":\"pineapple\",\"tone\":0},{\"emoji\":\"🥭\",\"label\":\"mango\",\"tone\":0},{\"emoji\":\"🍎\",\"label\":\"red apple\",\"tone\":0},{\"emoji\":\"🍏\",\"label\":\"green apple\",\"tone\":0},{\"emoji\":\"🍐\",\"label\":\"pear\",\"tone\":0},{\"emoji\":\"🍑\",\"label\":\"peach\",\"tone\":0},{\"emoji\":\"🍒\",\"label\":\"cherries\",\"tone\":0},{\"emoji\":\"🍓\",\"label\":\"strawberry\",\"tone\":0},{\"emoji\":\"🫐\",\"label\":\"blueberries\",\"tone\":0},{\"emoji\":\"🥝\",\"label\":\"kiwi fruit\",\"tone\":0},{\"emoji\":\"🍅\",\"label\":\"tomato\",\"tone\":0},{\"emoji\":\"🫒\",\"label\":\"olive\",\"tone\":0},{\"emoji\":\"🥥\",\"label\":\"coconut\",\"tone\":0},{\"emoji\":\"🥑\",\"label\":\"avocado\",\"tone\":0},{\"emoji\":\"🍆\",\"label\":\"eggplant\",\"tone\":0},{\"emoji\":\"🥔\",\"label\":\"potato\",\"tone\":0},{\"emoji\":\"🥕\",\"label\":\"carrot\",\"tone\":0},{\"emoji\":\"🌽\",\"label\":\"ear of corn\",\"tone\":0},{\"emoji\":\"🌶️\",\"label\":\"hot pepper\",\"tone\":0},{\"emoji\":\"🫑\",\"label\":\"bell pepper\",\"tone\":0},{\"emoji\":\"🥒\",\"label\":\"cucumber\",\"tone\":0},{\"emoji\":\"🥬\",\"label\":\"leafy green\",\"tone\":0},{\"emoji\":\"🥦\",\"label\":\"broccoli\",\"tone\":0},{\"emoji\":\"🧄\",\"label\":\"garlic\",\"tone\":0},{\"emoji\":\"🧅\",\"label\":\"onion\",\"tone\":0},{\"emoji\":\"🍄\",\"label\":\"mushroom\",\"tone\":0},{\"emoji\":\"🥜\",\"label\":\"peanuts\",\"tone\":0},{\"emoji\":\"🌰\",\"label\":\"chestnut\",\"tone\":0},{\"emoji\":\"🍞\",\"label\":\"bread\",\"tone\":0},{\"emoji\":\"🥐\",\"label\":\"croissant\",\"tone\":0},{\"emoji\":\"🥖\",\"label\":\"baguette bread\",\"tone\":0},{\"emoji\":\"🫓\",\"label\":\"flatbread\",\"tone\":0},{\"emoji\":\"🥨\",\"label\":\"pretzel\",\"tone\":0},{\"emoji\":\"🥯\",\"label\":\"bagel\",\"tone\":0},{\"emoji\":\"🥞\",\"label\":\"pancakes\",\"tone\":0},{\"emoji\":\"🧇\",\"label\":\"waffle\",\"tone\":0},{\"emoji\":\"🧀\",\"label\":\"cheese wedge\",\"tone\":0},{\"emoji\":\"🍖\",\"label\":\"meat on bone\",\"tone\":0},{\"emoji\":\"🍗\",\"label\":\"poultry leg\",\"tone\":0},{\"emoji\":\"🥩\",\"label\":\"cut of meat\",\"tone\":0},{\"emoji\":\"🥓\",\"label\":\"bacon\",\"tone\":0},{\"emoji\":\"🍔\",\"label\":\"hamburger\",\"tone\":0},{\"emoji\":\"🍟\",\"label\":\"french fries\",\"tone\":0},{\"emoji\":\"🍕\",\"label\":\"pizza\",\"tone\":0},{\"emoji\":\"🌭\",\"label\":\"hot dog\",\"tone\":0},{\"emoji\":\"🥪\",\"label\":\"sandwich\",\"tone\":0},{\"emoji\":\"🌮\",\"label\":\"taco\",\"tone\":0},{\"emoji\":\"🌯\",\"label\":\"burrito\",\"tone\":0},{\"emoji\":\"🫔\",\"label\":\"tamale\",\"tone\":0},{\"emoji\":\"🥙\",\"label\":\"stuffed flatbread\",\"tone\":0},{\"emoji\":\"🧆\",\"label\":\"falafel\",\"tone\":0},{\"emoji\":\"🥚\",\"label\":\"egg\",\"tone\":0},{\"emoji\":\"🍳\",\"label\":\"cooking\",\"tone\":0},{\"emoji\":\"🥘\",\"label\":\"shallow pan of food\",\"tone\":0},{\"emoji\":\"🍲\",\"label\":\"pot of food\",\"tone\":0},{\"emoji\":\"🫕\",\"label\":\"fondue\",\"tone\":0},{\"emoji\":\"🥣\",\"label\":\"bowl with spoon\",\"tone\":0},{\"emoji\":\"🥗\",\"label\":\"green salad\",\"tone\":0},{\"emoji\":\"🍿\",\"label\":\"popcorn\",\"tone\":0},{\"emoji\":\"🧈\",\"label\":\"butter\",\"tone\":0},{\"emoji\":\"🧂\",\"label\":\"salt\",\"tone\":0},{\"emoji\":\"🥫\",\"label\":\"canned food\",\"tone\":0},{\"emoji\":\"🍱\",\"label\":\"bento box\",\"tone\":0},{\"emoji\":\"🍘\",\"label\":\"rice cracker\",\"tone\":0},{\"emoji\":\"🍙\",\"label\":\"rice ball\",\"tone\":0},{\"emoji\":\"🍚\",\"label\":\"cooked rice\",\"tone\":0},{\"emoji\":\"🍛\",\"label\":\"curry rice\",\"tone\":0},{\"emoji\":\"🍜\",\"label\":\"steaming bowl\",\"tone\":0},{\"emoji\":\"🍝\",\"label\":\"spaghetti\",\"tone\":0},{\"emoji\":\"🍠\",\"label\":\"roasted sweet potato\",\"tone\":0},{\"emoji\":\"🍢\",\"label\":\"oden\",\"tone\":0},{\"emoji\":\"🍣\",\"label\":\"sushi\",\"tone\":0},{\"emoji\":\"🍤\",\"label\":\"fried shrimp\",\"tone\":0},{\"emoji\":\"🍥\",\"label\":\"fish cake with swirl\",\"tone\":0},{\"emoji\":\"🥮\",\"label\":\"moon cake\",\"tone\":0},{\"emoji\":\"🍡\",\"label\":\"dango\",\"tone\":0},{\"emoji\":\"🥟\",\"label\":\"dumpling\",\"tone\":0},{\"emoji\":\"🥠\",\"label\":\"fortune cookie\",\"tone\":0},{\"emoji\":\"🥡\",\"label\":\"takeout box\",\"tone\":0},{\"emoji\":\"🦀\",\"label\":\"crab\",\"tone\":0},{\"emoji\":\"🦞\",\"label\":\"lobster\",\"tone\":0},{\"emoji\":\"🦐\",\"label\":\"shrimp\",\"tone\":0},{\"emoji\":\"🦑\",\"label\":\"squid\",\"tone\":0},{\"emoji\":\"🦪\",\"label\":\"oyster\",\"tone\":0},{\"emoji\":\"🍦\",\"label\":\"soft ice cream\",\"tone\":0},{\"emoji\":\"🍧\",\"label\":\"shaved ice\",\"tone\":0},{\"emoji\":\"🍨\",\"label\":\"ice cream\",\"tone\":0},{\"emoji\":\"🍩\",\"label\":\"doughnut\",\"tone\":0},{\"emoji\":\"🍪\",\"label\":\"cookie\",\"tone\":0},{\"emoji\":\"🎂\",\"label\":\"birthday cake\",\"tone\":0},{\"emoji\":\"🍰\",\"label\":\"shortcake\",\"tone\":0},{\"emoji\":\"🧁\",\"label\":\"cupcake\",\"tone\":0},{\"emoji\":\"🥧\",\"label\":\"pie\",\"tone\":0},{\"emoji\":\"🍫\",\"label\":\"chocolate bar\",\"tone\":0},{\"emoji\":\"🍬\",\"label\":\"candy\",\"tone\":0},{\"emoji\":\"🍭\",\"label\":\"lollipop\",\"tone\":0},{\"emoji\":\"🍮\",\"label\":\"custard\",\"tone\":0},{\"emoji\":\"🍯\",\"label\":\"honey pot\",\"tone\":0},{\"emoji\":\"🍼\",\"label\":\"baby bottle\",\"tone\":0},{\"emoji\":\"🥛\",\"label\":\"glass of milk\",\"tone\":0},{\"emoji\":\"☕️\",\"label\":\"hot beverage\",\"tone\":0},{\"emoji\":\"🫖\",\"label\":\"teapot\",\"tone\":0},{\"emoji\":\"🍵\",\"label\":\"teacup without handle\",\"tone\":0},{\"emoji\":\"🍶\",\"label\":\"sake\",\"tone\":0},{\"emoji\":\"🍾\",\"label\":\"bottle with popping cork\",\"tone\":0},{\"emoji\":\"🍷\",\"label\":\"wine glass\",\"tone\":0},{\"emoji\":\"🍸️\",\"label\":\"cocktail glass\",\"tone\":0},{\"emoji\":\"🍹\",\"label\":\"tropical drink\",\"tone\":0},{\"emoji\":\"🍺\",\"label\":\"beer mug\",\"tone\":0},{\"emoji\":\"🍻\",\"label\":\"clinking beer mugs\",\"tone\":0},{\"emoji\":\"🥂\",\"label\":\"clinking glasses\",\"tone\":0},{\"emoji\":\"🥃\",\"label\":\"tumbler glass\",\"tone\":0},{\"emoji\":\"🥤\",\"label\":\"cup with straw\",\"tone\":0},{\"emoji\":\"🧋\",\"label\":\"bubble tea\",\"tone\":0},{\"emoji\":\"🧃\",\"label\":\"beverage box\",\"tone\":0},{\"emoji\":\"🧉\",\"label\":\"mate\",\"tone\":0},{\"emoji\":\"🧊\",\"label\":\"ice\",\"tone\":0},{\"emoji\":\"🥢\",\"label\":\"chopsticks\",\"tone\":0},{\"emoji\":\"🍽️\",\"label\":\"fork and knife with plate\",\"tone\":0},{\"emoji\":\"🍴\",\"label\":\"fork and knife\",\"tone\":0},{\"emoji\":\"🥄\",\"label\":\"spoon\",\"tone\":0},{\"emoji\":\"🔪\",\"label\":\"kitchen knife\",\"tone\":0},{\"emoji\":\"🏺\",\"label\":\"amphora\",\"tone\":0}]},{\"name\":\"travel-places\",\"emojis\":[{\"emoji\":\"🌍️\",\"label\":\"globe showing Europe-Africa\",\"tone\":0},{\"emoji\":\"🌎️\",\"label\":\"globe showing Americas\",\"tone\":0},{\"emoji\":\"🌏️\",\"label\":\"globe showing Asia-Australia\",\"tone\":0},{\"emoji\":\"🌐\",\"label\":\"globe with meridians\",\"tone\":0},{\"emoji\":\"🗺️\",\"label\":\"world map\",\"tone\":0},{\"emoji\":\"🗾\",\"label\":\"map of Japan\",\"tone\":0},{\"emoji\":\"🧭\",\"label\":\"compass\",\"tone\":0},{\"emoji\":\"🏔️\",\"label\":\"snow-capped mountain\",\"tone\":0},{\"emoji\":\"⛰️\",\"label\":\"mountain\",\"tone\":0},{\"emoji\":\"🌋\",\"label\":\"volcano\",\"tone\":0},{\"emoji\":\"🗻\",\"label\":\"mount fuji\",\"tone\":0},{\"emoji\":\"🏕️\",\"label\":\"camping\",\"tone\":0},{\"emoji\":\"🏖️\",\"label\":\"beach with umbrella\",\"tone\":0},{\"emoji\":\"🏜️\",\"label\":\"desert\",\"tone\":0},{\"emoji\":\"🏝️\",\"label\":\"desert island\",\"tone\":0},{\"emoji\":\"🏞️\",\"label\":\"national park\",\"tone\":0},{\"emoji\":\"🏟️\",\"label\":\"stadium\",\"tone\":0},{\"emoji\":\"🏛️\",\"label\":\"classical building\",\"tone\":0},{\"emoji\":\"🏗️\",\"label\":\"building construction\",\"tone\":0},{\"emoji\":\"🧱\",\"label\":\"brick\",\"tone\":0},{\"emoji\":\"🪨\",\"label\":\"rock\",\"tone\":0},{\"emoji\":\"🪵\",\"label\":\"wood\",\"tone\":0},{\"emoji\":\"🛖\",\"label\":\"hut\",\"tone\":0},{\"emoji\":\"🏘️\",\"label\":\"houses\",\"tone\":0},{\"emoji\":\"🏚️\",\"label\":\"derelict house\",\"tone\":0},{\"emoji\":\"🏠️\",\"label\":\"house\",\"tone\":0},{\"emoji\":\"🏡\",\"label\":\"house with garden\",\"tone\":0},{\"emoji\":\"🏢\",\"label\":\"office building\",\"tone\":0},{\"emoji\":\"🏣\",\"label\":\"Japanese post office\",\"tone\":0},{\"emoji\":\"🏤\",\"label\":\"post office\",\"tone\":0},{\"emoji\":\"🏥\",\"label\":\"hospital\",\"tone\":0},{\"emoji\":\"🏦\",\"label\":\"bank\",\"tone\":0},{\"emoji\":\"🏨\",\"label\":\"hotel\",\"tone\":0},{\"emoji\":\"🏩\",\"label\":\"love hotel\",\"tone\":0},{\"emoji\":\"🏪\",\"label\":\"convenience store\",\"tone\":0},{\"emoji\":\"🏫\",\"label\":\"school\",\"tone\":0},{\"emoji\":\"🏬\",\"label\":\"department store\",\"tone\":0},{\"emoji\":\"🏭️\",\"label\":\"factory\",\"tone\":0},{\"emoji\":\"🏯\",\"label\":\"Japanese castle\",\"tone\":0},{\"emoji\":\"🏰\",\"label\":\"castle\",\"tone\":0},{\"emoji\":\"💒\",\"label\":\"wedding\",\"tone\":0},{\"emoji\":\"🗼\",\"label\":\"Tokyo tower\",\"tone\":0},{\"emoji\":\"🗽\",\"label\":\"Statue of Liberty\",\"tone\":0},{\"emoji\":\"⛪️\",\"label\":\"church\",\"tone\":0},{\"emoji\":\"🕌\",\"label\":\"mosque\",\"tone\":0},{\"emoji\":\"🛕\",\"label\":\"hindu temple\",\"tone\":0},{\"emoji\":\"🕍\",\"label\":\"synagogue\",\"tone\":0},{\"emoji\":\"⛩️\",\"label\":\"shinto shrine\",\"tone\":0},{\"emoji\":\"🕋\",\"label\":\"kaaba\",\"tone\":0},{\"emoji\":\"⛲️\",\"label\":\"fountain\",\"tone\":0},{\"emoji\":\"⛺️\",\"label\":\"tent\",\"tone\":0},{\"emoji\":\"🌁\",\"label\":\"foggy\",\"tone\":0},{\"emoji\":\"🌃\",\"label\":\"night with stars\",\"tone\":0},{\"emoji\":\"🏙️\",\"label\":\"cityscape\",\"tone\":0},{\"emoji\":\"🌄\",\"label\":\"sunrise over mountains\",\"tone\":0},{\"emoji\":\"🌅\",\"label\":\"sunrise\",\"tone\":0},{\"emoji\":\"🌆\",\"label\":\"cityscape at dusk\",\"tone\":0},{\"emoji\":\"🌇\",\"label\":\"sunset\",\"tone\":0},{\"emoji\":\"🌉\",\"label\":\"bridge at night\",\"tone\":0},{\"emoji\":\"♨️\",\"label\":\"hot springs\",\"tone\":0},{\"emoji\":\"🎠\",\"label\":\"carousel horse\",\"tone\":0},{\"emoji\":\"🎡\",\"label\":\"ferris wheel\",\"tone\":0},{\"emoji\":\"🎢\",\"label\":\"roller coaster\",\"tone\":0},{\"emoji\":\"💈\",\"label\":\"barber pole\",\"tone\":0},{\"emoji\":\"🎪\",\"label\":\"circus tent\",\"tone\":0},{\"emoji\":\"🚂\",\"label\":\"locomotive\",\"tone\":0},{\"emoji\":\"🚃\",\"label\":\"railway car\",\"tone\":0},{\"emoji\":\"🚄\",\"label\":\"high-speed train\",\"tone\":0},{\"emoji\":\"🚅\",\"label\":\"bullet train\",\"tone\":0},{\"emoji\":\"🚆\",\"label\":\"train\",\"tone\":0},{\"emoji\":\"🚇️\",\"label\":\"metro\",\"tone\":0},{\"emoji\":\"🚈\",\"label\":\"light rail\",\"tone\":0},{\"emoji\":\"🚉\",\"label\":\"station\",\"tone\":0},{\"emoji\":\"🚊\",\"label\":\"tram\",\"tone\":0},{\"emoji\":\"🚝\",\"label\":\"monorail\",\"tone\":0},{\"emoji\":\"🚞\",\"label\":\"mountain railway\",\"tone\":0},{\"emoji\":\"🚋\",\"label\":\"tram car\",\"tone\":0},{\"emoji\":\"🚌\",\"label\":\"bus\",\"tone\":0},{\"emoji\":\"🚍️\",\"label\":\"oncoming bus\",\"tone\":0},{\"emoji\":\"🚎\",\"label\":\"trolleybus\",\"tone\":0},{\"emoji\":\"🚐\",\"label\":\"minibus\",\"tone\":0},{\"emoji\":\"🚑️\",\"label\":\"ambulance\",\"tone\":0},{\"emoji\":\"🚒\",\"label\":\"fire engine\",\"tone\":0},{\"emoji\":\"🚓\",\"label\":\"police car\",\"tone\":0},{\"emoji\":\"🚔️\",\"label\":\"oncoming police car\",\"tone\":0},{\"emoji\":\"🚕\",\"label\":\"taxi\",\"tone\":0},{\"emoji\":\"🚖\",\"label\":\"oncoming taxi\",\"tone\":0},{\"emoji\":\"🚗\",\"label\":\"automobile\",\"tone\":0},{\"emoji\":\"🚘️\",\"label\":\"oncoming automobile\",\"tone\":0},{\"emoji\":\"🚙\",\"label\":\"sport utility vehicle\",\"tone\":0},{\"emoji\":\"🛻\",\"label\":\"pickup truck\",\"tone\":0},{\"emoji\":\"🚚\",\"label\":\"delivery truck\",\"tone\":0},{\"emoji\":\"🚛\",\"label\":\"articulated lorry\",\"tone\":0},{\"emoji\":\"🚜\",\"label\":\"tractor\",\"tone\":0},{\"emoji\":\"🏎️\",\"label\":\"racing car\",\"tone\":0},{\"emoji\":\"🏍️\",\"label\":\"motorcycle\",\"tone\":0},{\"emoji\":\"🛵\",\"label\":\"motor scooter\",\"tone\":0},{\"emoji\":\"🦽\",\"label\":\"manual wheelchair\",\"tone\":0},{\"emoji\":\"🦼\",\"label\":\"motorized wheelchair\",\"tone\":0},{\"emoji\":\"🛺\",\"label\":\"auto rickshaw\",\"tone\":0},{\"emoji\":\"🚲️\",\"label\":\"bicycle\",\"tone\":0},{\"emoji\":\"🛴\",\"label\":\"kick scooter\",\"tone\":0},{\"emoji\":\"🛹\",\"label\":\"skateboard\",\"tone\":0},{\"emoji\":\"🛼\",\"label\":\"roller skate\",\"tone\":0},{\"emoji\":\"🚏\",\"label\":\"bus stop\",\"tone\":0},{\"emoji\":\"🛣️\",\"label\":\"motorway\",\"tone\":0},{\"emoji\":\"🛤️\",\"label\":\"railway track\",\"tone\":0},{\"emoji\":\"🛢️\",\"label\":\"oil drum\",\"tone\":0},{\"emoji\":\"⛽️\",\"label\":\"fuel pump\",\"tone\":0},{\"emoji\":\"🚨\",\"label\":\"police car light\",\"tone\":0},{\"emoji\":\"🚥\",\"label\":\"horizontal traffic light\",\"tone\":0},{\"emoji\":\"🚦\",\"label\":\"vertical traffic light\",\"tone\":0},{\"emoji\":\"🛑\",\"label\":\"stop sign\",\"tone\":0},{\"emoji\":\"🚧\",\"label\":\"construction\",\"tone\":0},{\"emoji\":\"⚓️\",\"label\":\"anchor\",\"tone\":0},{\"emoji\":\"⛵️\",\"label\":\"sailboat\",\"tone\":0},{\"emoji\":\"🛶\",\"label\":\"canoe\",\"tone\":0},{\"emoji\":\"🚤\",\"label\":\"speedboat\",\"tone\":0},{\"emoji\":\"🛳️\",\"label\":\"passenger ship\",\"tone\":0},{\"emoji\":\"⛴️\",\"label\":\"ferry\",\"tone\":0},{\"emoji\":\"🛥️\",\"label\":\"motor boat\",\"tone\":0},{\"emoji\":\"🚢\",\"label\":\"ship\",\"tone\":0},{\"emoji\":\"✈️\",\"label\":\"airplane\",\"tone\":0},{\"emoji\":\"🛩️\",\"label\":\"small airplane\",\"tone\":0},{\"emoji\":\"🛫\",\"label\":\"airplane departure\",\"tone\":0},{\"emoji\":\"🛬\",\"label\":\"airplane arrival\",\"tone\":0},{\"emoji\":\"🪂\",\"label\":\"parachute\",\"tone\":0},{\"emoji\":\"💺\",\"label\":\"seat\",\"tone\":0},{\"emoji\":\"🚁\",\"label\":\"helicopter\",\"tone\":0},{\"emoji\":\"🚟\",\"label\":\"suspension railway\",\"tone\":0},{\"emoji\":\"🚠\",\"label\":\"mountain cableway\",\"tone\":0},{\"emoji\":\"🚡\",\"label\":\"aerial tramway\",\"tone\":0},{\"emoji\":\"🛰️\",\"label\":\"satellite\",\"tone\":0},{\"emoji\":\"🚀\",\"label\":\"rocket\",\"tone\":0},{\"emoji\":\"🛸\",\"label\":\"flying saucer\",\"tone\":0},{\"emoji\":\"🛎️\",\"label\":\"bellhop bell\",\"tone\":0},{\"emoji\":\"🧳\",\"label\":\"luggage\",\"tone\":0},{\"emoji\":\"⌛️\",\"label\":\"hourglass done\",\"tone\":0},{\"emoji\":\"⏳️\",\"label\":\"hourglass not done\",\"tone\":0},{\"emoji\":\"⌚️\",\"label\":\"watch\",\"tone\":0},{\"emoji\":\"⏰\",\"label\":\"alarm clock\",\"tone\":0},{\"emoji\":\"⏱️\",\"label\":\"stopwatch\",\"tone\":0},{\"emoji\":\"⏲️\",\"label\":\"timer clock\",\"tone\":0},{\"emoji\":\"🕰️\",\"label\":\"mantelpiece clock\",\"tone\":0},{\"emoji\":\"🕛️\",\"label\":\"twelve o’clock\",\"tone\":0},{\"emoji\":\"🕧️\",\"label\":\"twelve-thirty\",\"tone\":0},{\"emoji\":\"🕐️\",\"label\":\"one o’clock\",\"tone\":0},{\"emoji\":\"🕜️\",\"label\":\"one-thirty\",\"tone\":0},{\"emoji\":\"🕑️\",\"label\":\"two o’clock\",\"tone\":0},{\"emoji\":\"🕝️\",\"label\":\"two-thirty\",\"tone\":0},{\"emoji\":\"🕒️\",\"label\":\"three o’clock\",\"tone\":0},{\"emoji\":\"🕞️\",\"label\":\"three-thirty\",\"tone\":0},{\"emoji\":\"🕓️\",\"label\":\"four o’clock\",\"tone\":0},{\"emoji\":\"🕟️\",\"label\":\"four-thirty\",\"tone\":0},{\"emoji\":\"🕔️\",\"label\":\"five o’clock\",\"tone\":0},{\"emoji\":\"🕠️\",\"label\":\"five-thirty\",\"tone\":0},{\"emoji\":\"🕕️\",\"label\":\"six o’clock\",\"tone\":0},{\"emoji\":\"🕡️\",\"label\":\"six-thirty\",\"tone\":0},{\"emoji\":\"🕖️\",\"label\":\"seven o’clock\",\"tone\":0},{\"emoji\":\"🕢️\",\"label\":\"seven-thirty\",\"tone\":0},{\"emoji\":\"🕗️\",\"label\":\"eight o’clock\",\"tone\":0},{\"emoji\":\"🕣️\",\"label\":\"eight-thirty\",\"tone\":0},{\"emoji\":\"🕘️\",\"label\":\"nine o’clock\",\"tone\":0},{\"emoji\":\"🕤️\",\"label\":\"nine-thirty\",\"tone\":0},{\"emoji\":\"🕙️\",\"label\":\"ten o’clock\",\"tone\":0},{\"emoji\":\"🕥️\",\"label\":\"ten-thirty\",\"tone\":0},{\"emoji\":\"🕚️\",\"label\":\"eleven o’clock\",\"tone\":0},{\"emoji\":\"🕦️\",\"label\":\"eleven-thirty\",\"tone\":0},{\"emoji\":\"🌑\",\"label\":\"new moon\",\"tone\":0},{\"emoji\":\"🌒\",\"label\":\"waxing crescent moon\",\"tone\":0},{\"emoji\":\"🌓\",\"label\":\"first quarter moon\",\"tone\":0},{\"emoji\":\"🌔\",\"label\":\"waxing gibbous moon\",\"tone\":0},{\"emoji\":\"🌕️\",\"label\":\"full moon\",\"tone\":0},{\"emoji\":\"🌖\",\"label\":\"waning gibbous moon\",\"tone\":0},{\"emoji\":\"🌗\",\"label\":\"last quarter moon\",\"tone\":0},{\"emoji\":\"🌘\",\"label\":\"waning crescent moon\",\"tone\":0},{\"emoji\":\"🌙\",\"label\":\"crescent moon\",\"tone\":0},{\"emoji\":\"🌚\",\"label\":\"new moon face\",\"tone\":0},{\"emoji\":\"🌛\",\"label\":\"first quarter moon face\",\"tone\":0},{\"emoji\":\"🌜️\",\"label\":\"last quarter moon face\",\"tone\":0},{\"emoji\":\"🌡️\",\"label\":\"thermometer\",\"tone\":0},{\"emoji\":\"☀️\",\"label\":\"sun\",\"tone\":0},{\"emoji\":\"🌝\",\"label\":\"full moon face\",\"tone\":0},{\"emoji\":\"🌞\",\"label\":\"sun with face\",\"tone\":0},{\"emoji\":\"🪐\",\"label\":\"ringed planet\",\"tone\":0},{\"emoji\":\"⭐️\",\"label\":\"star\",\"tone\":0},{\"emoji\":\"🌟\",\"label\":\"glowing star\",\"tone\":0},{\"emoji\":\"🌠\",\"label\":\"shooting star\",\"tone\":0},{\"emoji\":\"🌌\",\"label\":\"milky way\",\"tone\":0},{\"emoji\":\"☁️\",\"label\":\"cloud\",\"tone\":0},{\"emoji\":\"⛅️\",\"label\":\"sun behind cloud\",\"tone\":0},{\"emoji\":\"⛈️\",\"label\":\"cloud with lightning and rain\",\"tone\":0},{\"emoji\":\"🌤️\",\"label\":\"sun behind small cloud\",\"tone\":0},{\"emoji\":\"🌥️\",\"label\":\"sun behind large cloud\",\"tone\":0},{\"emoji\":\"🌦️\",\"label\":\"sun behind rain cloud\",\"tone\":0},{\"emoji\":\"🌧️\",\"label\":\"cloud with rain\",\"tone\":0},{\"emoji\":\"🌨️\",\"label\":\"cloud with snow\",\"tone\":0},{\"emoji\":\"🌩️\",\"label\":\"cloud with lightning\",\"tone\":0},{\"emoji\":\"🌪️\",\"label\":\"tornado\",\"tone\":0},{\"emoji\":\"🌫️\",\"label\":\"fog\",\"tone\":0},{\"emoji\":\"🌬️\",\"label\":\"wind face\",\"tone\":0},{\"emoji\":\"🌀\",\"label\":\"cyclone\",\"tone\":0},{\"emoji\":\"🌈\",\"label\":\"rainbow\",\"tone\":0},{\"emoji\":\"🌂\",\"label\":\"closed umbrella\",\"tone\":0},{\"emoji\":\"☂️\",\"label\":\"umbrella\",\"tone\":0},{\"emoji\":\"☔️\",\"label\":\"umbrella with rain drops\",\"tone\":0},{\"emoji\":\"⛱️\",\"label\":\"umbrella on ground\",\"tone\":0},{\"emoji\":\"⚡️\",\"label\":\"high voltage\",\"tone\":0},{\"emoji\":\"❄️\",\"label\":\"snowflake\",\"tone\":0},{\"emoji\":\"☃️\",\"label\":\"snowman\",\"tone\":0},{\"emoji\":\"⛄️\",\"label\":\"snowman without snow\",\"tone\":0},{\"emoji\":\"☄️\",\"label\":\"comet\",\"tone\":0},{\"emoji\":\"🔥\",\"label\":\"fire\",\"tone\":0},{\"emoji\":\"💧\",\"label\":\"droplet\",\"tone\":0},{\"emoji\":\"🌊\",\"label\":\"water wave\",\"tone\":0}]},{\"name\":\"activities\",\"emojis\":[{\"emoji\":\"🎃\",\"label\":\"jack-o-lantern\",\"tone\":0},{\"emoji\":\"🎄\",\"label\":\"Christmas tree\",\"tone\":0},{\"emoji\":\"🎆\",\"label\":\"fireworks\",\"tone\":0},{\"emoji\":\"🎇\",\"label\":\"sparkler\",\"tone\":0},{\"emoji\":\"🧨\",\"label\":\"firecracker\",\"tone\":0},{\"emoji\":\"✨\",\"label\":\"sparkles\",\"tone\":0},{\"emoji\":\"🎈\",\"label\":\"balloon\",\"tone\":0},{\"emoji\":\"🎉\",\"label\":\"party popper\",\"tone\":0},{\"emoji\":\"🎊\",\"label\":\"confetti ball\",\"tone\":0},{\"emoji\":\"🎋\",\"label\":\"tanabata tree\",\"tone\":0},{\"emoji\":\"🎍\",\"label\":\"pine decoration\",\"tone\":0},{\"emoji\":\"🎎\",\"label\":\"Japanese dolls\",\"tone\":0},{\"emoji\":\"🎏\",\"label\":\"carp streamer\",\"tone\":0},{\"emoji\":\"🎐\",\"label\":\"wind chime\",\"tone\":0},{\"emoji\":\"🎑\",\"label\":\"moon viewing ceremony\",\"tone\":0},{\"emoji\":\"🧧\",\"label\":\"red envelope\",\"tone\":0},{\"emoji\":\"🎀\",\"label\":\"ribbon\",\"tone\":0},{\"emoji\":\"🎁\",\"label\":\"wrapped gift\",\"tone\":0},{\"emoji\":\"🎗️\",\"label\":\"reminder ribbon\",\"tone\":0},{\"emoji\":\"🎟️\",\"label\":\"admission tickets\",\"tone\":0},{\"emoji\":\"🎫\",\"label\":\"ticket\",\"tone\":0},{\"emoji\":\"🎖️\",\"label\":\"military medal\",\"tone\":0},{\"emoji\":\"🏆️\",\"label\":\"trophy\",\"tone\":0},{\"emoji\":\"🏅\",\"label\":\"sports medal\",\"tone\":0},{\"emoji\":\"🥇\",\"label\":\"1st place medal\",\"tone\":0},{\"emoji\":\"🥈\",\"label\":\"2nd place medal\",\"tone\":0},{\"emoji\":\"🥉\",\"label\":\"3rd place medal\",\"tone\":0},{\"emoji\":\"⚽️\",\"label\":\"soccer ball\",\"tone\":0},{\"emoji\":\"⚾️\",\"label\":\"baseball\",\"tone\":0},{\"emoji\":\"🥎\",\"label\":\"softball\",\"tone\":0},{\"emoji\":\"🏀\",\"label\":\"basketball\",\"tone\":0},{\"emoji\":\"🏐\",\"label\":\"volleyball\",\"tone\":0},{\"emoji\":\"🏈\",\"label\":\"american football\",\"tone\":0},{\"emoji\":\"🏉\",\"label\":\"rugby football\",\"tone\":0},{\"emoji\":\"🎾\",\"label\":\"tennis\",\"tone\":0},{\"emoji\":\"🥏\",\"label\":\"flying disc\",\"tone\":0},{\"emoji\":\"🎳\",\"label\":\"bowling\",\"tone\":0},{\"emoji\":\"🏏\",\"label\":\"cricket game\",\"tone\":0},{\"emoji\":\"🏑\",\"label\":\"field hockey\",\"tone\":0},{\"emoji\":\"🏒\",\"label\":\"ice hockey\",\"tone\":0},{\"emoji\":\"🥍\",\"label\":\"lacrosse\",\"tone\":0},{\"emoji\":\"🏓\",\"label\":\"ping pong\",\"tone\":0},{\"emoji\":\"🏸\",\"label\":\"badminton\",\"tone\":0},{\"emoji\":\"🥊\",\"label\":\"boxing glove\",\"tone\":0},{\"emoji\":\"🥋\",\"label\":\"martial arts uniform\",\"tone\":0},{\"emoji\":\"🥅\",\"label\":\"goal net\",\"tone\":0},{\"emoji\":\"⛳️\",\"label\":\"flag in hole\",\"tone\":0},{\"emoji\":\"⛸️\",\"label\":\"ice skate\",\"tone\":0},{\"emoji\":\"🎣\",\"label\":\"fishing pole\",\"tone\":0},{\"emoji\":\"🤿\",\"label\":\"diving mask\",\"tone\":0},{\"emoji\":\"🎽\",\"label\":\"running shirt\",\"tone\":0},{\"emoji\":\"🎿\",\"label\":\"skis\",\"tone\":0},{\"emoji\":\"🛷\",\"label\":\"sled\",\"tone\":0},{\"emoji\":\"🥌\",\"label\":\"curling stone\",\"tone\":0},{\"emoji\":\"🎯\",\"label\":\"bullseye\",\"tone\":0},{\"emoji\":\"🪀\",\"label\":\"yo-yo\",\"tone\":0},{\"emoji\":\"🪁\",\"label\":\"kite\",\"tone\":0},{\"emoji\":\"🎱\",\"label\":\"pool 8 ball\",\"tone\":0},{\"emoji\":\"🔮\",\"label\":\"crystal ball\",\"tone\":0},{\"emoji\":\"🪄\",\"label\":\"magic wand\",\"tone\":0},{\"emoji\":\"🧿\",\"label\":\"nazar amulet\",\"tone\":0},{\"emoji\":\"🎮️\",\"label\":\"video game\",\"tone\":0},{\"emoji\":\"🕹️\",\"label\":\"joystick\",\"tone\":0},{\"emoji\":\"🎰\",\"label\":\"slot machine\",\"tone\":0},{\"emoji\":\"🎲\",\"label\":\"game die\",\"tone\":0},{\"emoji\":\"🧩\",\"label\":\"puzzle piece\",\"tone\":0},{\"emoji\":\"🧸\",\"label\":\"teddy bear\",\"tone\":0},{\"emoji\":\"🪅\",\"label\":\"piñata\",\"tone\":0},{\"emoji\":\"🪆\",\"label\":\"nesting dolls\",\"tone\":0},{\"emoji\":\"♠️\",\"label\":\"spade suit\",\"tone\":0},{\"emoji\":\"♥️\",\"label\":\"heart suit\",\"tone\":0},{\"emoji\":\"♦️\",\"label\":\"diamond suit\",\"tone\":0},{\"emoji\":\"♣️\",\"label\":\"club suit\",\"tone\":0},{\"emoji\":\"♟️\",\"label\":\"chess pawn\",\"tone\":0},{\"emoji\":\"🃏\",\"label\":\"joker\",\"tone\":0},{\"emoji\":\"🀄️\",\"label\":\"mahjong red dragon\",\"tone\":0},{\"emoji\":\"🎴\",\"label\":\"flower playing cards\",\"tone\":0},{\"emoji\":\"🎭️\",\"label\":\"performing arts\",\"tone\":0},{\"emoji\":\"🖼️\",\"label\":\"framed picture\",\"tone\":0},{\"emoji\":\"🎨\",\"label\":\"artist palette\",\"tone\":0},{\"emoji\":\"🧵\",\"label\":\"thread\",\"tone\":0},{\"emoji\":\"🪡\",\"label\":\"sewing needle\",\"tone\":0},{\"emoji\":\"🧶\",\"label\":\"yarn\",\"tone\":0},{\"emoji\":\"🪢\",\"label\":\"knot\",\"tone\":0}]},{\"name\":\"objects\",\"emojis\":[{\"emoji\":\"👓️\",\"label\":\"glasses\",\"tone\":0},{\"emoji\":\"🕶️\",\"label\":\"sunglasses\",\"tone\":0},{\"emoji\":\"🥽\",\"label\":\"goggles\",\"tone\":0},{\"emoji\":\"🥼\",\"label\":\"lab coat\",\"tone\":0},{\"emoji\":\"🦺\",\"label\":\"safety vest\",\"tone\":0},{\"emoji\":\"👔\",\"label\":\"necktie\",\"tone\":0},{\"emoji\":\"👕\",\"label\":\"t-shirt\",\"tone\":0},{\"emoji\":\"👖\",\"label\":\"jeans\",\"tone\":0},{\"emoji\":\"🧣\",\"label\":\"scarf\",\"tone\":0},{\"emoji\":\"🧤\",\"label\":\"gloves\",\"tone\":0},{\"emoji\":\"🧥\",\"label\":\"coat\",\"tone\":0},{\"emoji\":\"🧦\",\"label\":\"socks\",\"tone\":0},{\"emoji\":\"👗\",\"label\":\"dress\",\"tone\":0},{\"emoji\":\"👘\",\"label\":\"kimono\",\"tone\":0},{\"emoji\":\"🥻\",\"label\":\"sari\",\"tone\":0},{\"emoji\":\"🩱\",\"label\":\"one-piece swimsuit\",\"tone\":0},{\"emoji\":\"🩲\",\"label\":\"briefs\",\"tone\":0},{\"emoji\":\"🩳\",\"label\":\"shorts\",\"tone\":0},{\"emoji\":\"👙\",\"label\":\"bikini\",\"tone\":0},{\"emoji\":\"👚\",\"label\":\"woman’s clothes\",\"tone\":0},{\"emoji\":\"👛\",\"label\":\"purse\",\"tone\":0},{\"emoji\":\"👜\",\"label\":\"handbag\",\"tone\":0},{\"emoji\":\"👝\",\"label\":\"clutch bag\",\"tone\":0},{\"emoji\":\"🛍️\",\"label\":\"shopping bags\",\"tone\":0},{\"emoji\":\"🎒\",\"label\":\"backpack\",\"tone\":0},{\"emoji\":\"🩴\",\"label\":\"thong sandal\",\"tone\":0},{\"emoji\":\"👞\",\"label\":\"man’s shoe\",\"tone\":0},{\"emoji\":\"👟\",\"label\":\"running shoe\",\"tone\":0},{\"emoji\":\"🥾\",\"label\":\"hiking boot\",\"tone\":0},{\"emoji\":\"🥿\",\"label\":\"flat shoe\",\"tone\":0},{\"emoji\":\"👠\",\"label\":\"high-heeled shoe\",\"tone\":0},{\"emoji\":\"👡\",\"label\":\"woman’s sandal\",\"tone\":0},{\"emoji\":\"🩰\",\"label\":\"ballet shoes\",\"tone\":0},{\"emoji\":\"👢\",\"label\":\"woman’s boot\",\"tone\":0},{\"emoji\":\"👑\",\"label\":\"crown\",\"tone\":0},{\"emoji\":\"👒\",\"label\":\"woman’s hat\",\"tone\":0},{\"emoji\":\"🎩\",\"label\":\"top hat\",\"tone\":0},{\"emoji\":\"🎓️\",\"label\":\"graduation cap\",\"tone\":0},{\"emoji\":\"🧢\",\"label\":\"billed cap\",\"tone\":0},{\"emoji\":\"🪖\",\"label\":\"military helmet\",\"tone\":0},{\"emoji\":\"⛑️\",\"label\":\"rescue worker’s helmet\",\"tone\":0},{\"emoji\":\"📿\",\"label\":\"prayer beads\",\"tone\":0},{\"emoji\":\"💄\",\"label\":\"lipstick\",\"tone\":0},{\"emoji\":\"💍\",\"label\":\"ring\",\"tone\":0},{\"emoji\":\"💎\",\"label\":\"gem stone\",\"tone\":0},{\"emoji\":\"🔇\",\"label\":\"muted speaker\",\"tone\":0},{\"emoji\":\"🔈️\",\"label\":\"speaker low volume\",\"tone\":0},{\"emoji\":\"🔉\",\"label\":\"speaker medium volume\",\"tone\":0},{\"emoji\":\"🔊\",\"label\":\"speaker high volume\",\"tone\":0},{\"emoji\":\"📢\",\"label\":\"loudspeaker\",\"tone\":0},{\"emoji\":\"📣\",\"label\":\"megaphone\",\"tone\":0},{\"emoji\":\"📯\",\"label\":\"postal horn\",\"tone\":0},{\"emoji\":\"🔔\",\"label\":\"bell\",\"tone\":0},{\"emoji\":\"🔕\",\"label\":\"bell with slash\",\"tone\":0},{\"emoji\":\"🎼\",\"label\":\"musical score\",\"tone\":0},{\"emoji\":\"🎵\",\"label\":\"musical note\",\"tone\":0},{\"emoji\":\"🎶\",\"label\":\"musical notes\",\"tone\":0},{\"emoji\":\"🎙️\",\"label\":\"studio microphone\",\"tone\":0},{\"emoji\":\"🎚️\",\"label\":\"level slider\",\"tone\":0},{\"emoji\":\"🎛️\",\"label\":\"control knobs\",\"tone\":0},{\"emoji\":\"🎤\",\"label\":\"microphone\",\"tone\":0},{\"emoji\":\"🎧️\",\"label\":\"headphone\",\"tone\":0},{\"emoji\":\"📻️\",\"label\":\"radio\",\"tone\":0},{\"emoji\":\"🎷\",\"label\":\"saxophone\",\"tone\":0},{\"emoji\":\"🪗\",\"label\":\"accordion\",\"tone\":0},{\"emoji\":\"🎸\",\"label\":\"guitar\",\"tone\":0},{\"emoji\":\"🎹\",\"label\":\"musical keyboard\",\"tone\":0},{\"emoji\":\"🎺\",\"label\":\"trumpet\",\"tone\":0},{\"emoji\":\"🎻\",\"label\":\"violin\",\"tone\":0},{\"emoji\":\"🪕\",\"label\":\"banjo\",\"tone\":0},{\"emoji\":\"🥁\",\"label\":\"drum\",\"tone\":0},{\"emoji\":\"🪘\",\"label\":\"long drum\",\"tone\":0},{\"emoji\":\"📱\",\"label\":\"mobile phone\",\"tone\":0},{\"emoji\":\"📲\",\"label\":\"mobile phone with arrow\",\"tone\":0},{\"emoji\":\"☎️\",\"label\":\"telephone\",\"tone\":0},{\"emoji\":\"📞\",\"label\":\"telephone receiver\",\"tone\":0},{\"emoji\":\"📟️\",\"label\":\"pager\",\"tone\":0},{\"emoji\":\"📠\",\"label\":\"fax machine\",\"tone\":0},{\"emoji\":\"🔋\",\"label\":\"battery\",\"tone\":0},{\"emoji\":\"🔌\",\"label\":\"electric plug\",\"tone\":0},{\"emoji\":\"💻️\",\"label\":\"laptop\",\"tone\":0},{\"emoji\":\"🖥️\",\"label\":\"desktop computer\",\"tone\":0},{\"emoji\":\"🖨️\",\"label\":\"printer\",\"tone\":0},{\"emoji\":\"⌨️\",\"label\":\"keyboard\",\"tone\":0},{\"emoji\":\"🖱️\",\"label\":\"computer mouse\",\"tone\":0},{\"emoji\":\"🖲️\",\"label\":\"trackball\",\"tone\":0},{\"emoji\":\"💽\",\"label\":\"computer disk\",\"tone\":0},{\"emoji\":\"💾\",\"label\":\"floppy disk\",\"tone\":0},{\"emoji\":\"💿️\",\"label\":\"optical disk\",\"tone\":0},{\"emoji\":\"📀\",\"label\":\"dvd\",\"tone\":0},{\"emoji\":\"🧮\",\"label\":\"abacus\",\"tone\":0},{\"emoji\":\"🎥\",\"label\":\"movie camera\",\"tone\":0},{\"emoji\":\"🎞️\",\"label\":\"film frames\",\"tone\":0},{\"emoji\":\"📽️\",\"label\":\"film projector\",\"tone\":0},{\"emoji\":\"🎬️\",\"label\":\"clapper board\",\"tone\":0},{\"emoji\":\"📺️\",\"label\":\"television\",\"tone\":0},{\"emoji\":\"📷️\",\"label\":\"camera\",\"tone\":0},{\"emoji\":\"📸\",\"label\":\"camera with flash\",\"tone\":0},{\"emoji\":\"📹️\",\"label\":\"video camera\",\"tone\":0},{\"emoji\":\"📼\",\"label\":\"videocassette\",\"tone\":0},{\"emoji\":\"🔍️\",\"label\":\"magnifying glass tilted left\",\"tone\":0},{\"emoji\":\"🔎\",\"label\":\"magnifying glass tilted right\",\"tone\":0},{\"emoji\":\"🕯️\",\"label\":\"candle\",\"tone\":0},{\"emoji\":\"💡\",\"label\":\"light bulb\",\"tone\":0},{\"emoji\":\"🔦\",\"label\":\"flashlight\",\"tone\":0},{\"emoji\":\"🏮\",\"label\":\"red paper lantern\",\"tone\":0},{\"emoji\":\"🪔\",\"label\":\"diya lamp\",\"tone\":0},{\"emoji\":\"📔\",\"label\":\"notebook with decorative cover\",\"tone\":0},{\"emoji\":\"📕\",\"label\":\"closed book\",\"tone\":0},{\"emoji\":\"📖\",\"label\":\"open book\",\"tone\":0},{\"emoji\":\"📗\",\"label\":\"green book\",\"tone\":0},{\"emoji\":\"📘\",\"label\":\"blue book\",\"tone\":0},{\"emoji\":\"📙\",\"label\":\"orange book\",\"tone\":0},{\"emoji\":\"📚️\",\"label\":\"books\",\"tone\":0},{\"emoji\":\"📓\",\"label\":\"notebook\",\"tone\":0},{\"emoji\":\"📒\",\"label\":\"ledger\",\"tone\":0},{\"emoji\":\"📃\",\"label\":\"page with curl\",\"tone\":0},{\"emoji\":\"📜\",\"label\":\"scroll\",\"tone\":0},{\"emoji\":\"📄\",\"label\":\"page facing up\",\"tone\":0},{\"emoji\":\"📰\",\"label\":\"newspaper\",\"tone\":0},{\"emoji\":\"🗞️\",\"label\":\"rolled-up newspaper\",\"tone\":0},{\"emoji\":\"📑\",\"label\":\"bookmark tabs\",\"tone\":0},{\"emoji\":\"🔖\",\"label\":\"bookmark\",\"tone\":0},{\"emoji\":\"🏷️\",\"label\":\"label\",\"tone\":0},{\"emoji\":\"💰️\",\"label\":\"money bag\",\"tone\":0},{\"emoji\":\"🪙\",\"label\":\"coin\",\"tone\":0},{\"emoji\":\"💴\",\"label\":\"yen banknote\",\"tone\":0},{\"emoji\":\"💵\",\"label\":\"dollar banknote\",\"tone\":0},{\"emoji\":\"💶\",\"label\":\"euro banknote\",\"tone\":0},{\"emoji\":\"💷\",\"label\":\"pound banknote\",\"tone\":0},{\"emoji\":\"💸\",\"label\":\"money with wings\",\"tone\":0},{\"emoji\":\"💳️\",\"label\":\"credit card\",\"tone\":0},{\"emoji\":\"🧾\",\"label\":\"receipt\",\"tone\":0},{\"emoji\":\"💹\",\"label\":\"chart increasing with yen\",\"tone\":0},{\"emoji\":\"✉️\",\"label\":\"envelope\",\"tone\":0},{\"emoji\":\"📧\",\"label\":\"e-mail\",\"tone\":0},{\"emoji\":\"📨\",\"label\":\"incoming envelope\",\"tone\":0},{\"emoji\":\"📩\",\"label\":\"envelope with arrow\",\"tone\":0},{\"emoji\":\"📤️\",\"label\":\"outbox tray\",\"tone\":0},{\"emoji\":\"📥️\",\"label\":\"inbox tray\",\"tone\":0},{\"emoji\":\"📦️\",\"label\":\"package\",\"tone\":0},{\"emoji\":\"📫️\",\"label\":\"closed mailbox with raised flag\",\"tone\":0},{\"emoji\":\"📪️\",\"label\":\"closed mailbox with lowered flag\",\"tone\":0},{\"emoji\":\"📬️\",\"label\":\"open mailbox with raised flag\",\"tone\":0},{\"emoji\":\"📭️\",\"label\":\"open mailbox with lowered flag\",\"tone\":0},{\"emoji\":\"📮\",\"label\":\"postbox\",\"tone\":0},{\"emoji\":\"🗳️\",\"label\":\"ballot box with ballot\",\"tone\":0},{\"emoji\":\"✏️\",\"label\":\"pencil\",\"tone\":0},{\"emoji\":\"✒️\",\"label\":\"black nib\",\"tone\":0},{\"emoji\":\"🖋️\",\"label\":\"fountain pen\",\"tone\":0},{\"emoji\":\"🖊️\",\"label\":\"pen\",\"tone\":0},{\"emoji\":\"🖌️\",\"label\":\"paintbrush\",\"tone\":0},{\"emoji\":\"🖍️\",\"label\":\"crayon\",\"tone\":0},{\"emoji\":\"📝\",\"label\":\"memo\",\"tone\":0},{\"emoji\":\"💼\",\"label\":\"briefcase\",\"tone\":0},{\"emoji\":\"📁\",\"label\":\"file folder\",\"tone\":0},{\"emoji\":\"📂\",\"label\":\"open file folder\",\"tone\":0},{\"emoji\":\"🗂️\",\"label\":\"card index dividers\",\"tone\":0},{\"emoji\":\"📅\",\"label\":\"calendar\",\"tone\":0},{\"emoji\":\"📆\",\"label\":\"tear-off calendar\",\"tone\":0},{\"emoji\":\"🗒️\",\"label\":\"spiral notepad\",\"tone\":0},{\"emoji\":\"🗓️\",\"label\":\"spiral calendar\",\"tone\":0},{\"emoji\":\"📇\",\"label\":\"card index\",\"tone\":0},{\"emoji\":\"📈\",\"label\":\"chart increasing\",\"tone\":0},{\"emoji\":\"📉\",\"label\":\"chart decreasing\",\"tone\":0},{\"emoji\":\"📊\",\"label\":\"bar chart\",\"tone\":0},{\"emoji\":\"📋️\",\"label\":\"clipboard\",\"tone\":0},{\"emoji\":\"📌\",\"label\":\"pushpin\",\"tone\":0},{\"emoji\":\"📍\",\"label\":\"round pushpin\",\"tone\":0},{\"emoji\":\"📎\",\"label\":\"paperclip\",\"tone\":0},{\"emoji\":\"🖇️\",\"label\":\"linked paperclips\",\"tone\":0},{\"emoji\":\"📏\",\"label\":\"straight ruler\",\"tone\":0},{\"emoji\":\"📐\",\"label\":\"triangular ruler\",\"tone\":0},{\"emoji\":\"✂️\",\"label\":\"scissors\",\"tone\":0},{\"emoji\":\"🗃️\",\"label\":\"card file box\",\"tone\":0},{\"emoji\":\"🗄️\",\"label\":\"file cabinet\",\"tone\":0},{\"emoji\":\"🗑️\",\"label\":\"wastebasket\",\"tone\":0},{\"emoji\":\"🔒️\",\"label\":\"locked\",\"tone\":0},{\"emoji\":\"🔓️\",\"label\":\"unlocked\",\"tone\":0},{\"emoji\":\"🔏\",\"label\":\"locked with pen\",\"tone\":0},{\"emoji\":\"🔐\",\"label\":\"locked with key\",\"tone\":0},{\"emoji\":\"🔑\",\"label\":\"key\",\"tone\":0},{\"emoji\":\"🗝️\",\"label\":\"old key\",\"tone\":0},{\"emoji\":\"🔨\",\"label\":\"hammer\",\"tone\":0},{\"emoji\":\"🪓\",\"label\":\"axe\",\"tone\":0},{\"emoji\":\"⛏️\",\"label\":\"pick\",\"tone\":0},{\"emoji\":\"⚒️\",\"label\":\"hammer and pick\",\"tone\":0},{\"emoji\":\"🛠️\",\"label\":\"hammer and wrench\",\"tone\":0},{\"emoji\":\"🗡️\",\"label\":\"dagger\",\"tone\":0},{\"emoji\":\"⚔️\",\"label\":\"crossed swords\",\"tone\":0},{\"emoji\":\"🔫\",\"label\":\"water pistol\",\"tone\":0},{\"emoji\":\"🪃\",\"label\":\"boomerang\",\"tone\":0},{\"emoji\":\"🏹\",\"label\":\"bow and arrow\",\"tone\":0},{\"emoji\":\"🛡️\",\"label\":\"shield\",\"tone\":0},{\"emoji\":\"🪚\",\"label\":\"carpentry saw\",\"tone\":0},{\"emoji\":\"🔧\",\"label\":\"wrench\",\"tone\":0},{\"emoji\":\"🪛\",\"label\":\"screwdriver\",\"tone\":0},{\"emoji\":\"🔩\",\"label\":\"nut and bolt\",\"tone\":0},{\"emoji\":\"⚙️\",\"label\":\"gear\",\"tone\":0},{\"emoji\":\"🗜️\",\"label\":\"clamp\",\"tone\":0},{\"emoji\":\"⚖️\",\"label\":\"balance scale\",\"tone\":0},{\"emoji\":\"🦯\",\"label\":\"white cane\",\"tone\":0},{\"emoji\":\"🔗\",\"label\":\"link\",\"tone\":0},{\"emoji\":\"⛓️\",\"label\":\"chains\",\"tone\":0},{\"emoji\":\"🪝\",\"label\":\"hook\",\"tone\":0},{\"emoji\":\"🧰\",\"label\":\"toolbox\",\"tone\":0},{\"emoji\":\"🧲\",\"label\":\"magnet\",\"tone\":0},{\"emoji\":\"🪜\",\"label\":\"ladder\",\"tone\":0},{\"emoji\":\"⚗️\",\"label\":\"alembic\",\"tone\":0},{\"emoji\":\"🧪\",\"label\":\"test tube\",\"tone\":0},{\"emoji\":\"🧫\",\"label\":\"petri dish\",\"tone\":0},{\"emoji\":\"🧬\",\"label\":\"dna\",\"tone\":0},{\"emoji\":\"🔬\",\"label\":\"microscope\",\"tone\":0},{\"emoji\":\"🔭\",\"label\":\"telescope\",\"tone\":0},{\"emoji\":\"📡\",\"label\":\"satellite antenna\",\"tone\":0},{\"emoji\":\"💉\",\"label\":\"syringe\",\"tone\":0},{\"emoji\":\"🩸\",\"label\":\"drop of blood\",\"tone\":0},{\"emoji\":\"💊\",\"label\":\"pill\",\"tone\":0},{\"emoji\":\"🩹\",\"label\":\"adhesive bandage\",\"tone\":0},{\"emoji\":\"🩺\",\"label\":\"stethoscope\",\"tone\":0},{\"emoji\":\"🚪\",\"label\":\"door\",\"tone\":0},{\"emoji\":\"🛗\",\"label\":\"elevator\",\"tone\":0},{\"emoji\":\"🪞\",\"label\":\"mirror\",\"tone\":0},{\"emoji\":\"🪟\",\"label\":\"window\",\"tone\":0},{\"emoji\":\"🛏️\",\"label\":\"bed\",\"tone\":0},{\"emoji\":\"🛋️\",\"label\":\"couch and lamp\",\"tone\":0},{\"emoji\":\"🪑\",\"label\":\"chair\",\"tone\":0},{\"emoji\":\"🚽\",\"label\":\"toilet\",\"tone\":0},{\"emoji\":\"🪠\",\"label\":\"plunger\",\"tone\":0},{\"emoji\":\"🚿\",\"label\":\"shower\",\"tone\":0},{\"emoji\":\"🛁\",\"label\":\"bathtub\",\"tone\":0},{\"emoji\":\"🪤\",\"label\":\"mouse trap\",\"tone\":0},{\"emoji\":\"🪒\",\"label\":\"razor\",\"tone\":0},{\"emoji\":\"🧴\",\"label\":\"lotion bottle\",\"tone\":0},{\"emoji\":\"🧷\",\"label\":\"safety pin\",\"tone\":0},{\"emoji\":\"🧹\",\"label\":\"broom\",\"tone\":0},{\"emoji\":\"🧺\",\"label\":\"basket\",\"tone\":0},{\"emoji\":\"🧻\",\"label\":\"roll of paper\",\"tone\":0},{\"emoji\":\"🪣\",\"label\":\"bucket\",\"tone\":0},{\"emoji\":\"🧼\",\"label\":\"soap\",\"tone\":0},{\"emoji\":\"🪥\",\"label\":\"toothbrush\",\"tone\":0},{\"emoji\":\"🧽\",\"label\":\"sponge\",\"tone\":0},{\"emoji\":\"🧯\",\"label\":\"fire extinguisher\",\"tone\":0},{\"emoji\":\"🛒\",\"label\":\"shopping cart\",\"tone\":0},{\"emoji\":\"🚬\",\"label\":\"cigarette\",\"tone\":0},{\"emoji\":\"⚰️\",\"label\":\"coffin\",\"tone\":0},{\"emoji\":\"🪦\",\"label\":\"headstone\",\"tone\":0},{\"emoji\":\"⚱️\",\"label\":\"funeral urn\",\"tone\":0},{\"emoji\":\"🗿\",\"label\":\"moai\",\"tone\":0},{\"emoji\":\"🪧\",\"label\":\"placard\",\"tone\":0}]},{\"name\":\"symbols\",\"emojis\":[{\"emoji\":\"🏧\",\"label\":\"ATM sign\",\"tone\":0},{\"emoji\":\"🚮\",\"label\":\"litter in bin sign\",\"tone\":0},{\"emoji\":\"🚰\",\"label\":\"potable water\",\"tone\":0},{\"emoji\":\"♿️\",\"label\":\"wheelchair symbol\",\"tone\":0},{\"emoji\":\"🚹️\",\"label\":\"men’s room\",\"tone\":0},{\"emoji\":\"🚺️\",\"label\":\"women’s room\",\"tone\":0},{\"emoji\":\"🚻\",\"label\":\"restroom\",\"tone\":0},{\"emoji\":\"🚼️\",\"label\":\"baby symbol\",\"tone\":0},{\"emoji\":\"🚾\",\"label\":\"water closet\",\"tone\":0},{\"emoji\":\"🛂\",\"label\":\"passport control\",\"tone\":0},{\"emoji\":\"🛃\",\"label\":\"customs\",\"tone\":0},{\"emoji\":\"🛄\",\"label\":\"baggage claim\",\"tone\":0},{\"emoji\":\"🛅\",\"label\":\"left luggage\",\"tone\":0},{\"emoji\":\"⚠️\",\"label\":\"warning\",\"tone\":0},{\"emoji\":\"🚸\",\"label\":\"children crossing\",\"tone\":0},{\"emoji\":\"⛔️\",\"label\":\"no entry\",\"tone\":0},{\"emoji\":\"🚫\",\"label\":\"prohibited\",\"tone\":0},{\"emoji\":\"🚳\",\"label\":\"no bicycles\",\"tone\":0},{\"emoji\":\"🚭️\",\"label\":\"no smoking\",\"tone\":0},{\"emoji\":\"🚯\",\"label\":\"no littering\",\"tone\":0},{\"emoji\":\"🚱\",\"label\":\"non-potable water\",\"tone\":0},{\"emoji\":\"🚷\",\"label\":\"no pedestrians\",\"tone\":0},{\"emoji\":\"📵\",\"label\":\"no mobile phones\",\"tone\":0},{\"emoji\":\"🔞\",\"label\":\"no one under eighteen\",\"tone\":0},{\"emoji\":\"☢️\",\"label\":\"radioactive\",\"tone\":0},{\"emoji\":\"☣️\",\"label\":\"biohazard\",\"tone\":0},{\"emoji\":\"⬆️\",\"label\":\"up arrow\",\"tone\":0},{\"emoji\":\"↗️\",\"label\":\"up-right arrow\",\"tone\":0},{\"emoji\":\"➡️\",\"label\":\"right arrow\",\"tone\":0},{\"emoji\":\"↘️\",\"label\":\"down-right arrow\",\"tone\":0},{\"emoji\":\"⬇️\",\"label\":\"down arrow\",\"tone\":0},{\"emoji\":\"↙️\",\"label\":\"down-left arrow\",\"tone\":0},{\"emoji\":\"⬅️\",\"label\":\"left arrow\",\"tone\":0},{\"emoji\":\"↖️\",\"label\":\"up-left arrow\",\"tone\":0},{\"emoji\":\"↕️\",\"label\":\"up-down arrow\",\"tone\":0},{\"emoji\":\"↔️\",\"label\":\"left-right arrow\",\"tone\":0},{\"emoji\":\"↩️\",\"label\":\"right arrow curving left\",\"tone\":0},{\"emoji\":\"↪️\",\"label\":\"left arrow curving right\",\"tone\":0},{\"emoji\":\"⤴️\",\"label\":\"right arrow curving up\",\"tone\":0},{\"emoji\":\"⤵️\",\"label\":\"right arrow curving down\",\"tone\":0},{\"emoji\":\"🔃\",\"label\":\"clockwise vertical arrows\",\"tone\":0},{\"emoji\":\"🔄\",\"label\":\"counterclockwise arrows button\",\"tone\":0},{\"emoji\":\"🔙\",\"label\":\"BACK arrow\",\"tone\":0},{\"emoji\":\"🔚\",\"label\":\"END arrow\",\"tone\":0},{\"emoji\":\"🔛\",\"label\":\"ON! arrow\",\"tone\":0},{\"emoji\":\"🔜\",\"label\":\"SOON arrow\",\"tone\":0},{\"emoji\":\"🔝\",\"label\":\"TOP arrow\",\"tone\":0},{\"emoji\":\"🛐\",\"label\":\"place of worship\",\"tone\":0},{\"emoji\":\"⚛️\",\"label\":\"atom symbol\",\"tone\":0},{\"emoji\":\"🕉️\",\"label\":\"om\",\"tone\":0},{\"emoji\":\"✡️\",\"label\":\"star of David\",\"tone\":0},{\"emoji\":\"☸️\",\"label\":\"wheel of dharma\",\"tone\":0},{\"emoji\":\"☯️\",\"label\":\"yin yang\",\"tone\":0},{\"emoji\":\"✝️\",\"label\":\"latin cross\",\"tone\":0},{\"emoji\":\"☦️\",\"label\":\"orthodox cross\",\"tone\":0},{\"emoji\":\"☪️\",\"label\":\"star and crescent\",\"tone\":0},{\"emoji\":\"☮️\",\"label\":\"peace symbol\",\"tone\":0},{\"emoji\":\"🕎\",\"label\":\"menorah\",\"tone\":0},{\"emoji\":\"🔯\",\"label\":\"dotted six-pointed star\",\"tone\":0},{\"emoji\":\"♈️\",\"label\":\"Aries\",\"tone\":0},{\"emoji\":\"♉️\",\"label\":\"Taurus\",\"tone\":0},{\"emoji\":\"♊️\",\"label\":\"Gemini\",\"tone\":0},{\"emoji\":\"♋️\",\"label\":\"Cancer\",\"tone\":0},{\"emoji\":\"♌️\",\"label\":\"Leo\",\"tone\":0},{\"emoji\":\"♍️\",\"label\":\"Virgo\",\"tone\":0},{\"emoji\":\"♎️\",\"label\":\"Libra\",\"tone\":0},{\"emoji\":\"♏️\",\"label\":\"Scorpio\",\"tone\":0},{\"emoji\":\"♐️\",\"label\":\"Sagittarius\",\"tone\":0},{\"emoji\":\"♑️\",\"label\":\"Capricorn\",\"tone\":0},{\"emoji\":\"♒️\",\"label\":\"Aquarius\",\"tone\":0},{\"emoji\":\"♓️\",\"label\":\"Pisces\",\"tone\":0},{\"emoji\":\"⛎\",\"label\":\"Ophiuchus\",\"tone\":0},{\"emoji\":\"🔀\",\"label\":\"shuffle tracks button\",\"tone\":0},{\"emoji\":\"🔁\",\"label\":\"repeat button\",\"tone\":0},{\"emoji\":\"🔂\",\"label\":\"repeat single button\",\"tone\":0},{\"emoji\":\"▶️\",\"label\":\"play button\",\"tone\":0},{\"emoji\":\"⏩️\",\"label\":\"fast-forward button\",\"tone\":0},{\"emoji\":\"⏭️\",\"label\":\"next track button\",\"tone\":0},{\"emoji\":\"⏯️\",\"label\":\"play or pause button\",\"tone\":0},{\"emoji\":\"◀️\",\"label\":\"reverse button\",\"tone\":0},{\"emoji\":\"⏪️\",\"label\":\"fast reverse button\",\"tone\":0},{\"emoji\":\"⏮️\",\"label\":\"last track button\",\"tone\":0},{\"emoji\":\"🔼\",\"label\":\"upwards button\",\"tone\":0},{\"emoji\":\"⏫\",\"label\":\"fast up button\",\"tone\":0},{\"emoji\":\"🔽\",\"label\":\"downwards button\",\"tone\":0},{\"emoji\":\"⏬\",\"label\":\"fast down button\",\"tone\":0},{\"emoji\":\"⏸️\",\"label\":\"pause button\",\"tone\":0},{\"emoji\":\"⏹️\",\"label\":\"stop button\",\"tone\":0},{\"emoji\":\"⏺️\",\"label\":\"record button\",\"tone\":0},{\"emoji\":\"⏏️\",\"label\":\"eject button\",\"tone\":0},{\"emoji\":\"🎦\",\"label\":\"cinema\",\"tone\":0},{\"emoji\":\"🔅\",\"label\":\"dim button\",\"tone\":0},{\"emoji\":\"🔆\",\"label\":\"bright button\",\"tone\":0},{\"emoji\":\"📶\",\"label\":\"antenna bars\",\"tone\":0},{\"emoji\":\"📳\",\"label\":\"vibration mode\",\"tone\":0},{\"emoji\":\"📴\",\"label\":\"mobile phone off\",\"tone\":0},{\"emoji\":\"♀️\",\"label\":\"female sign\",\"tone\":0},{\"emoji\":\"♂️\",\"label\":\"male sign\",\"tone\":0},{\"emoji\":\"⚧️\",\"label\":\"transgender symbol\",\"tone\":0},{\"emoji\":\"✖️\",\"label\":\"multiply\",\"tone\":0},{\"emoji\":\"➕\",\"label\":\"plus\",\"tone\":0},{\"emoji\":\"➖\",\"label\":\"minus\",\"tone\":0},{\"emoji\":\"➗\",\"label\":\"divide\",\"tone\":0},{\"emoji\":\"♾️\",\"label\":\"infinity\",\"tone\":0},{\"emoji\":\"‼️\",\"label\":\"double exclamation mark\",\"tone\":0},{\"emoji\":\"⁉️\",\"label\":\"exclamation question mark\",\"tone\":0},{\"emoji\":\"❓️\",\"label\":\"red question mark\",\"tone\":0},{\"emoji\":\"❔\",\"label\":\"white question mark\",\"tone\":0},{\"emoji\":\"❕\",\"label\":\"white exclamation mark\",\"tone\":0},{\"emoji\":\"❗️\",\"label\":\"red exclamation mark\",\"tone\":0},{\"emoji\":\"〰️\",\"label\":\"wavy dash\",\"tone\":0},{\"emoji\":\"💱\",\"label\":\"currency exchange\",\"tone\":0},{\"emoji\":\"💲\",\"label\":\"heavy dollar sign\",\"tone\":0},{\"emoji\":\"⚕️\",\"label\":\"medical symbol\",\"tone\":0},{\"emoji\":\"♻️\",\"label\":\"recycling symbol\",\"tone\":0},{\"emoji\":\"⚜️\",\"label\":\"fleur-de-lis\",\"tone\":0},{\"emoji\":\"🔱\",\"label\":\"trident emblem\",\"tone\":0},{\"emoji\":\"📛\",\"label\":\"name badge\",\"tone\":0},{\"emoji\":\"🔰\",\"label\":\"Japanese symbol for beginner\",\"tone\":0},{\"emoji\":\"⭕️\",\"label\":\"hollow red circle\",\"tone\":0},{\"emoji\":\"✅\",\"label\":\"check mark button\",\"tone\":0},{\"emoji\":\"☑️\",\"label\":\"check box with check\",\"tone\":0},{\"emoji\":\"✔️\",\"label\":\"check mark\",\"tone\":0},{\"emoji\":\"❌\",\"label\":\"cross mark\",\"tone\":0},{\"emoji\":\"❎\",\"label\":\"cross mark button\",\"tone\":0},{\"emoji\":\"➰\",\"label\":\"curly loop\",\"tone\":0},{\"emoji\":\"➿\",\"label\":\"double curly loop\",\"tone\":0},{\"emoji\":\"〽️\",\"label\":\"part alternation mark\",\"tone\":0},{\"emoji\":\"✳️\",\"label\":\"eight-spoked asterisk\",\"tone\":0},{\"emoji\":\"✴️\",\"label\":\"eight-pointed star\",\"tone\":0},{\"emoji\":\"❇️\",\"label\":\"sparkle\",\"tone\":0},{\"emoji\":\"©️\",\"label\":\"copyright\",\"tone\":0},{\"emoji\":\"®️\",\"label\":\"registered\",\"tone\":0},{\"emoji\":\"™️\",\"label\":\"trade mark\",\"tone\":0},{\"emoji\":\"#️⃣\",\"label\":\"keycap: #\",\"tone\":0},{\"emoji\":\"*️⃣\",\"label\":\"keycap: *\",\"tone\":0},{\"emoji\":\"0️⃣\",\"label\":\"keycap: 0\",\"tone\":0},{\"emoji\":\"1️⃣\",\"label\":\"keycap: 1\",\"tone\":0},{\"emoji\":\"2️⃣\",\"label\":\"keycap: 2\",\"tone\":0},{\"emoji\":\"3️⃣\",\"label\":\"keycap: 3\",\"tone\":0},{\"emoji\":\"4️⃣\",\"label\":\"keycap: 4\",\"tone\":0},{\"emoji\":\"5️⃣\",\"label\":\"keycap: 5\",\"tone\":0},{\"emoji\":\"6️⃣\",\"label\":\"keycap: 6\",\"tone\":0},{\"emoji\":\"7️⃣\",\"label\":\"keycap: 7\",\"tone\":0},{\"emoji\":\"8️⃣\",\"label\":\"keycap: 8\",\"tone\":0},{\"emoji\":\"9️⃣\",\"label\":\"keycap: 9\",\"tone\":0},{\"emoji\":\"🔟\",\"label\":\"keycap: 10\",\"tone\":0},{\"emoji\":\"🔠\",\"label\":\"input latin uppercase\",\"tone\":0},{\"emoji\":\"🔡\",\"label\":\"input latin lowercase\",\"tone\":0},{\"emoji\":\"🔢\",\"label\":\"input numbers\",\"tone\":0},{\"emoji\":\"🔣\",\"label\":\"input symbols\",\"tone\":0},{\"emoji\":\"🔤\",\"label\":\"input latin letters\",\"tone\":0},{\"emoji\":\"🅰️\",\"label\":\"A button (blood type)\",\"tone\":0},{\"emoji\":\"🆎\",\"label\":\"AB button (blood type)\",\"tone\":0},{\"emoji\":\"🅱️\",\"label\":\"B button (blood type)\",\"tone\":0},{\"emoji\":\"🆑\",\"label\":\"CL button\",\"tone\":0},{\"emoji\":\"🆒\",\"label\":\"COOL button\",\"tone\":0},{\"emoji\":\"🆓\",\"label\":\"FREE button\",\"tone\":0},{\"emoji\":\"ℹ️\",\"label\":\"information\",\"tone\":0},{\"emoji\":\"🆔\",\"label\":\"ID button\",\"tone\":0},{\"emoji\":\"Ⓜ️\",\"label\":\"circled M\",\"tone\":0},{\"emoji\":\"🆕\",\"label\":\"NEW button\",\"tone\":0},{\"emoji\":\"🆖\",\"label\":\"NG button\",\"tone\":0},{\"emoji\":\"🅾️\",\"label\":\"O button (blood type)\",\"tone\":0},{\"emoji\":\"🆗\",\"label\":\"OK button\",\"tone\":0},{\"emoji\":\"🅿️\",\"label\":\"P button\",\"tone\":0},{\"emoji\":\"🆘\",\"label\":\"SOS button\",\"tone\":0},{\"emoji\":\"🆙\",\"label\":\"UP! button\",\"tone\":0},{\"emoji\":\"🆚\",\"label\":\"VS button\",\"tone\":0},{\"emoji\":\"🈁\",\"label\":\"Japanese “here” button\",\"tone\":0},{\"emoji\":\"🈂️\",\"label\":\"Japanese “service charge” button\",\"tone\":0},{\"emoji\":\"🈷️\",\"label\":\"Japanese “monthly amount” button\",\"tone\":0},{\"emoji\":\"🈶\",\"label\":\"Japanese “not free of charge” button\",\"tone\":0},{\"emoji\":\"🈯️\",\"label\":\"Japanese “reserved” button\",\"tone\":0},{\"emoji\":\"🉐\",\"label\":\"Japanese “bargain” button\",\"tone\":0},{\"emoji\":\"🈹\",\"label\":\"Japanese “discount” button\",\"tone\":0},{\"emoji\":\"🈚️\",\"label\":\"Japanese “free of charge” button\",\"tone\":0},{\"emoji\":\"🈲\",\"label\":\"Japanese “prohibited” button\",\"tone\":0},{\"emoji\":\"🉑\",\"label\":\"Japanese “acceptable” button\",\"tone\":0},{\"emoji\":\"🈸\",\"label\":\"Japanese “application” button\",\"tone\":0},{\"emoji\":\"🈴\",\"label\":\"Japanese “passing grade” button\",\"tone\":0},{\"emoji\":\"🈳\",\"label\":\"Japanese “vacancy” button\",\"tone\":0},{\"emoji\":\"㊗️\",\"label\":\"Japanese “congratulations” button\",\"tone\":0},{\"emoji\":\"㊙️\",\"label\":\"Japanese “secret” button\",\"tone\":0},{\"emoji\":\"🈺\",\"label\":\"Japanese “open for business” button\",\"tone\":0},{\"emoji\":\"🈵\",\"label\":\"Japanese “no vacancy” button\",\"tone\":0},{\"emoji\":\"🔴\",\"label\":\"red circle\",\"tone\":0},{\"emoji\":\"🟠\",\"label\":\"orange circle\",\"tone\":0},{\"emoji\":\"🟡\",\"label\":\"yellow circle\",\"tone\":0},{\"emoji\":\"🟢\",\"label\":\"green circle\",\"tone\":0},{\"emoji\":\"🔵\",\"label\":\"blue circle\",\"tone\":0},{\"emoji\":\"🟣\",\"label\":\"purple circle\",\"tone\":0},{\"emoji\":\"🟤\",\"label\":\"brown circle\",\"tone\":0},{\"emoji\":\"⚫️\",\"label\":\"black circle\",\"tone\":0},{\"emoji\":\"⚪️\",\"label\":\"white circle\",\"tone\":0},{\"emoji\":\"🟥\",\"label\":\"red square\",\"tone\":0},{\"emoji\":\"🟧\",\"label\":\"orange square\",\"tone\":0},{\"emoji\":\"🟨\",\"label\":\"yellow square\",\"tone\":0},{\"emoji\":\"🟩\",\"label\":\"green square\",\"tone\":0},{\"emoji\":\"🟦\",\"label\":\"blue square\",\"tone\":0},{\"emoji\":\"🟪\",\"label\":\"purple square\",\"tone\":0},{\"emoji\":\"🟫\",\"label\":\"brown square\",\"tone\":0},{\"emoji\":\"⬛️\",\"label\":\"black large square\",\"tone\":0},{\"emoji\":\"⬜️\",\"label\":\"white large square\",\"tone\":0},{\"emoji\":\"◼️\",\"label\":\"black medium square\",\"tone\":0},{\"emoji\":\"◻️\",\"label\":\"white medium square\",\"tone\":0},{\"emoji\":\"◾️\",\"label\":\"black medium-small square\",\"tone\":0},{\"emoji\":\"◽️\",\"label\":\"white medium-small square\",\"tone\":0},{\"emoji\":\"▪️\",\"label\":\"black small square\",\"tone\":0},{\"emoji\":\"▫️\",\"label\":\"white small square\",\"tone\":0},{\"emoji\":\"🔶\",\"label\":\"large orange diamond\",\"tone\":0},{\"emoji\":\"🔷\",\"label\":\"large blue diamond\",\"tone\":0},{\"emoji\":\"🔸\",\"label\":\"small orange diamond\",\"tone\":0},{\"emoji\":\"🔹\",\"label\":\"small blue diamond\",\"tone\":0},{\"emoji\":\"🔺\",\"label\":\"red triangle pointed up\",\"tone\":0},{\"emoji\":\"🔻\",\"label\":\"red triangle pointed down\",\"tone\":0},{\"emoji\":\"💠\",\"label\":\"diamond with a dot\",\"tone\":0},{\"emoji\":\"🔘\",\"label\":\"radio button\",\"tone\":0},{\"emoji\":\"🔳\",\"label\":\"white square button\",\"tone\":0},{\"emoji\":\"🔲\",\"label\":\"black square button\",\"tone\":0},{\"emoji\":\"🏁\",\"label\":\"chequered flag\",\"tone\":0},{\"emoji\":\"🚩\",\"label\":\"triangular flag\",\"tone\":0},{\"emoji\":\"🎌\",\"label\":\"crossed flags\",\"tone\":0},{\"emoji\":\"🏴\",\"label\":\"black flag\",\"tone\":0},{\"emoji\":\"🏳️\",\"label\":\"white flag\",\"tone\":0},{\"emoji\":\"🏳️‍🌈\",\"label\":\"rainbow flag\",\"tone\":0},{\"emoji\":\"🏳️‍⚧️\",\"label\":\"transgender flag\",\"tone\":0},{\"emoji\":\"🏴‍☠️\",\"label\":\"pirate flag\",\"tone\":0},{\"emoji\":\"🇦🇨\",\"label\":\"flag: Ascension Island\",\"tone\":0},{\"emoji\":\"🇦🇩\",\"label\":\"flag: Andorra\",\"tone\":0},{\"emoji\":\"🇦🇪\",\"label\":\"flag: United Arab Emirates\",\"tone\":0},{\"emoji\":\"🇦🇫\",\"label\":\"flag: Afghanistan\",\"tone\":0},{\"emoji\":\"🇦🇬\",\"label\":\"flag: Antigua \u0026 Barbuda\",\"tone\":0},{\"emoji\":\"🇦🇮\",\"label\":\"flag: Anguilla\",\"tone\":0},{\"emoji\":\"🇦🇱\",\"label\":\"flag: Albania\",\"tone\":0},{\"emoji\":\"🇦🇲\",\"label\":\"flag: Armenia\",\"tone\":0},{\"emoji\":\"🇦🇴\",\"label\":\"flag: Angola\",\"tone\":0},{\"emoji\":\"🇦🇶\",\"label\":\"flag: Antarctica\",\"tone\":0},{\"emoji\":\"🇦🇷\",\"label\":\"flag: Argentina\",\"tone\":0},{\"emoji\":\"🇦🇸\",\"label\":\"flag: American Samoa\",\"tone\":0},{\"emoji\":\"🇦🇹\",\"label\":\"flag: Austria\",\"tone\":0},{\"emoji\":\"🇦🇺\",\"label\":\"flag: Australia\",\"tone\":0},{\"emoji\":\"🇦🇼\",\"label\":\"flag: Aruba\",\"tone\":0},{\"emoji\":\"🇦🇽\",\"label\":\"flag: Åland Islands\",\"tone\":0},{\"emoji\":\"🇦🇿\",\"label\":\"flag: Azerbaijan\",\"tone\":0},{\"emoji\":\"🇧🇦\",\"label\":\"flag: Bosnia \u0026 Herzegovina\",\"tone\":0},{\"emoji\":\"🇧🇧\",\"label\":\"flag: Barbados\",\"tone\":0},{\"emoji\":\"🇧🇩\",\"label\":\"flag: Bangladesh\",\"tone\":0},{\"emoji\":\"🇧🇪\",\"label\":\"flag: Belgium\",\"tone\":0},{\"emoji\":\"🇧🇫\",\"label\":\"flag: Burkina Faso\",\"tone\":0},{\"emoji\":\"🇧🇬\",\"label\":\"flag: Bulgaria\",\"tone\":0},{\"emoji\":\"🇧🇭\",\"label\":\"flag: Bahrain\",\"tone\":0},{\"emoji\":\"🇧🇮\",\"label\":\"flag: Burundi\",\"tone\":0},{\"emoji\":\"🇧🇯\",\"label\":\"flag: Benin\",\"tone\":0},{\"emoji\":\"🇧🇱\",\"label\":\"flag: St. Barthélemy\",\"tone\":0},{\"emoji\":\"🇧🇲\",\"label\":\"flag: Bermuda\",\"tone\":0},{\"emoji\":\"🇧🇳\",\"label\":\"flag: Brunei\",\"tone\":0},{\"emoji\":\"🇧🇴\",\"label\":\"flag: Bolivia\",\"tone\":0},{\"emoji\":\"🇧🇶\",\"label\":\"flag: Caribbean Netherlands\",\"tone\":0},{\"emoji\":\"🇧🇷\",\"label\":\"flag: Brazil\",\"tone\":0},{\"emoji\":\"🇧🇸\",\"label\":\"flag: Bahamas\",\"tone\":0},{\"emoji\":\"🇧🇹\",\"label\":\"flag: Bhutan\",\"tone\":0},{\"emoji\":\"🇧🇻\",\"label\":\"flag: Bouvet Island\",\"tone\":0},{\"emoji\":\"🇧🇼\",\"label\":\"flag: Botswana\",\"tone\":0},{\"emoji\":\"🇧🇾\",\"label\":\"flag: Belarus\",\"tone\":0},{\"emoji\":\"🇧🇿\",\"label\":\"flag: Belize\",\"tone\":0},{\"emoji\":\"🇨🇦\",\"label\":\"flag: Canada\",\"tone\":0},{\"emoji\":\"🇨🇨\",\"label\":\"flag: Cocos (Keeling) Islands\",\"tone\":0},{\"emoji\":\"🇨🇩\",\"label\":\"flag: Congo - Kinshasa\",\"tone\":0},{\"emoji\":\"🇨🇫\",\"label\":\"flag: Central African Republic\",\"tone\":0},{\"emoji\":\"🇨🇬\",\"label\":\"flag: Congo - Brazzaville\",\"tone\":0},{\"emoji\":\"🇨🇭\",\"label\":\"flag: Switzerland\",\"tone\":0},{\"emoji\":\"🇨🇮\",\"label\":\"flag: Côte d’Ivoire\",\"tone\":0},{\"emoji\":\"🇨🇰\",\"label\":\"flag: Cook Islands\",\"tone\":0},{\"emoji\":\"🇨🇱\",\"label\":\"flag: Chile\",\"tone\":0},{\"emoji\":\"🇨🇲\",\"label\":\"flag: Cameroon\",\"tone\":0},{\"emoji\":\"🇨🇳\",\"label\":\"flag: China\",\"tone\":0},{\"emoji\":\"🇨🇴\",\"label\":\"flag: Colombia\",\"tone\":0},{\"emoji\":\"🇨🇵\",\"label\":\"flag: Clipperton Island\",\"tone\":0},{\"emoji\":\"🇨🇷\",\"label\":\"flag: Costa Rica\",\"tone\":0},{\"emoji\":\"🇨🇺\",\"label\":\"flag: Cuba\",\"tone\":0},{\"emoji\":\"🇨🇻\",\"label\":\"flag: Cape Verde\",\"tone\":0},{\"emoji\":\"🇨🇼\",\"label\":\"flag: Curaçao\",\"tone\":0},{\"emoji\":\"🇨🇽\",\"label\":\"flag: Christmas Island\",\"tone\":0},{\"emoji\":\"🇨🇾\",\"label\":\"flag: Cyprus\",\"tone\":0},{\"emoji\":\"🇨🇿\",\"label\":\"flag: Czechia\",\"tone\":0},{\"emoji\":\"🇩🇪\",\"label\":\"flag: Germany\",\"tone\":0},{\"emoji\":\"🇩🇬\",\"label\":\"flag: Diego Garcia\",\"tone\":0},{\"emoji\":\"🇩🇯\",\"label\":\"flag: Djibouti\",\"tone\":0},{\"emoji\":\"🇩🇰\",\"label\":\"flag: Denmark\",\"tone\":0},{\"emoji\":\"🇩🇲\",\"label\":\"flag: Dominica\",\"tone\":0},{\"emoji\":\"🇩🇴\",\"label\":\"flag: Dominican Republic\",\"tone\":0},{\"emoji\":\"🇩🇿\",\"label\":\"flag: Algeria\",\"tone\":0},{\"emoji\":\"🇪🇦\",\"label\":\"flag: Ceuta \u0026 Melilla\",\"tone\":0},{\"emoji\":\"🇪🇨\",\"label\":\"flag: Ecuador\",\"tone\":0},{\"emoji\":\"🇪🇪\",\"label\":\"flag: Estonia\",\"tone\":0},{\"emoji\":\"🇪🇬\",\"label\":\"flag: Egypt\",\"tone\":0},{\"emoji\":\"🇪🇭\",\"label\":\"flag: Western Sahara\",\"tone\":0},{\"emoji\":\"🇪🇷\",\"label\":\"flag: Eritrea\",\"tone\":0},{\"emoji\":\"🇪🇸\",\"label\":\"flag: Spain\",\"tone\":0},{\"emoji\":\"🇪🇹\",\"label\":\"flag: Ethiopia\",\"tone\":0},{\"emoji\":\"🇪🇺\",\"label\":\"flag: European Union\",\"tone\":0},{\"emoji\":\"🇫🇮\",\"label\":\"flag: Finland\",\"tone\":0},{\"emoji\":\"🇫🇯\",\"label\":\"flag: Fiji\",\"tone\":0},{\"emoji\":\"🇫🇰\",\"label\":\"flag: Falkland Islands\",\"tone\":0},{\"emoji\":\"🇫🇲\",\"label\":\"flag: Micronesia\",\"tone\":0},{\"emoji\":\"🇫🇴\",\"label\":\"flag: Faroe Islands\",\"tone\":0},{\"emoji\":\"🇫🇷\",\"label\":\"flag: France\",\"tone\":0},{\"emoji\":\"🇬🇦\",\"label\":\"flag: Gabon\",\"tone\":0},{\"emoji\":\"🇬🇧\",\"label\":\"flag: United Kingdom\",\"tone\":0},{\"emoji\":\"🇬🇩\",\"label\":\"flag: Grenada\",\"tone\":0},{\"emoji\":\"🇬🇪\",\"label\":\"flag: Georgia\",\"tone\":0},{\"emoji\":\"🇬🇫\",\"label\":\"flag: French Guiana\",\"tone\":0},{\"emoji\":\"🇬🇬\",\"label\":\"flag: Guernsey\",\"tone\":0},{\"emoji\":\"🇬🇭\",\"label\":\"flag: Ghana\",\"tone\":0},{\"emoji\":\"🇬🇮\",\"label\":\"flag: Gibraltar\",\"tone\":0},{\"emoji\":\"🇬🇱\",\"label\":\"flag: Greenland\",\"tone\":0},{\"emoji\":\"🇬🇲\",\"label\":\"flag: Gambia\",\"tone\":0},{\"emoji\":\"🇬🇳\",\"label\":\"flag: Guinea\",\"tone\":0},{\"emoji\":\"🇬🇵\",\"label\":\"flag: Guadeloupe\",\"tone\":0},{\"emoji\":\"🇬🇶\",\"label\":\"flag: Equatorial Guinea\",\"tone\":0},{\"emoji\":\"🇬🇷\",\"label\":\"flag: Greece\",\"tone\":0},{\"emoji\":\"🇬🇸\",\"label\":\"flag: South Georgia \u0026 South Sandwich Islands\",\"tone\":0},{\"emoji\":\"🇬🇹\",\"label\":\"flag: Guatemala\",\"tone\":0},{\"emoji\":\"🇬🇺\",\"label\":\"flag: Guam\",\"tone\":0},{\"emoji\":\"🇬🇼\",\"label\":\"flag: Guinea-Bissau\",\"tone\":0},{\"emoji\":\"🇬🇾\",\"label\":\"flag: Guyana\",\"tone\":0},{\"emoji\":\"🇭🇰\",\"label\":\"flag: Hong Kong SAR China\",\"tone\":0},{\"emoji\":\"🇭🇲\",\"label\":\"flag: Heard \u0026 McDonald Islands\",\"tone\":0},{\"emoji\":\"🇭🇳\",\"label\":\"flag: Honduras\",\"tone\":0},{\"emoji\":\"🇭🇷\",\"label\":\"flag: Croatia\",\"tone\":0},{\"emoji\":\"🇭🇹\",\"label\":\"flag: Haiti\",\"tone\":0},{\"emoji\":\"🇭🇺\",\"label\":\"flag: Hungary\",\"tone\":0},{\"emoji\":\"🇮🇨\",\"label\":\"flag: Canary Islands\",\"tone\":0},{\"emoji\":\"🇮🇩\",\"label\":\"flag: Indonesia\",\"tone\":0},{\"emoji\":\"🇮🇪\",\"label\":\"flag: Ireland\",\"tone\":0},{\"emoji\":\"🇮🇱\",\"label\":\"flag: Israel\",\"tone\":0},{\"emoji\":\"🇮🇲\",\"label\":\"flag: Isle of Man\",\"tone\":0},{\"emoji\":\"🇮🇳\",\"label\":\"flag: India\",\"tone\":0},{\"emoji\":\"🇮🇴\",\"label\":\"flag: British Indian Ocean Territory\",\"tone\":0},{\"emoji\":\"🇮🇶\",\"label\":\"flag: Iraq\",\"tone\":0},{\"emoji\":\"🇮🇷\",\"label\":\"flag: Iran\",\"tone\":0},{\"emoji\":\"🇮🇸\",\"label\":\"flag: Iceland\",\"tone\":0},{\"emoji\":\"🇮🇹\",\"label\":\"flag: Italy\",\"tone\":0},{\"emoji\":\"🇯🇪\",\"label\":\"flag: Jersey\",\"tone\":0},{\"emoji\":\"🇯🇲\",\"label\":\"flag: Jamaica\",\"tone\":0},{\"emoji\":\"🇯🇴\",\"label\":\"flag: Jordan\",\"tone\":0},{\"emoji\":\"🇯🇵\",\"label\":\"flag: Japan\",\"tone\":0},{\"emoji\":\"🇰🇪\",\"label\":\"flag: Kenya\",\"tone\":0},{\"emoji\":\"🇰🇬\",\"label\":\"flag: Kyrgyzstan\",\"tone\":0},{\"emoji\":\"🇰🇭\",\"label\":\"flag: Cambodia\",\"tone\":0},{\"emoji\":\"🇰🇮\",\"label\":\"flag: Kiribati\",\"tone\":0},{\"emoji\":\"🇰🇲\",\"label\":\"flag: Comoros\",\"tone\":0},{\"emoji\":\"🇰🇳\",\"label\":\"flag: St. Kitts \u0026 Nevis\",\"tone\":0},{\"emoji\":\"🇰🇵\",\"label\":\"flag: North Korea\",\"tone\":0},{\"emoji\":\"🇰🇷\",\"label\":\"flag: South Korea\",\"tone\":0},{\"emoji\":\"🇰🇼\",\"label\":\"flag: Kuwait\",\"tone\":0},{\"emoji\":\"🇰🇾\",\"label\":\"flag: Cayman Islands\",\"tone\":0},{\"emoji\":\"🇰🇿\",\"label\":\"flag: Kazakhstan\",\"tone\":0},{\"emoji\":\"🇱🇦\",\"label\":\"flag: Laos\",\"tone\":0},{\"emoji\":\"🇱🇧\",\"label\":\"flag: Lebanon\",\"tone\":0},{\"emoji\":\"🇱🇨\",\"label\":\"flag: St. Lucia\",\"tone\":0},{\"emoji\":\"🇱🇮\",\"label\":\"flag: Liechtenstein\",\"tone\":0},{\"emoji\":\"🇱🇰\",\"label\":\"flag: Sri Lanka\",\"tone\":0},{\"emoji\":\"🇱🇷\",\"label\":\"flag: Liberia\",\"tone\":0},{\"emoji\":\"🇱🇸\",\"label\":\"flag: Lesotho\",\"tone\":0},{\"emoji\":\"🇱🇹\",\"label\":\"flag: Lithuania\",\"tone\":0},{\"emoji\":\"🇱🇺\",\"label\":\"flag: Luxembourg\",\"tone\":0},{\"emoji\":\"🇱🇻\",\"label\":\"flag: Latvia\",\"tone\":0},{\"emoji\":\"🇱🇾\",\"label\":\"flag: Libya\",\"tone\":0},{\"emoji\":\"🇲🇦\",\"label\":\"flag: Morocco\",\"tone\":0},{\"emoji\":\"🇲🇨\",\"label\":\"flag: Monaco\",\"tone\":0},{\"emoji\":\"🇲🇩\",\"label\":\"flag: Moldova\",\"tone\":0},{\"emoji\":\"🇲🇪\",\"label\":\"flag: Montenegro\",\"tone\":0},{\"emoji\":\"🇲🇫\",\"label\":\"flag: St. Martin\",\"tone\":0},{\"emoji\":\"🇲🇬\",\"label\":\"flag: Madagascar\",\"tone\":0},{\"emoji\":\"🇲🇭\",\"label\":\"flag: Marshall Islands\",\"tone\":0},{\"emoji\":\"🇲🇰\",\"label\":\"flag: North Macedonia\",\"tone\":0},{\"emoji\":\"🇲🇱\",\"label\":\"flag: Mali\",\"tone\":0},{\"emoji\":\"🇲🇲\",\"label\":\"flag: Myanmar (Burma)\",\"tone\":0},{\"emoji\":\"🇲🇳\",\"label\":\"flag: Mongolia\",\"tone\":0},{\"emoji\":\"🇲🇴\",\"label\":\"flag: Macao SAR China\",\"tone\":0},{\"emoji\":\"🇲🇵\",\"label\":\"flag: Northern Mariana Islands\",\"tone\":0},{\"emoji\":\"🇲🇶\",\"label\":\"flag: Martinique\",\"tone\":0},{\"emoji\":\"🇲🇷\",\"label\":\"flag: Mauritania\",\"tone\":0},{\"emoji\":\"🇲🇸\",\"label\":\"flag: Montserrat\",\"tone\":0},{\"emoji\":\"🇲🇹\",\"label\":\"flag: Malta\",\"tone\":0},{\"emoji\":\"🇲🇺\",\"label\":\"flag: Mauritius\",\"tone\":0},{\"emoji\":\"🇲🇻\",\"label\":\"flag: Maldives\",\"tone\":0},{\"emoji\":\"🇲🇼\",\"label\":\"flag: Malawi\",\"tone\":0},{\"emoji\":\"🇲🇽\",\"label\":\"flag: Mexico\",\"tone\":0},{\"emoji\":\"🇲🇾\",\"label\":\"flag: Malaysia\",\"tone\":0},{\"emoji\":\"🇲🇿\",\"label\":\"flag: Mozambique\",\"tone\":0},{\"emoji\":\"🇳🇦\",\"label\":\"flag: Namibia\",\"tone\":0},{\"emoji\":\"🇳🇨\",\"label\":\"flag: New Caledonia\",\"tone\":0},{\"emoji\":\"🇳🇪\",\"label\":\"flag: Niger\",\"tone\":0},{\"emoji\":\"🇳🇫\",\"label\":\"flag: Norfolk Island\",\"tone\":0},{\"emoji\":\"🇳🇬\",\"label\":\"flag: Nigeria\",\"tone\":0},{\"emoji\":\"🇳🇮\",\"label\":\"flag: Nicaragua\",\"tone\":0},{\"emoji\":\"🇳🇱\",\"label\":\"flag: Netherlands\",\"tone\":0},{\"emoji\":\"🇳🇴\",\"label\":\"flag: Norway\",\"tone\":0},{\"emoji\":\"🇳🇵\",\"label\":\"flag: Nepal\",\"tone\":0},{\"emoji\":\"🇳🇷\",\"label\":\"flag: Nauru\",\"tone\":0},{\"emoji\":\"🇳🇺\",\"label\":\"flag: Niue\",\"tone\":0},{\"emoji\":\"🇳🇿\",\"label\":\"flag: New Zealand\",\"tone\":0},{\"emoji\":\"🇴🇲\",\"label\":\"flag: Oman\",\"tone\":0},{\"emoji\":\"🇵🇦\",\"label\":\"flag: Panama\",\"tone\":0},{\"emoji\":\"🇵🇪\",\"label\":\"flag: Peru\",\"tone\":0},{\"emoji\":\"🇵🇫\",\"label\":\"flag: French Polynesia\",\"tone\":0},{\"emoji\":\"🇵🇬\",\"label\":\"flag: Papua New Guinea\",\"tone\":0},{\"emoji\":\"🇵🇭\",\"label\":\"flag: Philippines\",\"tone\":0},{\"emoji\":\"🇵🇰\",\"label\":\"flag: Pakistan\",\"tone\":0},{\"emoji\":\"🇵🇱\",\"label\":\"flag: Poland\",\"tone\":0},{\"emoji\":\"🇵🇲\",\"label\":\"flag: St. Pierre \u0026 Miquelon\",\"tone\":0},{\"emoji\":\"🇵🇳\",\"label\":\"flag: Pitcairn Islands\",\"tone\":0},{\"emoji\":\"🇵🇷\",\"label\":\"flag: Puerto Rico\",\"tone\":0},{\"emoji\":\"🇵🇸\",\"label\":\"flag: Palestinian Territories\",\"tone\":0},{\"emoji\":\"🇵🇹\",\"label\":\"flag: Portugal\",\"tone\":0},{\"emoji\":\"🇵🇼\",\"label\":\"flag: Palau\",\"tone\":0},{\"emoji\":\"🇵🇾\",\"label\":\"flag: Paraguay\",\"tone\":0},{\"emoji\":\"🇶🇦\",\"label\":\"flag: Qatar\",\"tone\":0},{\"emoji\":\"🇷🇪\",\"label\":\"flag: Réunion\",\"tone\":0},{\"emoji\":\"🇷🇴\",\"label\":\"flag: Romania\",\"tone\":0},{\"emoji\":\"🇷🇸\",\"label\":\"flag: Serbia\",\"tone\":0},{\"emoji\":\"🇷🇺\",\"label\":\"flag: Russia\",\"tone\":0},{\"emoji\":\"🇷🇼\",\"label\":\"flag: Rwanda\",\"tone\":0},{\"emoji\":\"🇸🇦\",\"label\":\"flag: Saudi Arabia\",\"tone\":0},{\"emoji\":\"🇸🇧\",\"label\":\"flag: Solomon Islands\",\"tone\":0},{\"emoji\":\"🇸🇨\",\"label\":\"flag: Seychelles\",\"tone\":0},{\"emoji\":\"🇸🇩\",\"label\":\"flag: Sudan\",\"tone\":0},{\"emoji\":\"🇸🇪\",\"label\":\"flag: Sweden\",\"tone\":0},{\"emoji\":\"🇸🇬\",\"label\":\"flag: Singapore\",\"tone\":0},{\"emoji\":\"🇸🇭\",\"label\":\"flag: St. Helena\",\"tone\":0},{\"emoji\":\"🇸🇮\",\"label\":\"flag: Slovenia\",\"tone\":0},{\"emoji\":\"🇸🇯\",\"label\":\"flag: Svalbard \u0026 Jan Mayen\",\"tone\":0},{\"emoji\":\"🇸🇰\",\"label\":\"flag: Slovakia\",\"tone\":0},{\"emoji\":\"🇸🇱\",\"label\":\"flag: Sierra Leone\",\"tone\":0},{\"emoji\":\"🇸🇲\",\"label\":\"flag: San Marino\",\"tone\":0},{\"emoji\":\"🇸🇳\",\"label\":\"flag: Senegal\",\"tone\":0},{\"emoji\":\"🇸🇴\",\"label\":\"flag: Somalia\",\"tone\":0},{\"emoji\":\"🇸🇷\",\"label\":\"flag: Suriname\",\"tone\":0},{\"emoji\":\"🇸🇸\",\"label\":\"flag: South Sudan\",\"tone\":0},{\"emoji\":\"🇸🇹\",\"label\":\"flag: São Tomé \u0026 Príncipe\",\"tone\":0},{\"emoji\":\"🇸🇻\",\"label\":\"flag: El Salvador\",\"tone\":0},{\"emoji\":\"🇸🇽\",\"label\":\"flag: Sint Maarten\",\"tone\":0},{\"emoji\":\"🇸🇾\",\"label\":\"flag: Syria\",\"tone\":0},{\"emoji\":\"🇸🇿\",\"label\":\"flag: Eswatini\",\"tone\":0},{\"emoji\":\"🇹🇦\",\"label\":\"flag: Tristan da Cunha\",\"tone\":0},{\"emoji\":\"🇹🇨\",\"label\":\"flag: Turks \u0026 Caicos Islands\",\"tone\":0},{\"emoji\":\"🇹🇩\",\"label\":\"flag: Chad\",\"tone\":0},{\"emoji\":\"🇹🇫\",\"label\":\"flag: French Southern Territories\",\"tone\":0},{\"emoji\":\"🇹🇬\",\"label\":\"flag: Togo\",\"tone\":0},{\"emoji\":\"🇹🇭\",\"label\":\"flag: Thailand\",\"tone\":0},{\"emoji\":\"🇹🇯\",\"label\":\"flag: Tajikistan\",\"tone\":0},{\"emoji\":\"🇹🇰\",\"label\":\"flag: Tokelau\",\"tone\":0},{\"emoji\":\"🇹🇱\",\"label\":\"flag: Timor-Leste\",\"tone\":0},{\"emoji\":\"🇹🇲\",\"label\":\"flag: Turkmenistan\",\"tone\":0},{\"emoji\":\"🇹🇳\",\"label\":\"flag: Tunisia\",\"tone\":0},{\"emoji\":\"🇹🇴\",\"label\":\"flag: Tonga\",\"tone\":0},{\"emoji\":\"🇹🇷\",\"label\":\"flag: Turkey\",\"tone\":0},{\"emoji\":\"🇹🇹\",\"label\":\"flag: Trinidad \u0026 Tobago\",\"tone\":0},{\"emoji\":\"🇹🇻\",\"label\":\"flag: Tuvalu\",\"tone\":0},{\"emoji\":\"🇹🇼\",\"label\":\"flag: Taiwan\",\"tone\":0},{\"emoji\":\"🇹🇿\",\"label\":\"flag: Tanzania\",\"tone\":0},{\"emoji\":\"🇺🇦\",\"label\":\"flag: Ukraine\",\"tone\":0},{\"emoji\":\"🇺🇬\",\"label\":\"flag: Uganda\",\"tone\":0},{\"emoji\":\"🇺🇲\",\"label\":\"flag: U.S. Outlying Islands\",\"tone\":0},{\"emoji\":\"🇺🇳\",\"label\":\"flag: United Nations\",\"tone\":0},{\"emoji\":\"🇺🇸\",\"label\":\"flag: United States\",\"tone\":0},{\"emoji\":\"🇺🇾\",\"label\":\"flag: Uruguay\",\"tone\":0},{\"emoji\":\"🇺🇿\",\"label\":\"flag: Uzbekistan\",\"tone\":0},{\"emoji\":\"🇻🇦\",\"label\":\"flag: Vatican City\",\"tone\":0},{\"emoji\":\"🇻🇨\",\"label\":\"flag: St. Vincent \u0026 Grenadines\",\"tone\":0},{\"emoji\":\"🇻🇪\",\"label\":\"flag: Venezuela\",\"tone\":0},{\"emoji\":\"🇻🇬\",\"label\":\"flag: British Virgin Islands\",\"tone\":0},{\"emoji\":\"🇻🇮\",\"label\":\"flag: U.S. Virgin Islands\",\"tone\":0},{\"emoji\":\"🇻🇳\",\"label\":\"flag: Vietnam\",\"tone\":0},{\"emoji\":\"🇻🇺\",\"label\":\"flag: Vanuatu\",\"tone\":0},{\"emoji\":\"🇼🇫\",\"label\":\"flag: Wallis \u0026 Futuna\",\"tone\":0},{\"emoji\":\"🇼🇸\",\"label\":\"flag: Samoa\",\"tone\":0},{\"emoji\":\"🇽🇰\",\"label\":\"flag: Kosovo\",\"tone\":0},{\"emoji\":\"🇾🇪\",\"label\":\"flag: Yemen\",\"tone\":0},{\"emoji\":\"🇾🇹\",\"label\":\"flag: Mayotte\",\"tone\":0},{\"emoji\":\"🇿🇦\",\"label\":\"flag: South Africa\",\"tone\":0},{\"emoji\":\"🇿🇲\",\"label\":\"flag: Zambia\",\"tone\":0},{\"emoji\":\"🇿🇼\",\"label\":\"flag: Zimbabwe\",\"tone\":0},{\"emoji\":\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\"label\":\"flag: England\",\"tone\":0},{\"emoji\":\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\"label\":\"flag: Scotland\",\"tone\":0},{\"emoji\":\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\"label\":\"flag: Wales\",\"tone\":0}]}]');\nconst templateHTML$H = '\u003cstyle\u003e:host{display:block}#wrapper{width:384px;max-height:504px;display:flex;flex-direction:column;gap:8px;padding:12px 0}#toolbar{display:flex;gap:8px;padding:0 12px}#search{flex:1;min-width:0}#search-clear:not(.active){display:none}#list-wrapper{overflow-y:auto;overflow-x:hidden;width:384px;box-sizing:border-box;scrollbar-gutter:stable}#list{display:flex;flex-wrap:wrap;gap:8px;padding:4px 12px 0;width:384px;box-sizing:border-box}#not-found{display:none;width:100%;height:48px;align-items:center;justify-content:center;pointer-events:none;user-select:none;--sinch-global-color-text:var(--sinch-comp-emoji-picker-color-default-text-not-found);--sinch-comp-text-font:var(--sinch-comp-emoji-picker-font-not-found)}#not-found.active{display:flex}sinch-tabs-icon-option\u003esvg{pointer-events:none;height:var(--sinch-global-size-icon);fill:var(--sinch-global-color-icon)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"toolbar\"\u003e\u003csinch-input id=\"search\" size=\"l\" aria-label=\"Search emojis\"\u003e\u003csinch-icon icons-version=\"2\" name=\"magnifying-glass\" id=\"icon-search\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003csinch-button id=\"search-clear\" slot=\"right\" aria-label=\"Clear\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-xmark\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e\u003c/sinch-input\u003e\u003csinch-popover id=\"skin-popover\" orientation=\"bottom-left\" aria-label=\"Emoji skin tone select\"\u003e\u003csinch-button id=\"skin-button\" slot=\"target\" size=\"l\" aria-label=\"Select emoji skin tones\"\u003e\u003csinch-color-swatch id=\"skin-swatch\" slot=\"icon\" name=\"skintone-default\"\u003e\u003c/sinch-color-swatch\u003e\u003c/sinch-button\u003e\u003csinch-color-menu id=\"skin-menu\" slot=\"content\" cols=\"1\" value=\"skintone-default\" aria-label=\"Emoji skin tone menu\"\u003e\u003csinch-color-menu-option value=\"skintone-default\"\u003e\u003c/sinch-color-menu-option\u003e\u003csinch-color-menu-option value=\"skintone-light\"\u003e\u003c/sinch-color-menu-option\u003e\u003csinch-color-menu-option value=\"skintone-light-medium\"\u003e\u003c/sinch-color-menu-option\u003e\u003csinch-color-menu-option value=\"skintone-medium\"\u003e\u003c/sinch-color-menu-option\u003e\u003csinch-color-menu-option value=\"skintone-medium-dark\"\u003e\u003c/sinch-color-menu-option\u003e\u003csinch-color-menu-option value=\"skintone-dark\"\u003e\u003c/sinch-color-menu-option\u003e\u003c/sinch-color-menu\u003e\u003c/sinch-popover\u003e\u003c/div\u003e\u003csinch-tabs id=\"tabs\" aria-label=\"Emoji groups\"\u003e\u003csinch-tabs-icon-option id=\"tab-emotions\"\u003e\u003csvg slot=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M15.5 11a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm-7 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\"/\u003e\u003cpath d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2ZM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8Zm4.41-6.11a.745.745 0 0 0-1.03.24A3.98 3.98 0 0 1 12 16c-1.38 0-2.64-.7-3.38-1.88a.747.747 0 1 0-1.27.79A5.446 5.446 0 0 0 12 17.5c1.9 0 3.63-.97 4.65-2.58.22-.35.11-.81-.24-1.03Z\"/\u003e\u003c/svg\u003e\u003c/sinch-tabs-icon-option\u003e\u003csinch-tabs-icon-option id=\"tab-people\"\u003e\u003csvg slot=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M12 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z\"/\u003e\u003cpath d=\"M15.89 8.11C15.5 7.72 14.83 7 13.53 7h-2.54a5.023 5.023 0 0 1-4.92-4.15.998.998 0 0 0-.98-.85c-.61 0-1.09.54-1 1.14A7.037 7.037 0 0 0 9 8.71V21c0 .55.45 1 1 1s1-.45 1-1v-5h2v5c0 .55.45 1 1 1s1-.45 1-1V10.05l3.24 3.24a.996.996 0 1 0 1.41-1.41l-3.76-3.77Z\"/\u003e\u003c/svg\u003e\u003c/sinch-tabs-icon-option\u003e\u003csinch-tabs-icon-option id=\"tab-animals\"\u003e\u003csvg slot=\"icon\" viewBox=\"0 0 24 24\"\u003e\u003cpath d=\"M17 14c-.24-.24-.44-.49-.65-.75C17.51 11.5 19 8.56 19 5c0-1.95-.74-3-2-3-1.54 0-3.96 2.06-5 5.97C10.96 4.06 8.54 2 7 2 5.74 2 5 3.05 5 5c0 3.56 1.49 6.5 2.65 8.25-.21.26-.41.51-.65.75-.25.25-2 1.39-2 3.5C5 19.98 7.02 22 9.5 22c1.5 0 2.5-.5 2.5-.5s1 .5 2.5.5c2.48 0 4.5-2.02 4.5-4.5 0-2.11-1.75-3.25-2-3.5Zm-.12-9.97c.06.17.12.48.12.97 0 2.84-1.11 5.24-2.07 6.78-.38-.26-.83-.48-1.4-.62.24-4.52 2.44-6.83 3.35-7.13ZM7 5c0-.49.06-.8.12-.97.91.3 3.11 2.61 3.36 7.13-.58.14-1.03.35-1.4.62C8.11 10.24 7 7.84 7 5Zm7.5 15c-1 0-1.8-.33-2.22-.56.42-.18.72-.71.72-.94 0-.28-.45-.5-1-.5s-1 .22-1 .5c0 .23.3.76.72.94-.42.23-1.22.56-2.22.56A2.5 2.5 0 0 1 7 17.5c0-.7.43-1.24 1-1.73.44-.36.61-.52 1.3-1.37.76-.95 1.09-1.4 2.7-1.4s1.94.45 2.7 1.4c.69.85.86 1.01 1.3 1.37.57.49 1 1.03 1 1.73a2.5 2.5 0 0 1-2.5 2.5Zm-.5-4c0 .41-.22.75-.5.75s-.5-.34-.5-.75.22-.75.5-.75.5.34.5.75Zm-3 0c0 .41-.22.75-.5.75s-.5-.34-.5-.75.22-.75.5-.75.5.34.5.75Z\"/\u003e\u003c/svg\u003e\u003c/sinch-tabs-icon-option\u003e\u003csinch-tabs-icon-option id=\"tab-food\"\u003e\u003csvg slot=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M19 19H3c-.55 0-1 .45-1 1s.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1Zm1-16H9v2.4l1.81 1.45c.12.09.19.24.19.39v4.26c0 .28-.22.5-.5.5h-4c-.28 0-.5-.22-.5-.5V7.24c0-.15.07-.3.19-.39L8 5.4V3H6c-1.1 0-2 .9-2 2v8c0 2.21 1.79 4 4 4h6c2.21 0 4-1.79 4-4v-3h2c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2Zm0 5h-2V5h2v3Z\"/\u003e\u003c/svg\u003e\u003c/sinch-tabs-icon-option\u003e\u003csinch-tabs-icon-option id=\"tab-travel\"\u003e\u003csvg slot=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"m21.99 14.77-1.43-4.11c-.14-.4-.52-.66-.97-.66H12.4c-.46 0-.83.26-.98.66L10 14.77v5.24c0 .55.45.99 1 .99s1-.45 1-1v-1h8v1a1 1 0 0 0 2 .01l-.01-5.24Zm-10.38-1.43.69-2c.05-.2.24-.34.46-.34h6.48c.21 0 .4.14.47.34l.69 2a.5.5 0 0 1-.47.66h-7.85a.5.5 0 0 1-.47-.66Zm.38 3.66c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1Zm8 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1Z\"/\u003e\u003cpath d=\"M14 4.5V9h1V4c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v4H3c-.55 0-1 .45-1 1v12h1V9.5c0-.28.22-.5.5-.5h4c.28 0 .5-.22.5-.5v-4c0-.28.22-.5.5-.5h5c.28 0 .5.22.5.5Z\"/\u003e\u003cpath d=\"M7 11H5v2h2v-2Zm5-6h-2v2h2V5ZM7 15H5v2h2v-2Zm0 4H5v2h2v-2Z\"/\u003e\u003c/svg\u003e\u003c/sinch-tabs-icon-option\u003e\u003csinch-tabs-icon-option id=\"tab-sports\"\u003e\u003csvg slot=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M19.52 2.49C17.18.15 12.9.62 9.97 3.55c-1.6 1.6-2.52 3.87-2.54 5.46-.02 1.58.26 3.89-1.35 5.5l-3.54 3.53c-.39.39-.39 1.02 0 1.42.39.39 1.02.39 1.42 0l3.53-3.54c1.61-1.61 3.92-1.33 5.5-1.35 1.58-.02 3.86-.94 5.46-2.54 2.93-2.92 3.41-7.2 1.07-9.54Zm-9.2 9.19c-1.53-1.53-1.05-4.61 1.06-6.72 2.11-2.11 5.18-2.59 6.72-1.06 1.53 1.53 1.05 4.61-1.06 6.72-2.11 2.11-5.18 2.59-6.72 1.06ZM18 17c.53 0 1.04.21 1.41.59.78.78.78 2.05 0 2.83-.37.37-.88.58-1.41.58-.53 0-1.04-.21-1.41-.59-.78-.78-.78-2.05 0-2.83.37-.37.88-.58 1.41-.58Zm0-2a3.998 3.998 0 0 0-2.83 6.83c.78.78 1.81 1.17 2.83 1.17a3.998 3.998 0 0 0 2.83-6.83A3.998 3.998 0 0 0 18 15Z\"/\u003e\u003c/svg\u003e\u003c/sinch-tabs-icon-option\u003e\u003csinch-tabs-icon-option id=\"tab-objects\"\u003e\u003csvg slot=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M12 3c-.46 0-.93.04-1.4.14-2.76.53-4.96 2.76-5.48 5.52-.48 2.61.48 5.01 2.22 6.56.43.38.66.91.66 1.47V19c0 1.1.9 2 2 2h.28a1.98 1.98 0 0 0 3.44 0H14c1.1 0 2-.9 2-2v-2.31c0-.55.22-1.09.64-1.46A6.956 6.956 0 0 0 19 10c0-3.87-3.13-7-7-7Zm.5 11h-1v-2.59L9.67 9.59l.71-.71L12 10.5l1.62-1.62.71.71-1.83 1.83V14Zm1 5c-.01 0-.02-.01-.03-.01V19h-2.94v-.01c-.01 0-.02.01-.03.01-.28 0-.5-.22-.5-.5s.22-.5.5-.5c.01 0 .02.01.03.01V18h2.94v.01c.01 0 .02-.01.03-.01.28 0 .5.22.5.5s-.22.5-.5.5Zm0-2h-3c-.28 0-.5-.22-.5-.5s.22-.5.5-.5h3c.28 0 .5.22.5.5s-.22.5-.5.5Z\"/\u003e\u003c/svg\u003e\u003c/sinch-tabs-icon-option\u003e\u003csinch-tabs-icon-option id=\"tab-symbols\"\u003e\u003csvg slot=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M10 5H4c-.55 0-1 .45-1 1s.45 1 1 1h2v3c0 .55.45 1 1 1s1-.45 1-1V7h2c.55 0 1-.45 1-1s-.45-1-1-1Zm0-3H4c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1Zm10.89 11.11a.996.996 0 0 0-1.41 0l-6.36 6.36a.996.996 0 1 0 1.41 1.41l6.36-6.36a.996.996 0 0 0 0-1.41ZM14.5 16a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm5 5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm-4-10A2.5 2.5 0 0 0 18 8.5V4h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1v3.51c-.42-.32-.93-.51-1.5-.51a2.5 2.5 0 0 0 0 5Zm-5.05 7.09a.996.996 0 1 0-1.41-1.41l-.71.71-.71-.71.35-.35a2.499 2.499 0 0 0-1.77-4.27 2.499 2.499 0 0 0-1.77 4.27l.35.35-1.06 1.06c-.98.98-.98 2.56 0 3.54.5.48 1.14.72 1.78.72.64 0 1.28-.24 1.77-.73l1.06-1.06.71.71a.996.996 0 1 0 1.41-1.41l-.71-.71.71-.71Zm-4.6-3.89a.5.5 0 0 1 .35-.15.5.5 0 0 1 .35.15c.19.2.19.51 0 .71l-.35.35-.35-.36a.5.5 0 0 1-.15-.35.5.5 0 0 1 .15-.35Zm0 5.65a.5.5 0 0 1-.35.15.5.5 0 0 1-.35-.15.5.5 0 0 1-.15-.35.5.5 0 0 1 .15-.35l1.06-1.06.71.71-1.07 1.05Z\"/\u003e\u003c/svg\u003e\u003c/sinch-tabs-icon-option\u003e\u003c/sinch-tabs\u003e\u003cdiv id=\"list-wrapper\"\u003e\u003cdiv id=\"list\"\u003e\u003c/div\u003e\u003cdiv id=\"not-found\"\u003e\u003csinch-text type=\"m\"\u003eNo results\u003c/sinch-text\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e';\nconst groupLabels = [\n  \"Emotions\",\n  \"People\",\n  \"Animals and nature\",\n  \"Food and drinks\",\n  \"Travel and places\",\n  \"Sports and activities\",\n  \"Objects\",\n  \"Symbols and flags\"\n];\nconst data = dataJson;\nconst template$H = document.createElement(\"template\");\nconst MIN_SEARCH_LENGTH = 2;\nconst SEARCH_DEBOUNCE_TIMEOUT = 300;\ntemplate$H.innerHTML = templateHTML$H;\nclass EmojiPicker extends NectaryElement {\n  #$tabs;\n  #$searchInput;\n  #$searchClearButton;\n  #$skinPopover;\n  #$skinMenu;\n  #$skinSwatch;\n  #$skinButton;\n  #$list;\n  #$notFound;\n  #controller = null;\n  #$sh;\n  #searchDebounce;\n  #currentSkinTone = 0;\n  #prevTabsValue = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$H.content.cloneNode(true));\n    this.#$sh = shadowRoot;\n    this.#$tabs = shadowRoot.querySelector(\"#tabs\");\n    this.#$searchInput = shadowRoot.querySelector(\"#search\");\n    this.#$searchClearButton = shadowRoot.querySelector(\"#search-clear\");\n    this.#$skinPopover = shadowRoot.querySelector(\"#skin-popover\");\n    this.#$skinMenu = shadowRoot.querySelector(\"#skin-menu\");\n    this.#$skinSwatch = shadowRoot.querySelector(\"#skin-swatch\");\n    this.#$skinButton = shadowRoot.querySelector(\"#skin-button\");\n    this.#$list = shadowRoot.querySelector(\"#list\");\n    this.#$notFound = shadowRoot.querySelector(\"#not-found\");\n    this.#searchDebounce = debounceTimeout(SEARCH_DEBOUNCE_TIMEOUT)(\n      this.#updateSearch\n    );\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.#$tabs.addEventListener(\"-change\", this.#onTabsChange, {\n      signal\n    });\n    this.#$searchInput.addEventListener(\n      \"-change\",\n      this.#onSearchChange,\n      { signal }\n    );\n    this.#$searchClearButton.addEventListener(\n      \"-click\",\n      this.#onSearchClearClick,\n      { signal }\n    );\n    this.#$skinButton.addEventListener(\"-click\", this.#onSkinButtonClick, {\n      signal\n    });\n    this.#$skinPopover.addEventListener(\"-close\", this.#onSkinPopoverClose, {\n      signal\n    });\n    this.#$skinMenu.addEventListener(\n      \"-change\",\n      this.#onSkinMenuChange,\n      { signal }\n    );\n    this.#$list.addEventListener(\"click\", this.#onListClick, { signal });\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, { signal });\n    this.#updateTabs();\n    this.#updateEmojis();\n  }\n  disconnectedCallback() {\n    this.#searchDebounce.cancel();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  get skinToneButtonRect() {\n    return getRect(this.#$skinButton);\n  }\n  get searchInputRect() {\n    return getRect(this.#$searchInput);\n  }\n  get searchClearButtonRect() {\n    return getRect(this.#$searchClearButton);\n  }\n  nthSkinToneRect(index) {\n    return this.#$skinMenu.nthItemRect(index);\n  }\n  nthTabRect(index) {\n    return this.#$tabs.nthOptionRect(index);\n  }\n  nthEmojiRect(index) {\n    const $el = this.#$list.children[index];\n    return $el != null ? getRect($el) : null;\n  }\n  #onListClick = (e) =\u003e {\n    const value = e.target.getAttribute(\"data-value\");\n    if (value === null) {\n      return;\n    }\n    this.dispatchEvent(new CustomEvent(\"-change\", { detail: value }));\n  };\n  #onTabsChange = (e) =\u003e {\n    const value = e.detail;\n    updateAttribute(this.#$tabs, \"value\", value);\n    updateAttribute(this.#$searchInput, \"value\", \"\");\n    this.#updateEmojis();\n  };\n  #onSearchChange = (e) =\u003e {\n    this.#$searchInput.value = e.detail;\n    this.#searchDebounce.fn();\n    setClass(this.#$searchClearButton, \"active\", e.detail.length \u003e 0);\n  };\n  #onSearchClearClick = () =\u003e {\n    this.#$searchInput.value = \"\";\n    this.#$searchInput.focus();\n    this.#searchDebounce.fn();\n    setClass(this.#$searchClearButton, \"active\", false);\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  get focusable() {\n    return true;\n  }\n  #getDocumentRoot() {\n    return Reflect.has(this.#$sh, \"createElement\") ? this.#$sh : document;\n  }\n  #updateSearch = () =\u003e {\n    const value = this.#$searchInput.value;\n    if (value.length \u003c MIN_SEARCH_LENGTH) {\n      if (this.#isSearchMode()) {\n        if (this.#prevTabsValue !== null) {\n          this.#$tabs.setAttribute(\"value\", this.#prevTabsValue);\n        }\n        this.#updateEmojis();\n      }\n      return;\n    }\n    const currentActiveTab = this.#$tabs.getAttribute(\"value\");\n    if (currentActiveTab !== null) {\n      this.#prevTabsValue = currentActiveTab;\n    }\n    this.#$tabs.removeAttribute(\"value\");\n    this.#updateSearchEmojis();\n  };\n  #updateTabs() {\n    const tabOptions = this.#$tabs.querySelectorAll(\"sinch-tabs-icon-option\");\n    const activeTabName = data[0].name;\n    const numTabs = Math.min(data.length, tabOptions.length);\n    for (let i = 0; i \u003c numTabs; i++) {\n      const group = data[i];\n      const tabOption = tabOptions[i];\n      tabOption.setAttribute(\"value\", group.name);\n      tabOption.setAttribute(\"aria-label\", groupLabels[i]);\n    }\n    updateAttribute(this.#$tabs, \"value\", activeTabName);\n  }\n  *#iterateSearchEmojis(searchValue, skinTone) {\n    for (const group of data) {\n      for (const entry of group.emojis) {\n        if (entry.label.toLowerCase().includes(searchValue)) {\n          const hasSkins = entry.skins != null;\n          if (skinTone === 0 || !hasSkins) {\n            yield entry;\n          } else if (hasSkins) {\n            for (const skin of entry.skins) {\n              if (skinTone === skin.tone || Array.isArray(skin.tone) \u0026\u0026 skin.tone.includes(skinTone)) {\n                yield skin;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  *#iterateGroupEmojis(group, skinTone) {\n    for (const entry of group.emojis) {\n      const hasSkins = entry.skins != null;\n      if (skinTone === 0 || !hasSkins) {\n        yield entry;\n      } else if (hasSkins) {\n        for (const skin of entry.skins) {\n          if (skinTone === skin.tone || Array.isArray(skin.tone) \u0026\u0026 skin.tone.includes(skinTone)) {\n            yield skin;\n          }\n        }\n      }\n    }\n  }\n  #updateSearchEmojis() {\n    const searchValue = this.#$searchInput.value;\n    if (searchValue.length \u003c MIN_SEARCH_LENGTH) {\n      return;\n    }\n    const doc = this.#getDocumentRoot();\n    const fragment = document.createDocumentFragment();\n    const emojiBaseUrl = getEmojiBaseUrl(this);\n    let someFound = false;\n    for (const entry of this.#iterateSearchEmojis(\n      searchValue,\n      this.#currentSkinTone\n    )) {\n      const el = this.#createEmojiElement(doc, entry, emojiBaseUrl);\n      someFound = true;\n      fragment.appendChild(el);\n    }\n    setClass(this.#$notFound, \"active\", !someFound);\n    this.#$list.replaceChildren(fragment);\n    this.#$list.scrollTo(0, 0);\n  }\n  #updateEmojis() {\n    if (this.#isSearchMode()) {\n      return;\n    }\n    const activeGroup = getAttribute(this.#$tabs, \"value\");\n    const group = data.find((group2) =\u003e group2.name === activeGroup);\n    if (group == null) {\n      return;\n    }\n    const doc = this.#getDocumentRoot();\n    const fragment = document.createDocumentFragment();\n    const emojiBaseUrl = getEmojiBaseUrl(this);\n    for (const entry of this.#iterateGroupEmojis(\n      group,\n      this.#currentSkinTone\n    )) {\n      const el = this.#createEmojiElement(doc, entry, emojiBaseUrl);\n      fragment.appendChild(el);\n    }\n    this.#$list.replaceChildren(fragment);\n    this.#$list.scrollTo(0, 0);\n  }\n  #onSkinButtonClick = () =\u003e {\n    updateBooleanAttribute(\n      this.#$skinPopover,\n      \"open\",\n      !getBooleanAttribute(this.#$skinPopover, \"open\")\n    );\n  };\n  #onSkinPopoverClose = () =\u003e {\n    updateBooleanAttribute(this.#$skinPopover, \"open\", false);\n  };\n  #onSkinMenuChange = (e) =\u003e {\n    this.#$skinSwatch.name = e.detail;\n    this.#$skinMenu.value = e.detail;\n    switch (e.detail) {\n      case \"skintone-default\": {\n        this.#currentSkinTone = 0;\n        break;\n      }\n      case \"skintone-light\": {\n        this.#currentSkinTone = 1;\n        break;\n      }\n      case \"skintone-light-medium\": {\n        this.#currentSkinTone = 2;\n        break;\n      }\n      case \"skintone-medium\": {\n        this.#currentSkinTone = 3;\n        break;\n      }\n      case \"skintone-medium-dark\": {\n        this.#currentSkinTone = 4;\n        break;\n      }\n      case \"skintone-dark\": {\n        this.#currentSkinTone = 5;\n        break;\n      }\n    }\n    this.#onSkinPopoverClose();\n    if (this.#isSearchMode()) {\n      this.#updateSearchEmojis();\n    } else {\n      this.#updateEmojis();\n    }\n  };\n  #isSearchMode() {\n    const activeTab = getAttribute(this.#$tabs, \"value\");\n    return activeTab === null || activeTab.length === 0;\n  }\n  #createEmojiElement(doc, emoji, baseUrl) {\n    const btn = doc.createElement(\"sinch-button\");\n    const el = doc.createElement(\"sinch-emoji\");\n    el.setAttribute(\"slot\", \"icon\");\n    el.setAttribute(\"char\", emoji.emoji);\n    el.setAttribute(\"label\", emoji.label);\n    setEmojiBaseUrl(el, baseUrl);\n    btn.setAttribute(\"aria-label\", emoji.label);\n    btn.setAttribute(\"size\", \"s\");\n    btn.setAttribute(\"data-value\", emoji.emoji);\n    btn.appendChild(el);\n    return btn;\n  }\n}\ndefineCustomElement(\"sinch-emoji-picker\", EmojiPicker);\nconst templateHTML$G = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:column;width:100%}#bottom,#top{display:flex;align-items:baseline}#top{height:24px;margin-bottom:2px}#top.empty{display:none}#additional,#invalid,#label,#optional{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#label{font:var(--sinch-comp-field-font-label);color:var(--sinch-comp-field-color-default-label-initial)}#optional{flex:1;font:var(--sinch-comp-field-font-optional);color:var(--sinch-comp-field-color-default-optional-initial);text-align:right}#additional{flex:1;text-align:right;font:var(--sinch-comp-field-font-additional);color:var(--sinch-comp-field-color-default-additional-initial);line-height:20px;margin-top:2px}#additional:empty{display:none}#invalid{font:var(--sinch-comp-field-font-invalid);color:var(--sinch-comp-field-color-invalid-text-initial);line-height:20px;margin-top:2px}#invalid:empty{display:none}#tooltip{align-self:center;margin:0 8px;display:flex}#tooltip.empty{display:none}:host([disabled]) #label{color:var(--sinch-comp-field-color-disabled-label-initial)}:host([disabled]) #additional{color:var(--sinch-comp-field-color-disabled-additional-initial)}:host([disabled]) #optional{color:var(--sinch-comp-field-color-disabled-optional-initial)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"top\"\u003e\u003clabel id=\"label\" for=\"input\"\u003e\u003c/label\u003e\u003cdiv id=\"tooltip\"\u003e\u003cslot name=\"tooltip\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cspan id=\"optional\"\u003e\u003c/span\u003e\u003c/div\u003e\u003cslot name=\"input\"\u003e\u003c/slot\u003e\u003cdiv id=\"bottom\"\u003e\u003cdiv id=\"invalid\"\u003e\u003c/div\u003e\u003cdiv id=\"additional\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$G = document.createElement(\"template\");\ntemplate$G.innerHTML = templateHTML$G;\nclass Field extends NectaryElement {\n  topSection;\n  #$label;\n  #$optionalText;\n  #$additionalText;\n  #$invalidText;\n  #$inputSlot;\n  #$tooltipWrapper;\n  #$tooltipSlot;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$G.content.cloneNode(true));\n    this.topSection = shadowRoot.querySelector(\"#top\");\n    this.#$label = shadowRoot.querySelector(\"#label\");\n    this.#$optionalText = shadowRoot.querySelector(\"#optional\");\n    this.#$additionalText = shadowRoot.querySelector(\"#additional\");\n    this.#$invalidText = shadowRoot.querySelector(\"#invalid\");\n    this.#$inputSlot = shadowRoot.querySelector('slot[name=\"input\"]');\n    this.#$tooltipSlot = shadowRoot.querySelector('slot[name=\"tooltip\"]');\n    this.#$tooltipWrapper = shadowRoot.querySelector(\"#tooltip\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.shouldShowTopSection();\n    this.#$label.addEventListener(\"click\", this.#onLabelClick, options);\n    this.#$tooltipSlot.addEventListener(\"slotchange\", this.#onTooltipSlotChange, options);\n    this.#$inputSlot.addEventListener(\"slotchange\", this.#onInputSlotChange, options);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\n      \"label\",\n      \"optionaltext\",\n      \"additionaltext\",\n      \"invalidtext\",\n      \"disabled\"\n    ];\n  }\n  shouldShowTopSection() {\n    const label = getAttribute(this, \"label\");\n    const optionaltext = getAttribute(this, \"optionaltext\");\n    setClass(this.topSection, \"empty\", label === null \u0026\u0026 optionaltext === null);\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"label\": {\n        this.#$label.textContent = newVal;\n        break;\n      }\n      case \"optionaltext\": {\n        this.#$optionalText.textContent = newVal;\n        break;\n      }\n      case \"additionaltext\": {\n        this.#$additionalText.textContent = newVal;\n        break;\n      }\n      case \"invalidtext\": {\n        this.#$invalidText.textContent = newVal;\n        break;\n      }\n      case \"disabled\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          break;\n        }\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n    this.shouldShowTopSection();\n  }\n  set label(value) {\n    updateAttribute(this, \"label\", value);\n  }\n  get label() {\n    return getAttribute(this, \"label\");\n  }\n  set optionalText(value) {\n    updateAttribute(this, \"optionaltext\", value);\n  }\n  get optionalText() {\n    return getAttribute(this, \"optionaltext\");\n  }\n  set additionalText(value) {\n    updateAttribute(this, \"additionaltext\", value);\n  }\n  get additionalText() {\n    return getAttribute(this, \"additionaltext\");\n  }\n  set invalidText(value) {\n    updateAttribute(this, \"invalidtext\", value);\n  }\n  get invalidText() {\n    return getAttribute(this, \"invalidtext\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  #onLabelClick = () =\u003e {\n    getFirstSlotElement(this.#$inputSlot)?.focus?.();\n  };\n  #onTooltipSlotChange = () =\u003e {\n    setClass(this.#$tooltipWrapper, \"empty\", this.#$tooltipSlot.assignedElements().length === 0);\n  };\n  #onInputSlotChange = () =\u003e {\n    const inputElement = getFirstSlotElement(this.#$inputSlot);\n    const labelText = this.#$label.textContent;\n    if (inputElement !== null \u0026\u0026 labelText != null \u0026\u0026 labelText.length \u003e 0) {\n      inputElement.setAttribute(\"aria-label\", \"label\");\n    }\n  };\n}\ndefineCustomElement(\"sinch-field\", Field);\nconst doFilesSatisfySize$1 = (files, size) =\u003e {\n  if (size === null || size \u003c= 0) {\n    return true;\n  }\n  return files.every((file) =\u003e {\n    return file.size \u003c= size;\n  });\n};\nconst templateHTML$F = \"\u003cstyle\u003e:host{display:inline-block}::slotted(*){display:block}\u003c/style\u003e\u003cslot\u003e\u003c/slot\u003e\";\nconst template$F = document.createElement(\"template\");\ntemplate$F.innerHTML = templateHTML$F;\nclass FilePicker extends NectaryElement {\n  #$input;\n  #$targetSlot;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$F.content.cloneNode(true));\n    this.#$input = document.createElement(\"input\");\n    this.#$input.type = \"file\";\n    this.#$targetSlot = shadowRoot.querySelector(\"slot\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const options = { signal: this.#controller.signal };\n    this.#$targetSlot.addEventListener(\"slotchange\", this.#onTargetSlotChange, options);\n    this.#$input.addEventListener(\"change\", this.#onInputChange, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    this.addEventListener(\"-invalid\", this.#onInvalidReactHandler, options);\n    this.#onTargetSlotChange();\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"accept\", \"multiple\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"multiple\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          return;\n        }\n        updateBooleanAttribute(this.#$input, \"multiple\", isAttrTrue(newVal));\n        break;\n      }\n      case \"accept\": {\n        updateAttribute(this.#$input, \"accept\", newVal);\n        break;\n      }\n    }\n  }\n  set multiple(isMultiple) {\n    updateBooleanAttribute(this, \"multiple\", isMultiple);\n  }\n  get multiple() {\n    return getBooleanAttribute(this, \"multiple\");\n  }\n  set accept(value) {\n    updateAttribute(this, \"accept\", value);\n  }\n  get accept() {\n    return getAttribute(this, \"accept\");\n  }\n  get size() {\n    return getIntegerAttribute(this, \"size\", null);\n  }\n  set size(value) {\n    updateAttribute(this, \"size\", value);\n  }\n  #onTargetSlotChange = () =\u003e {\n    this.#$targetSlot.removeEventListener(\"click\", this.#onTargetClick);\n    this.#$targetSlot.addEventListener(\"click\", this.#onTargetClick);\n  };\n  #onTargetClick = () =\u003e {\n    this.#$input.click();\n  };\n  #onInputChange = () =\u003e {\n    if (this.#$input.files === null) {\n      return;\n    }\n    const files = Array.from(this.#$input.files);\n    this.#$input.value = \"\";\n    if (!doFilesSatisfySize$1(files, this.size)) {\n      this.dispatchEvent(\n        new CustomEvent(\"-invalid\", {\n          detail: \"size\"\n        })\n      );\n      return;\n    }\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", {\n        detail: files\n      })\n    );\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  #onInvalidReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-invalid\")?.(e);\n    getReactEventHandler(this, \"onInvalid\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-file-picker\", FilePicker);\nconst areFilesAccepted = (files, accept) =\u003e {\n  if (accept === null) {\n    return true;\n  }\n  const acceptValues = accept.split(/\\s*,\\s*/);\n  return files.every((file) =\u003e {\n    return acceptValues.some((acceptValue) =\u003e {\n      if (acceptValue.startsWith(\".\")) {\n        return file.name.endsWith(acceptValue);\n      }\n      if (acceptValue === \"image/*\") {\n        return file.type.startsWith(\"image/\");\n      }\n      if (acceptValue === \"video/*\") {\n        return file.type.startsWith(\"video/\");\n      }\n      if (acceptValue === \"audio/*\") {\n        return file.type.startsWith(\"audio/\");\n      }\n      return acceptValue === file.type;\n    });\n  });\n};\nconst areItemsAccepted = (item, accept) =\u003e {\n  if (accept === null) {\n    return true;\n  }\n  const acceptValues = accept.split(/\\s*,\\s*/);\n  return item.every((file) =\u003e {\n    return acceptValues.some((acceptValue) =\u003e {\n      if (acceptValue === \"image/*\") {\n        return file.type.startsWith(\"image/\");\n      }\n      if (acceptValue === \"video/*\") {\n        return file.type.startsWith(\"video/\");\n      }\n      if (acceptValue === \"audio/*\") {\n        return file.type.startsWith(\"audio/\");\n      }\n      return acceptValue === file.type;\n    });\n  });\n};\nconst doFilesSatisfySize = (files, size) =\u003e {\n  if (size === null || size \u003c= 0) {\n    return true;\n  }\n  return files.every((file) =\u003e {\n    return file.size \u003c= size;\n  });\n};\nconst templateHTML$E = '\u003cstyle\u003e:host{display:block}#wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;align-content:center;gap:8px;min-height:148px;min-width:148px;box-sizing:border-box;padding:16px;border-radius:var(--sinch-comp-file-drop-shape-radius);background-color:var(--sinch-comp-file-drop-color-default-background-initial)}#wrapper::after{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;border:1px dashed var(--sinch-comp-file-drop-color-default-border-initial);border-radius:var(--sinch-comp-file-drop-shape-radius);pointer-events:none}#placeholder{align-self:center;text-align:center;--sinch-global-color-text:var(--sinch-comp-file-drop-color-default-placeholder-initial);--sinch-comp-text-font:var(--sinch-comp-file-drop-font-placeholder)}:host([invalid]) #wrapper{background-color:var(--sinch-comp-file-drop-color-invalid-background-initial)}:host([invalid]) #wrapper::after{border-color:var(--sinch-comp-file-drop-color-invalid-border-initial);border-width:1px}#wrapper.drop::after{pointer-events:all}#wrapper.drop.valid{background-color:var(--sinch-comp-file-drop-color-default-background-active)}#wrapper.drop.valid::after{border-color:var(--sinch-comp-file-drop-color-default-border-active);border-width:2px}#wrapper.drop.valid\u003e#placeholder{--sinch-global-color-text:var(--sinch-comp-file-drop-color-default-placeholder-active)}#wrapper.drop.invalid{background-color:var(--sinch-comp-file-drop-color-invalid-background-active)}#wrapper.drop.invalid::after{border-color:var(--sinch-comp-file-drop-color-invalid-border-active);border-width:2px}#wrapper.drop.invalid\u003e#placeholder{--sinch-global-color-text:var(--sinch-comp-file-drop-color-invalid-placeholder-active)}:host([disabled])\u003e#wrapper\u003e#placeholder{--sinch-global-color-text:var(--sinch-comp-file-drop-color-disabled-placeholder-initial)}:host([disabled])\u003e#wrapper{background-color:var(--sinch-comp-file-drop-color-disabled-background-initial)}:host([disabled])\u003e#wrapper::after{border-color:var(--sinch-comp-file-drop-color-disabled-border-initial);border-width:1px}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003csinch-text id=\"placeholder\" type=\"m\" aria-hidden=\"true\"\u003e\u003c/sinch-text\u003e\u003csinch-file-picker id=\"file-picker\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/sinch-file-picker\u003e\u003c/div\u003e';\nconst template$E = document.createElement(\"template\");\ntemplate$E.innerHTML = templateHTML$E;\nclass FileDrop extends NectaryElement {\n  #$filePicker;\n  #$dropArea;\n  #$placeholder;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$E.content.cloneNode(true));\n    this.#$dropArea = shadowRoot.querySelector(\"#wrapper\");\n    this.#$placeholder = shadowRoot.querySelector(\"#placeholder\");\n    this.#$filePicker = shadowRoot.querySelector(\"#file-picker\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    this.addEventListener(\"-invalid\", this.#onInvalidReactHandler, options);\n    this.addEventListener(\"dragenter\", this.#onDragEnter, options);\n    this.addEventListener(\"dragleave\", this.#onDragLeave, options);\n    this.addEventListener(\"dragover\", this.#onDragOver, options);\n    this.addEventListener(\"drop\", this.#onDrop, options);\n    this.#$filePicker.addEventListener(\"-change\", this.#onFilePickerChange, options);\n    this.#$filePicker.addEventListener(\"-invalid\", this.#onFilePickerInvalid, options);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\n      \"accept\",\n      \"multiple\",\n      \"placeholder\",\n      \"disabled\",\n      \"invalid\",\n      \"size\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"multiple\": {\n        updateAttribute(this.#$filePicker, \"multiple\", newVal);\n        break;\n      }\n      case \"accept\": {\n        updateAttribute(this.#$filePicker, \"accept\", newVal);\n        break;\n      }\n      case \"placeholder\": {\n        this.#$placeholder.textContent = newVal;\n        break;\n      }\n      case \"disabled\": {\n        this.#setDragEffect(false);\n        updateBooleanAttribute(this, \"disabled\", isAttrTrue(newVal));\n        break;\n      }\n      case \"invalid\": {\n        updateBooleanAttribute(this, \"invalid\", isAttrTrue(newVal));\n        break;\n      }\n      case \"size\": {\n        updateAttribute(this.#$filePicker, \"size\", newVal);\n        break;\n      }\n    }\n  }\n  set multiple(isMultiple) {\n    updateBooleanAttribute(this, \"multiple\", isMultiple);\n  }\n  get multiple() {\n    return getBooleanAttribute(this, \"multiple\");\n  }\n  set accept(value) {\n    updateAttribute(this, \"accept\", value);\n  }\n  get accept() {\n    return getAttribute(this, \"accept\");\n  }\n  get size() {\n    return getIntegerAttribute(this, \"size\", null);\n  }\n  set size(value) {\n    updateAttribute(this, \"size\", value);\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set placeholder(value) {\n    updateAttribute(this, \"placeholder\", value);\n  }\n  get placeholder() {\n    return getAttribute(this, \"placeholder\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set invalid(isInvalid) {\n    updateBooleanAttribute(this, \"invalid\", isInvalid);\n  }\n  get invalid() {\n    return getBooleanAttribute(this, \"invalid\");\n  }\n  #setDragEffect(shouldEnable, isValid = false) {\n    const isElementEnabled = !this.disabled;\n    if (shouldEnable) {\n      if (isElementEnabled) {\n        setClass(this.#$dropArea, \"drop\", true);\n        setClass(this.#$dropArea, \"valid\", isValid);\n        setClass(this.#$dropArea, \"invalid\", !isValid);\n      }\n    } else {\n      setClass(this.#$dropArea, \"drop\", false);\n      setClass(this.#$dropArea, \"valid\", false);\n      setClass(this.#$dropArea, \"invalid\", false);\n    }\n  }\n  #onDragEnter = (e) =\u003e {\n    e.stopPropagation();\n    e.preventDefault();\n    const items = e.dataTransfer?.items;\n    let isValidItems = false;\n    if (items != null \u0026\u0026 items.length \u003e 0) {\n      const itemsArray = Array.from(items);\n      isValidItems = areItemsAccepted(itemsArray, this.accept);\n    }\n    this.#setDragEffect(true, isValidItems);\n  };\n  #onDragLeave = (e) =\u003e {\n    e.stopPropagation();\n    e.preventDefault();\n    this.#setDragEffect(false);\n  };\n  #onDragOver = (e) =\u003e {\n    e.stopPropagation();\n    e.preventDefault();\n  };\n  #onDrop = (e) =\u003e {\n    e.stopPropagation();\n    e.preventDefault();\n    this.#setDragEffect(false);\n    if (this.disabled) {\n      return;\n    }\n    const dt = e.dataTransfer;\n    if (dt === null) {\n      return;\n    }\n    if (dt.files.length === 0) {\n      return;\n    }\n    if (!this.multiple \u0026\u0026 dt.files.length \u003e 1) {\n      this.#dispatchInvalidEvent(\"multiple\");\n      return;\n    }\n    const files = Array.from(dt.files);\n    if (!areFilesAccepted(files, this.accept)) {\n      this.#dispatchInvalidEvent(\"accept\");\n      return;\n    }\n    if (!doFilesSatisfySize(files, this.size)) {\n      this.#dispatchInvalidEvent(\"size\");\n      return;\n    }\n    this.#dispatchChangeEvent(files);\n  };\n  #onFilePickerChange = (e) =\u003e {\n    this.#dispatchChangeEvent(e.detail);\n  };\n  #onFilePickerInvalid = (e) =\u003e {\n    this.#dispatchInvalidEvent(e.detail);\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  #onInvalidReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-invalid\")?.(e);\n    getReactEventHandler(this, \"onInvalid\")?.(e);\n  };\n  #dispatchChangeEvent(files) {\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", {\n        detail: files\n      })\n    );\n  }\n  #dispatchInvalidEvent(type) {\n    this.dispatchEvent(\n      new CustomEvent(\"-invalid\", {\n        detail: type\n      })\n    );\n  }\n}\ndefineCustomElement(\"sinch-file-drop\", FileDrop);\nconst templateHTML$D = '\u003cstyle\u003e@keyframes spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}:host{display:block}:host([data-size=\"l\"]){width:50px;height:50px;contain:strict}:host([data-size=\"m\"]){width:24px;height:24px;contain:strict}:host([data-size=\"s\"]){width:16px;height:16px;contain:strict}#spinner-size-l,#spinner-size-m,#spinner-size-s{display:none;will-change:transform}:host([data-size=\"l\"])\u003e#spinner-size-l{display:block;animation:1s linear infinite spinner}:host([data-size=\"m\"])\u003e#spinner-size-m{display:block;animation:1s linear infinite spinner}:host([data-size=\"s\"])\u003e#spinner-size-s{display:block;animation:1s linear infinite spinner}.bg{opacity:.3;stroke:var(--sinch-global-color-icon,var(--sinch-sys-color-text-default))}.fg{stroke:var(--sinch-global-color-icon,var(--sinch-sys-color-text-default))}\u003c/style\u003e\u003csvg id=\"spinner-size-l\" width=\"50\" height=\"50\" fill=\"none\"\u003e\u003ccircle class=\"bg\" cx=\"25\" cy=\"25\" r=\"22\" stroke-width=\"6\"/\u003e\u003cpath class=\"fg\" d=\"M25 3a22 22 0 0 1 22 22\" stroke-width=\"6\" stroke-linecap=\"round\"/\u003e\u003c/svg\u003e \u003csvg id=\"spinner-size-m\" width=\"24\" height=\"24\" fill=\"none\"\u003e\u003ccircle class=\"bg\" cx=\"12\" cy=\"12\" r=\"9\" stroke-width=\"4\"/\u003e\u003cpath class=\"fg\" d=\"M21 12a9 9 0 0 0-9-9\" stroke-width=\"4\" stroke-linecap=\"round\"/\u003e\u003c/svg\u003e \u003csvg id=\"spinner-size-s\" width=\"16\" height=\"16\" fill=\"none\"\u003e\u003ccircle class=\"bg\" cx=\"8\" cy=\"8\" r=\"6\" stroke-width=\"2\"/\u003e\u003cpath class=\"fg\" d=\"M14 8a6 6 0 0 0-6-6\" stroke-width=\"2\" stroke-linecap=\"round\"/\u003e\u003c/svg\u003e';\nconst template$D = document.createElement(\"template\");\ntemplate$D.innerHTML = templateHTML$D;\nclass Spinner extends NectaryElement {\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$D.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.setAttribute(\"aria-live\", \"polite\");\n    this.setAttribute(\"aria-busy\", \"true\");\n    subscribeContext(this, \"size\", this.#onContextSize, this.#controller.signal);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"size\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"size\": {\n        updateAttribute(this, \"data-size\", newVal);\n        break;\n      }\n    }\n  }\n  set size(size) {\n    updateLiteralAttribute(this, sizeValues, \"size\", size);\n  }\n  get size() {\n    return getLiteralAttribute(this, sizeValues, \"size\", DEFAULT_SIZE);\n  }\n  #onContextSize = (e) =\u003e {\n    if (this.hasAttribute(\"size\") === true) {\n      return;\n    }\n    switch (e.detail) {\n      case \"l\":\n      case \"m\": {\n        this.setAttribute(\"data-size\", \"m\");\n        break;\n      }\n      default: {\n        this.setAttribute(\"data-size\", \"s\");\n      }\n    }\n  };\n}\ndefineCustomElement(\"sinch-spinner\", Spinner);\nconst typeValues$2 = [\"pending\", \"loading\", \"progress\", \"success\", \"error\"];\nconst templateHTML$C = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:row;align-items:flex-start;padding:12px 16px;box-sizing:border-box;min-height:48px;min-width:148px;border-radius:var(--sinch-comp-file-status-shape-radius)}:host([type=error]) #wrapper{background-color:var(--sinch-comp-file-status-color-error-background)}:host([type=success]) #wrapper{background-color:var(--sinch-comp-file-status-color-success-background)}:host([type=pending]) #wrapper{background-color:var(--sinch-comp-file-status-color-pending-background)}:host([type=progress]) #wrapper{background-color:var(--sinch-comp-file-status-color-progress-background)}:host([type=loading]) #wrapper{background-color:var(--sinch-comp-file-status-color-loading-background)}#content-wrapper{display:flex;flex-direction:column;gap:8px;flex:1;min-width:0;min-height:24px;margin-left:16px}:host([type=error]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-error-text)}:host([type=success]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-success-text)}:host([type=pending]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-pending-text)}:host([type=progress]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-progress-text)}:host([type=loading]) #filename{--sinch-global-color-text:var(--sinch-comp-file-status-color-loading-text)}#action{display:flex;gap:4px;height:32px;margin-top:-4px;margin-bottom:-4px}#icon-error,#icon-loading,#icon-pending,#icon-progress,#icon-success{display:none}#icon-pending{--sinch-global-color-icon:var(--sinch-comp-file-status-color-pending-icon)}#icon-success{--sinch-global-color-icon:var(--sinch-comp-file-status-color-success-icon)}#icon-progress{--sinch-global-color-icon:var(--sinch-comp-file-status-color-progress-icon)}#icon-error{--sinch-global-color-icon:var(--sinch-comp-file-status-color-error-icon)}#icon-loading{--sinch-global-color-icon:var(--sinch-comp-file-status-color-loading-icon)}:host([type=error]) #icon-error,:host([type=loading]) #icon-loading,:host([type=pending]) #icon-pending,:host([type=progress]) #icon-progress,:host([type=success]) #icon-success{display:block}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003csinch-spinner id=\"icon-loading\" size=\"m\"\u003e\u003c/sinch-spinner\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-clipboard-question\" id=\"icon-pending\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"circle-check\" id=\"icon-success\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-file-lines\" id=\"icon-progress\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"octagon-exclamation\" id=\"icon-error\"\u003e\u003c/sinch-icon\u003e\u003cdiv id=\"content-wrapper\"\u003e\u003csinch-text id=\"filename\" type=\"m\" ellipsis\u003e\u003c/sinch-text\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv id=\"action\"\u003e\u003cslot name=\"action\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$C = document.createElement(\"template\");\ntemplate$C.innerHTML = templateHTML$C;\nclass FileStatus extends NectaryElement {\n  #$filename;\n  #$contentSlot;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$C.content.cloneNode(true));\n    this.#$filename = shadowRoot.querySelector(\"#filename\");\n    this.#$contentSlot = shadowRoot.querySelector('slot[name=\"content\"]');\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.#$contentSlot.addEventListener(\n      \"slotchange\",\n      this.#onContentSlotChange,\n      options\n    );\n    this.#onContentSlotChange();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues$2, \"type\");\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues$2, \"type\", value);\n  }\n  get filename() {\n    return getAttribute(this, \"filename\", \"\");\n  }\n  set filename(value) {\n    updateAttribute(this, \"filename\", value);\n  }\n  static get observedAttributes() {\n    return [\"filename\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"filename\": {\n        this.#$filename.textContent = newVal;\n        break;\n      }\n    }\n  }\n  #onContentSlotChange = () =\u003e {\n    updateBooleanAttribute(\n      this.#$filename,\n      \"emphasized\",\n      this.#$contentSlot.assignedElements().length \u003e 0\n    );\n  };\n}\ndefineCustomElement(\"sinch-file-status\", FileStatus);\nlet flagUrl = null;\nconst getFlagUrl = (root, code) =\u003e {\n  if (code === null || code.length === 0) {\n    return \"\";\n  }\n  if (flagUrl === null) {\n    flagUrl = getCssVar(root, \"--sinch-flag-src-url\");\n    if (flagUrl !== null) {\n      flagUrl = flagUrl.replaceAll('\"', \"\").trim();\n    }\n  }\n  if (flagUrl === null) {\n    return \"\";\n  }\n  return flagUrl.replace(\"%s\", code);\n};\nconst templateHTML$B = '\u003cstyle\u003e:host{display:contents}#image{pointer-events:none;width:var(--sinch-global-size-icon,48px);height:var(--sinch-global-size-icon,48px);object-fit:contain}\u003c/style\u003e\u003cimg id=\"image\" src=\"\" alt=\"\" loading=\"lazy\"\u003e';\nconst template$B = document.createElement(\"template\");\ntemplate$B.innerHTML = templateHTML$B;\nclass Flag extends NectaryElement {\n  #$img;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$B.content.cloneNode(true));\n    this.#$img = shadowRoot.querySelector(\"#image\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#updateCode();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n  }\n  static get observedAttributes() {\n    return [\"code\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"code\": {\n        this.#$img.alt = newVal ?? \"\";\n        this.#updateCode();\n        break;\n      }\n    }\n  }\n  set code(value) {\n    updateAttribute(this, \"code\", value);\n  }\n  get code() {\n    return getAttribute(this, \"code\", \"\");\n  }\n  #updateCode() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    this.#$img.src = getFlagUrl(this, this.code);\n  }\n}\ndefineCustomElement(\"sinch-flag\", Flag);\nconst templateHTML$A = '\u003cstyle\u003e:host{display:block;grid-column:span 12}:host([xl=\"2\"]){grid-column:span 2}:host([xl=\"3\"]){grid-column:span 3}:host([xl=\"4\"]){grid-column:span 4}:host([xl=\"5\"]){grid-column:span 5}:host([xl=\"6\"]){grid-column:span 6}:host([xl=\"7\"]){grid-column:span 7}:host([xl=\"8\"]){grid-column:span 8}:host([xl=\"9\"]){grid-column:span 9}:host([xl=\"10\"]){grid-column:span 10}:host([xl=\"11\"]){grid-column:span 11}:host([xl=\"12\"]){grid-column:span 12}@media only screen and (max-width:1439px){:host{grid-column:span 12}:host([l=\"2\"]){grid-column:span 2}:host([l=\"3\"]){grid-column:span 3}:host([l=\"4\"]){grid-column:span 4}:host([l=\"5\"]){grid-column:span 5}:host([l=\"6\"]){grid-column:span 6}:host([l=\"7\"]){grid-column:span 7}:host([l=\"8\"]){grid-column:span 8}:host([l=\"9\"]){grid-column:span 9}:host([l=\"10\"]){grid-column:span 10}:host([l=\"11\"]){grid-column:span 11}:host([l=\"12\"]){grid-column:span 12}}@media only screen and (max-width:1023px){:host{grid-column:span 8}:host([m=\"2\"]){grid-column:span 2}:host([m=\"3\"]){grid-column:span 3}:host([m=\"4\"]){grid-column:span 4}:host([m=\"5\"]){grid-column:span 5}:host([m=\"6\"]){grid-column:span 6}:host([m=\"7\"]){grid-column:span 7}:host([m=\"8\"]){grid-column:span 8}}@media only screen and (max-width:767px){:host{grid-column:span 4}:host([s=\"2\"]){grid-column:span 2}:host([s=\"3\"]){grid-column:span 3}:host([s=\"4\"]){grid-column:span 4}}\u003c/style\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e';\nconst template$A = document.createElement(\"template\");\ntemplate$A.innerHTML = templateHTML$A;\nclass GridItem extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$A.content.cloneNode(true));\n  }\n  get s() {\n    return getIntegerAttribute(this, \"s\", null);\n  }\n  set s(value) {\n    updateIntegerAttribute(this, \"s\", value);\n  }\n  get m() {\n    return getIntegerAttribute(this, \"m\", null);\n  }\n  set m(value) {\n    updateIntegerAttribute(this, \"m\", value);\n  }\n  get l() {\n    return getIntegerAttribute(this, \"l\", null);\n  }\n  set l(value) {\n    updateIntegerAttribute(this, \"l\", value);\n  }\n  get xl() {\n    return getIntegerAttribute(this, \"xl\", null);\n  }\n  set xl(value) {\n    updateIntegerAttribute(this, \"xl\", value);\n  }\n}\ndefineCustomElement(\"sinch-grid-item\", GridItem);\nconst templateHTML$z = '\u003cstyle\u003e:host{display:grid;grid-template-columns:repeat(var(--sinch-comp-grid-columns-xl),minmax(0,1fr));grid-column-gap:var(--sinch-comp-grid-gutter-xl);grid-row-gap:var(--sinch-comp-grid-gutter-xl);padding:var(--sinch-comp-grid-margin-xl)}@media only screen and (max-width:1439px){:host{grid-template-columns:repeat(var(--sinch-comp-grid-columns-l),minmax(0,1fr));grid-column-gap:var(--sinch-comp-grid-gutter-l);grid-row-gap:var(--sinch-comp-grid-gutter-l);padding:var(--sinch-comp-grid-margin-l)}}@media only screen and (max-width:1023px){:host{grid-template-columns:repeat(var(--sinch-comp-grid-columns-m),minmax(0,1fr));grid-column-gap:var(--sinch-comp-grid-gutter-m);grid-row-gap:var(--sinch-comp-grid-gutter-m);padding:var(--sinch-comp-grid-margin-m)}}@media only screen and (max-width:767px){:host{grid-template-columns:repeat(var(--sinch-comp-grid-columns-s),minmax(0,1fr));grid-column-gap:var(--sinch-comp-grid-gutter-s);grid-row-gap:var(--sinch-comp-grid-gutter-s);padding:var(--sinch-comp-grid-margin-s)}}\u003c/style\u003e\u003cslot name=\"item\"\u003e\u003c/slot\u003e';\nconst template$z = document.createElement(\"template\");\ntemplate$z.innerHTML = templateHTML$z;\nclass Grid extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$z.content.cloneNode(true));\n  }\n}\ndefineCustomElement(\"sinch-grid\", Grid);\nconst templateHTML$y = '\u003cstyle\u003e:host{display:contents}#icon{--sinch-global-size-icon:18px}\u003c/style\u003e\u003csinch-tooltip type=\"fast\"\u003e\u003csinch-icon icons-version=\"2\" name=\"circle-question\" id=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-tooltip\u003e';\nconst template$y = document.createElement(\"template\");\ntemplate$y.innerHTML = templateHTML$y;\nclass HelpTooltip extends NectaryElement {\n  #$tooltip;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$y.content.cloneNode(true));\n    this.#$tooltip = shadowRoot.querySelector(\"sinch-tooltip\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const options = { signal: this.#controller.signal };\n    this.#$tooltip.addEventListener(\"-show\", this.#onTooltipShow, options);\n    this.#$tooltip.addEventListener(\"-hide\", this.#onTooltipHide, options);\n    this.addEventListener(\"-show\", this.#onTooltipShowReactHandler, options);\n    this.addEventListener(\"-hide\", this.#onTooltipHideReactHandler, options);\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"text\", \"width\", \"orientation\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    updateAttribute(this.#$tooltip, name, newVal);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get width() {\n    return getIntegerAttribute(this, \"width\");\n  }\n  set width(value) {\n    updateIntegerAttribute(this, \"width\", value);\n  }\n  get orientation() {\n    return getAttribute(this, \"orientation\", \"top\");\n  }\n  set orientation(value) {\n    updateAttribute(this, \"orientation\", value);\n  }\n  get footprintRect() {\n    return this.#$tooltip.footprintRect;\n  }\n  get tooltipRect() {\n    return this.#$tooltip.tooltipRect;\n  }\n  #onTooltipShow = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-show\"));\n  };\n  #onTooltipHide = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-hide\"));\n  };\n  #onTooltipShowReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-show\")?.();\n    getReactEventHandler(this, \"onShow\")?.();\n  };\n  #onTooltipHideReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-hide\")?.();\n    getReactEventHandler(this, \"onHide\")?.();\n  };\n}\ndefineCustomElement(\"sinch-help-tooltip\", HelpTooltip);\nconst typeValues$1 = [\"info\", \"success\", \"warn\", \"error\"];\nconst templateHTML$x = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:row;align-items:flex-start;padding:16px;border-radius:var(--sinch-comp-inline-alert-shape-radius);box-sizing:border-box;width:100%}:host([type=success]) #wrapper{background-color:var(--sinch-comp-inline-alert-color-success-default-background)}:host([type=warn]) #wrapper{background-color:var(--sinch-comp-inline-alert-color-warning-default-background)}:host([type=error]) #wrapper{background-color:var(--sinch-comp-inline-alert-color-error-default-background)}:host([type=info]) #wrapper{background-color:var(--sinch-comp-inline-alert-color-info-default-background)}#icon-error,#icon-info,#icon-success,#icon-warn{display:none}#icon-success{--sinch-global-color-icon:var(--sinch-comp-inline-alert-color-success-default-icon)}#icon-warn{--sinch-global-color-icon:var(--sinch-comp-inline-alert-color-warning-default-icon)}#icon-error{--sinch-global-color-icon:var(--sinch-comp-inline-alert-color-error-default-icon)}#icon-info{--sinch-global-color-icon:var(--sinch-comp-inline-alert-color-info-default-icon)}:host([type=error]) #icon-error,:host([type=info]) #icon-info,:host([type=success]) #icon-success,:host([type=warn]) #icon-warn{display:block}#body-wrapper{display:flex;flex-direction:column;align-items:flex-start;margin-left:8px;min-width:0;flex:1}#caption{align-self:stretch;--sinch-comp-title-font:var(--sinch-comp-inline-alert-font-title)}:host([type=success]) #caption{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-success-default-text)}:host([type=warn]) #caption{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-warning-default-text)}:host([type=error]) #caption{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-error-default-text)}:host([type=info]) #caption{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-info-default-text)}#text{display:flex;flex-direction:column;gap:8px;margin-top:0;align-self:stretch;--sinch-comp-rich-text-font:var(--sinch-comp-inline-alert-font-body)}:host([type=success]) #text{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-success-default-text)}:host([type=warn]) #text{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-warning-default-text)}:host([type=error]) #text{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-error-default-text)}:host([type=info]) #text{--sinch-global-color-text:var(--sinch-comp-inline-alert-color-info-default-text)}:host([caption=\"\"]) #text,:host([caption]) #text{margin-top:4px}#action{width:100%;display:flex;margin-top:16px;min-width:0;gap:16px}#action.empty{display:none}#close{margin-left:16px}#close.empty{display:none}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003csinch-icon icons-version=\"2\" name=\"circle-info\" id=\"icon-info\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"circle-check\" id=\"icon-success\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"triangle-exclamation\" id=\"icon-warn\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"octagon-exclamation\" id=\"icon-error\"\u003e\u003c/sinch-icon\u003e\u003cdiv id=\"body-wrapper\"\u003e\u003csinch-title id=\"caption\" level=\"3\" type=\"s\"\u003e\u003c/sinch-title\u003e\u003csinch-rich-text id=\"text\"\u003e\u003c/sinch-rich-text\u003e\u003cdiv id=\"action\"\u003e\u003cslot name=\"action\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv id=\"close\"\u003e\u003cslot name=\"close\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$x = document.createElement(\"template\");\ntemplate$x.innerHTML = templateHTML$x;\nclass InlineAlert extends NectaryElement {\n  #$text;\n  #$caption;\n  #$closeWrapper;\n  #$closeSlot;\n  #$actionWrapper;\n  #$actionSlot;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$x.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#text\");\n    this.#$caption = shadowRoot.querySelector(\"#caption\");\n    this.#$closeWrapper = shadowRoot.querySelector(\"#close\");\n    this.#$closeSlot = shadowRoot.querySelector('slot[name=\"close\"]');\n    this.#$actionWrapper = shadowRoot.querySelector(\"#action\");\n    this.#$actionSlot = shadowRoot.querySelector('slot[name=\"action\"]');\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"aria-atomic\", \"true\");\n    this.setAttribute(\"aria-live\", \"polite\");\n    this.#$closeSlot.addEventListener(\"slotchange\", this.#onCloseSlotChange);\n    this.#$actionSlot.addEventListener(\n      \"slotchange\",\n      this.#onActionSlotChange\n    );\n    this.#onCloseSlotChange();\n    this.#onActionSlotChange();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#$closeSlot.removeEventListener(\n      \"slotchange\",\n      this.#onCloseSlotChange\n    );\n    this.#$actionSlot.removeEventListener(\n      \"slotchange\",\n      this.#onActionSlotChange\n    );\n  }\n  static get observedAttributes() {\n    return [\"text\", \"caption\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"text\": {\n        updateAttribute(this.#$text, \"text\", newVal);\n        break;\n      }\n      case \"caption\": {\n        updateAttribute(this.#$caption, \"text\", newVal);\n        break;\n      }\n    }\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues$1, \"type\");\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues$1, \"type\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get caption() {\n    return getAttribute(this, \"caption\", \"\");\n  }\n  set caption(value) {\n    updateAttribute(this, \"caption\", value);\n  }\n  #onCloseSlotChange = () =\u003e {\n    setClass(\n      this.#$closeWrapper,\n      \"empty\",\n      this.#$closeSlot.assignedElements().length === 0\n    );\n  };\n  #onActionSlotChange = () =\u003e {\n    setClass(\n      this.#$actionWrapper,\n      \"empty\",\n      this.#$actionSlot.assignedElements().length === 0\n    );\n  };\n}\ndefineCustomElement(\"sinch-inline-alert\", InlineAlert);\nconst templateHTML$w = '\u003cstyle\u003e:host{display:block;outline:0}#wrapper{width:100%;height:100%;box-sizing:border-box;overflow:hidden;padding:8px 0;background-color:var(--sinch-comp-list-color-default-background-initial);border-bottom:1px solid var(--sinch-comp-list-color-default-border-initial)}:host(:last-child)\u003e#wrapper{border-bottom:none}:host(:hover)\u003e#wrapper{background-color:var(--sinch-comp-list-color-default-background-hover)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$w = document.createElement(\"template\");\ntemplate$w.innerHTML = templateHTML$w;\nclass ListItem extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$w.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"listitem\");\n  }\n}\ndefineCustomElement(\"sinch-list-item\", ListItem);\nconst templateHTML$v = '\u003cstyle\u003e:host{display:block;height:100%}#wrapper{display:flex;flex-direction:column;box-sizing:border-box;width:100%;height:100%;overflow-y:auto}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$v = document.createElement(\"template\");\ntemplate$v.innerHTML = templateHTML$v;\nclass List extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$v.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"list\");\n  }\n}\ndefineCustomElement(\"sinch-list\", List);\nconst templateHTML$u = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle;outline:0}#wrapper{display:flex;justify-content:center;gap:8px;width:100%;height:var(--sinch-local-size);--sinch-local-size:24px}button{all:initial;position:relative;display:flex;justify-content:center;align-items:center;min-width:var(--sinch-local-size);height:var(--sinch-local-size);cursor:pointer;border-radius:var(--sinch-comp-pagination-shape-radius);user-select:none;--sinch-global-color-icon:var(--sinch-comp-pagination-color-default-icon-default)}button:focus-visible::before{content:\"\";position:absolute;inset:-3px;border:2px solid var(--sinch-comp-pagination-color-default-outline-focus);border-radius:calc(var(--sinch-comp-pagination-shape-radius) + 3px);pointer-events:none}button:disabled{--sinch-global-color-icon:var(--sinch-comp-pagination-color-disabled-icon-initial);cursor:initial}button:enabled:hover{background-color:var(--sinch-comp-pagination-color-default-background-hover)}button\u003e*{display:block;overflow:hidden;pointer-events:none}.page{font:var(--sinch-comp-pagination-font-default-page-number);color:var(--sinch-comp-pagination-color-default-text-initial);background-color:var(--sinch-comp-pagination-color-default-background-initial);padding:0 4px;box-sizing:border-box}.page.dots\u003espan{display:none}.page.dots::after{content:\"...\"}.page.active{font:var(--sinch-comp-pagination-font-checked-page-number);background-color:var(--sinch-comp-pagination-color-checked-background-initial);pointer-events:none;cursor:initial}.page.active:hover{background-color:var(--sinch-comp-pagination-color-checked-background-hover)}.page.hidden{display:none}#left,#right{--sinch-icon-size:24px}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cbutton id=\"left\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-angle-left\" id=\"icon-left\"\u003e\u003c/sinch-icon\u003e\u003c/button\u003e \u003cbutton class=\"page\"\u003e\u003cspan\u003e1\u003c/span\u003e\u003c/button\u003e \u003cbutton class=\"page active\"\u003e\u003cspan\u003e2\u003c/span\u003e\u003c/button\u003e \u003cbutton class=\"page\"\u003e\u003cspan\u003e3\u003c/span\u003e\u003c/button\u003e \u003cbutton class=\"page\"\u003e\u003cspan\u003e4\u003c/span\u003e\u003c/button\u003e \u003cbutton class=\"page\"\u003e\u003cspan\u003e5\u003c/span\u003e\u003c/button\u003e \u003cbutton class=\"page dots\"\u003e\u003cspan\u003e6\u003c/span\u003e\u003c/button\u003e \u003cbutton class=\"page\"\u003e\u003cspan\u003e20\u003c/span\u003e\u003c/button\u003e \u003cbutton id=\"right\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-angle-right\" id=\"icon-right\"\u003e\u003c/sinch-icon\u003e\u003c/button\u003e\u003c/div\u003e';\nconst NUM_BUTTONS = 7;\nconst MIDDLE_BTN_INDEX = Math.floor(NUM_BUTTONS / 2);\nconst FIRST_BTN_INDEX = 0;\nconst LAST_BTN_INDEX = NUM_BUTTONS - 1;\nconst DOTS_LEFT_INDEX = 1;\nconst DOTS_RIGHT_INDEX = LAST_BTN_INDEX - 1;\nconst template$u = document.createElement(\"template\");\ntemplate$u.innerHTML = templateHTML$u;\nclass Pagination extends NectaryElement {\n  #$left;\n  #$right;\n  #$buttons;\n  #$wrapper;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$u.content.cloneNode(true));\n    this.#$left = shadowRoot.querySelector(\"#left\");\n    this.#$right = shadowRoot.querySelector(\"#right\");\n    this.#$buttons = shadowRoot.querySelectorAll(\".page\");\n    this.#$wrapper = shadowRoot.querySelector(\"#wrapper\");\n  }\n  connectedCallback() {\n    this.#onValueChange();\n    this.#$wrapper.addEventListener(\"click\", this.#onButtonClick);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler);\n  }\n  disconnectedCallback() {\n    this.#$wrapper.removeEventListener(\"click\", this.#onButtonClick);\n    this.removeEventListener(\"-change\", this.#onChangeReactHandler);\n  }\n  static get observedAttributes() {\n    return [\"max\", \"value\"];\n  }\n  attributeChangedCallback(name) {\n    switch (name) {\n      case \"value\":\n      case \"max\": {\n        this.#onValueChange();\n        break;\n      }\n    }\n  }\n  set value(val) {\n    updateAttribute(this, \"value\", val);\n  }\n  get value() {\n    return getIntegerAttribute(this, \"value\", 0);\n  }\n  set max(val) {\n    updateAttribute(this, \"max\", val);\n  }\n  get max() {\n    return getIntegerAttribute(this, \"value\", 0);\n  }\n  #onValueChange() {\n    const value = getIntegerAttribute(this, \"value\", 0) - 1;\n    const max = Math.max(0, getIntegerAttribute(this, \"max\", 0));\n    const valueOffset = Math.min(\n      Math.max(0, value - MIDDLE_BTN_INDEX),\n      Math.max(0, max - NUM_BUTTONS)\n    );\n    for (let i = 0; i \u003c this.#$buttons.length; i++) {\n      const $b = this.#$buttons[i];\n      if (value \u003c 3) {\n        setClass($b, \"active\", value === i);\n      } else if (value \u003e= max - MIDDLE_BTN_INDEX) {\n        setClass($b, \"active\", i + valueOffset === value);\n      } else {\n        setClass($b, \"active\", i === MIDDLE_BTN_INDEX);\n      }\n      if (max \u003e NUM_BUTTONS) {\n        setClass(\n          $b,\n          \"dots\",\n          i === DOTS_LEFT_INDEX \u0026\u0026 value \u003e MIDDLE_BTN_INDEX || i === DOTS_RIGHT_INDEX \u0026\u0026 value \u003c= max - DOTS_RIGHT_INDEX\n        );\n      }\n      setClass($b, \"hidden\", i \u003e= max);\n      const btnText = $b.firstElementChild;\n      if (btnText != null) {\n        btnText.textContent = i === FIRST_BTN_INDEX ? \"1\" : i === LAST_BTN_INDEX ? String(max) : String(i + 1 + valueOffset);\n      }\n    }\n    const isValueBad = value \u003c 0 || value \u003e= max;\n    this.#$left.disabled = isValueBad || value === 0;\n    this.#$right.disabled = isValueBad || value === max - 1;\n  }\n  #onButtonClick = (e) =\u003e {\n    e.stopPropagation();\n    const value = Math.max(getIntegerAttribute(this, \"value\", 0) - 1);\n    const max = Math.max(0, getIntegerAttribute(this, \"max\", 0));\n    if (isTargetEqual(e, this.#$left)) {\n      return this.#dispatchChangeEvent(Math.max(value - 1, 0));\n    }\n    if (isTargetEqual(e, this.#$right)) {\n      return this.#dispatchChangeEvent(Math.min(value + 1, max));\n    }\n    const btnIndex = getTargetIndexInParent(e, this.#$wrapper) - 1;\n    if (btnIndex \u003e= FIRST_BTN_INDEX \u0026\u0026 btnIndex \u003c= LAST_BTN_INDEX) {\n      if (btnIndex === FIRST_BTN_INDEX) {\n        return this.#dispatchChangeEvent(0);\n      }\n      if (btnIndex === LAST_BTN_INDEX) {\n        return this.#dispatchChangeEvent(max);\n      }\n      if (btnIndex === DOTS_LEFT_INDEX \u0026\u0026 max \u003e NUM_BUTTONS \u0026\u0026 value \u003e MIDDLE_BTN_INDEX) {\n        return this.#dispatchChangeEvent(Math.floor(value / 2));\n      }\n      if (btnIndex === DOTS_RIGHT_INDEX \u0026\u0026 max \u003e NUM_BUTTONS \u0026\u0026 value \u003c= max - DOTS_RIGHT_INDEX) {\n        return this.#dispatchChangeEvent(\n          Math.floor((max - value) / 2 + value)\n        );\n      }\n      return this.#dispatchChangeEvent(\n        btnIndex + Math.min(\n          Math.max(0, value - MIDDLE_BTN_INDEX),\n          Math.max(0, max - NUM_BUTTONS)\n        )\n      );\n    }\n  };\n  #clamp(value) {\n    const max = getIntegerAttribute(this, \"max\", 0);\n    return Math.max(0, Math.min(max - 1, value)) + 1;\n  }\n  #dispatchChangeEvent(value) {\n    const detail = this.#clamp(value);\n    this.dispatchEvent(new CustomEvent(\"-change\", { detail }));\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$left.focus();\n  }\n  blur() {\n    this.#$left.blur();\n    this.#$right.blur();\n    this.#$buttons.forEach(($b) =\u003e $b.blur());\n  }\n  get prevButtonRect() {\n    return getRect(this.#$left);\n  }\n  get nextButtonRect() {\n    return getRect(this.#$right);\n  }\n  nthButtonRect(index) {\n    const btn = this.#$buttons[index];\n    return btn == null ? null : getRect(btn);\n  }\n}\ndefineCustomElement(\"sinch-pagination\", Pagination);\nconst templateHTML$t = '\u003cstyle\u003e#persisted-dialog{--sinch-dialog-close-button-display:none}::slotted(*){display:block}\u003c/style\u003e\u003csinch-dialog id=\"persisted-dialog\"\u003e\u003cdiv slot=\"icon\"\u003e\u003cslot id=\"icon\" name=\"icon\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv slot=\"content\"\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv slot=\"buttons\"\u003e\u003cslot name=\"buttons\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/sinch-dialog\u003e';\nconst template$t = document.createElement(\"template\");\ntemplate$t.innerHTML = templateHTML$t;\nfunction isVisible(elementStyle) {\n  return elementStyle.visibility === \"visible\" \u0026\u0026 elementStyle.display !== \"none\";\n}\nconst observeDialogVisibilityManipulation = (sinchDialogElement, cb, intervalLength = 1e3) =\u003e {\n  const checkInterval = setInterval(() =\u003e {\n    const dialogElement = sinchDialogElement.shadowRoot?.querySelector(\"dialog\");\n    if (!isVisible(getComputedStyle(sinchDialogElement)) || sinchDialogElement.open !== true || dialogElement === null || dialogElement === void 0 || !isVisible(getComputedStyle(dialogElement)) || dialogElement.open !== true) {\n      cb();\n    }\n  }, intervalLength);\n  return checkInterval;\n};\nclass PersistentOverlay extends NectaryElement {\n  #$sinchDialog;\n  #visibilityObserverInterval;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$t.content.cloneNode(true));\n    this.#$sinchDialog = shadowRoot.querySelector(\"#persisted-dialog\");\n  }\n  static get observedAttributes() {\n    return [\"caption\", \"open\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"caption\": {\n        updateAttribute(this.#$sinchDialog, \"caption\", newVal);\n        break;\n      }\n      case \"open\": {\n        updateAttribute(this.#$sinchDialog, \"open\", newVal);\n        const shouldOpen = isAttrTrue(newVal);\n        if (shouldOpen) {\n          requestAnimationFrame(() =\u003e {\n            this.#startObservingAlteration();\n          });\n        } else {\n          this.#stopObservingAlteration();\n        }\n      }\n    }\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"role\", \"dialog\");\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.addEventListener(\"-visibility-altered\", this.#onVisibilityAlteredReactHandler, { signal });\n    if (this.open) {\n      this.#startObservingAlteration();\n    }\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n    if (this.open || this.#visibilityObserverInterval !== void 0) {\n      this.#onVisibilityAltered();\n    }\n  }\n  set caption(caption) {\n    updateAttribute(this, \"caption\", caption);\n  }\n  get caption() {\n    return getAttribute(this, \"caption\", \"\");\n  }\n  set open(isOpen) {\n    updateBooleanAttribute(this, \"open\", isOpen);\n  }\n  get open() {\n    return getBooleanAttribute(this, \"open\");\n  }\n  #startObservingAlteration() {\n    this.#visibilityObserverInterval = observeDialogVisibilityManipulation(this.#$sinchDialog, () =\u003e {\n      this.#onVisibilityAltered();\n    });\n  }\n  #stopObservingAlteration() {\n    clearInterval(this.#visibilityObserverInterval);\n  }\n  #onVisibilityAltered() {\n    this.dispatchEvent(new CustomEvent(\"-visibility-altered\"));\n  }\n  #onVisibilityAlteredReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-visibility-altered\")?.(e);\n    getReactEventHandler(this, \"onVisibilityAltered\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-persistent-overlay\", PersistentOverlay);\nconst ATTR_PROGRESS_STEPPER_ITEM_CHECKED = \"data-checked\";\nconst ATTR_PROGRESS_STEPPER_ITEM_STATUS = \"data-status\";\nconst ATTR_PROGRESS_STEPPER_ITEM_ACTIVE_DESCENDANT = \"data-active-descendant\";\nconst isProgressStepperItemChecked = ($el) =\u003e getBooleanAttribute($el, ATTR_PROGRESS_STEPPER_ITEM_CHECKED);\nconst setProgressStepperItemChecked = ($el, isChecked) =\u003e updateBooleanAttribute($el, ATTR_PROGRESS_STEPPER_ITEM_CHECKED, isChecked);\nconst isProgressStepperItemActive = ($el) =\u003e {\n  const attrValue = getAttribute($el, ATTR_PROGRESS_STEPPER_ITEM_STATUS);\n  return attrValue !== null \u0026\u0026 attrValue !== \"inactive\";\n};\nconst setProgressStepperItemStatus = ($el, status) =\u003e updateAttribute($el, ATTR_PROGRESS_STEPPER_ITEM_STATUS, status);\nconst isProgressStepperItemActiveDescendant = ($el) =\u003e getBooleanAttribute($el, ATTR_PROGRESS_STEPPER_ITEM_ACTIVE_DESCENDANT);\nconst setProgressStepperItemActiveDescendant = ($el, isActiveDescendant) =\u003e updateBooleanAttribute($el, ATTR_PROGRESS_STEPPER_ITEM_ACTIVE_DESCENDANT, isActiveDescendant);\nconst templateHTML$s = '\u003cstyle\u003e:host{display:block;outline:0}#button{position:relative;display:flex;flex-direction:column;gap:4px;width:100%;height:100%;padding:8px 4px 4px;box-sizing:border-box;cursor:pointer;border-radius:var(--sinch-comp-progress-stepper-step-shape-radius)}:host([data-status=inactive])\u003e#button{cursor:not-allowed}:host([data-status=incomplete]:hover)\u003e#button{background-color:var(--sinch-comp-progress-stepper-step-color-incomplete-background-hover)}:host([data-status=complete]:hover)\u003e#button{background-color:var(--sinch-comp-progress-stepper-step-color-complete-background-hover)}:host([data-status=invalid]:hover)\u003e#button{background-color:var(--sinch-comp-progress-stepper-step-color-invalid-background-hover)}#outline{position:absolute;inset:-2px;border:2px solid var(--sinch-comp-progress-stepper-step-color-outline-focus);border-radius:calc(var(--sinch-comp-progress-stepper-step-shape-radius) + 2px);pointer-events:none;opacity:0}:host(:focus-visible) #outline{opacity:1}#text{flex-shrink:1;flex-basis:auto;min-width:0;transform:translate(0,0);will-change:transform;transition:transform .25s ease-out;padding-right:24px}:host([data-status=incomplete]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-incomplete-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-incomplete-label)}:host([data-status=complete]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-complete-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-complete-label)}:host([data-status=inactive]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-inactive-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-inactive-label)}:host([invalid]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-invalid-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-invalid-label);transform:translate(24px,0)}:host([data-status=incomplete][data-checked]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-incomplete-current-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-incomplete-current-label)}:host([data-status=complete][data-checked]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-complete-current-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-complete-current-label)}:host([invalid][data-checked]) #text{--sinch-global-color-text:var(--sinch-comp-progress-stepper-step-color-invalid-label-default);--sinch-comp-text-font:var(--sinch-comp-progress-stepper-step-font-invalid-current-label)}#icon-error{position:absolute;left:0;top:4px;pointer-events:none;opacity:0;transition:opacity .25s ease-in-out;--sinch-global-color-icon:var(--sinch-comp-progress-stepper-step-color-invalid-icon-default);--sinch-global-size-icon:16px}:host([invalid]) #icon-error{opacity:1}#progress{height:8px;border-radius:4px;transition:background-color .25s ease-in-out}:host([data-status=incomplete]) #progress{background-color:var(--sinch-comp-progress-stepper-step-color-incomplete-progress-background)}:host([data-status=complete]) #progress{background-color:var(--sinch-comp-progress-stepper-step-color-complete-progress-background)}:host([data-status=inactive]) #progress{background-color:var(--sinch-comp-progress-stepper-step-color-inactive-progress-background)}:host([invalid]) #progress{background-color:var(--sinch-comp-progress-stepper-step-color-invalid-progress-background)}#bar{width:8px;height:8px;border-radius:4px;opacity:0;transition:width .25s ease-in-out,opacity .25s ease-in-out}:host([data-status=incomplete]) #bar{background-color:var(--sinch-comp-progress-stepper-step-color-incomplete-progress-bar)}:host([data-status=complete]) #bar{background-color:var(--sinch-comp-progress-stepper-step-color-complete-progress-bar);width:100%}:host([data-status=complete]:not([invalid])) #bar,:host([data-status=incomplete]:not([invalid])) #bar{opacity:1}#label-bar{position:relative}\u003c/style\u003e\u003cdiv id=\"button\"\u003e\u003cdiv id=\"progress\"\u003e\u003cdiv id=\"bar\"\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv id=\"label-bar\"\u003e\u003csinch-icon icons-version=\"2\" name=\"triangle-exclamation\" id=\"icon-error\" aria-hidden=\"true\"\u003e\u003c/sinch-icon\u003e\u003csinch-text id=\"text\" type=\"m\"\u003e\u003c/sinch-text\u003e\u003c/div\u003e\u003cdiv id=\"outline\"\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$s = document.createElement(\"template\");\ntemplate$s.innerHTML = templateHTML$s;\nclass ProgressStepperItem extends NectaryElement {\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: false });\n    shadowRoot.appendChild(template$s.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#text\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"tab\");\n  }\n  disconnectedCallback() {\n  }\n  static get observedAttributes() {\n    return [\n      \"text\",\n      \"invalid\",\n      ATTR_PROGRESS_STEPPER_ITEM_STATUS,\n      ATTR_PROGRESS_STEPPER_ITEM_CHECKED,\n      ATTR_PROGRESS_STEPPER_ITEM_ACTIVE_DESCENDANT\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n      case ATTR_PROGRESS_STEPPER_ITEM_CHECKED: {\n        updateExplicitBooleanAttribute(\n          this,\n          \"aria-selected\",\n          isAttrTrue(newVal)\n        );\n        break;\n      }\n      case ATTR_PROGRESS_STEPPER_ITEM_STATUS: {\n        this.#updateTabIndex();\n        break;\n      }\n      case ATTR_PROGRESS_STEPPER_ITEM_ACTIVE_DESCENDANT: {\n        this.#updateTabIndex();\n        break;\n      }\n      case \"invalid\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          return;\n        }\n        const isInvalid = isAttrTrue(newVal);\n        updateExplicitBooleanAttribute(this, \"aria-invalid\", isInvalid);\n        updateBooleanAttribute(this, \"invalid\", isInvalid);\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set invalid(isInvalid) {\n    updateBooleanAttribute(this, \"invalid\", isInvalid);\n  }\n  get invalid() {\n    return getBooleanAttribute(this, \"invalid\");\n  }\n  get focusable() {\n    return true;\n  }\n  #updateTabIndex() {\n    this.tabIndex = isProgressStepperItemActiveDescendant(this) \u0026\u0026 isProgressStepperItemActive(this) ? 0 : -1;\n  }\n}\ndefineCustomElement(\"sinch-progress-stepper-item\", ProgressStepperItem);\nconst templateHTML$r = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;width:100%}::slotted(sinch-progress-stepper-item){flex:1;min-width:0}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$r = document.createElement(\"template\");\ntemplate$r.innerHTML = templateHTML$r;\nclass ProgressStepper extends NectaryElement {\n  #$slot;\n  #controller = null;\n  #$items = [];\n  #currentActiveDescendantIndex = -1;\n  #isGoingToFocusItem = false;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$r.content.cloneNode(true));\n    this.#$slot = shadowRoot.querySelector(\"slot\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"tablist\");\n    this.#$slot.addEventListener(\"click\", this.#onOptionClick, options);\n    this.#$slot.addEventListener(\"keydown\", this.#onOptionKeydown, options);\n    this.#$slot.addEventListener(\"focusout\", this.#onOptionBlur, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    queueMicrotask(() =\u003e {\n      this.#$slot.addEventListener(\"slotchange\", this.#onSlotChange, options);\n      this.#onSlotChange();\n    });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"value\", \"progressvalue\"];\n  }\n  attributeChangedCallback(name, _, newVal) {\n    switch (name) {\n      case \"value\": {\n        this.#onValueChange(newVal);\n        break;\n      }\n      case \"progressvalue\": {\n        this.#updateProgressValue();\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set progressValue(value) {\n    updateAttribute(this, \"progressvalue\", value);\n  }\n  get progressValue() {\n    return getAttribute(this, \"progressvalue\", \"\");\n  }\n  nthOptionRect(index) {\n    const $el = this.#$slot.assignedElements()[index];\n    if ($el != null) {\n      return getRect($el);\n    }\n    return null;\n  }\n  #onSlotChange = () =\u003e {\n    this.#$items = this.#$slot.assignedElements();\n    this.#onValueChange(this.value);\n    this.#updateProgressValue();\n  };\n  #onOptionClick = (e) =\u003e {\n    const target = getTargetByAttribute(e, \"value\");\n    if (target !== null \u0026\u0026 isProgressStepperItemActive(target)) {\n      this.dispatchEvent(new CustomEvent(\"-change\", {\n        detail: getAttribute(target, \"value\")\n      }));\n    }\n  };\n  #onValueChange(value) {\n    for (const $item of this.#$items) {\n      const isChecked = value === getAttribute($item, \"value\");\n      setProgressStepperItemChecked($item, isChecked);\n    }\n    this.#resetActiveDescendant();\n  }\n  #focusNextItem() {\n    for (let i = 0; i \u003c this.#$items.length; i++) {\n      const nextIndex = (this.#currentActiveDescendantIndex + 1 + i) % this.#$items.length;\n      const item = this.#$items[nextIndex];\n      if (isProgressStepperItemActive(item)) {\n        setProgressStepperItemActiveDescendant(item, true);\n        this.#isGoingToFocusItem = true;\n        item.focus();\n        if (this.#currentActiveDescendantIndex \u003e= 0) {\n          setProgressStepperItemActiveDescendant(this.#$items[this.#currentActiveDescendantIndex], false);\n        }\n        this.#currentActiveDescendantIndex = nextIndex;\n        break;\n      }\n    }\n  }\n  #focusPrevItem() {\n    for (let i = 0; i \u003c this.#$items.length; i++) {\n      const nextIndex = (this.#currentActiveDescendantIndex - i - 1 + this.#$items.length) % this.#$items.length;\n      const item = this.#$items[nextIndex];\n      if (isProgressStepperItemActive(item)) {\n        setProgressStepperItemActiveDescendant(item, true);\n        this.#isGoingToFocusItem = true;\n        item.focus();\n        if (this.#currentActiveDescendantIndex \u003e= 0) {\n          setProgressStepperItemActiveDescendant(this.#$items[this.#currentActiveDescendantIndex], false);\n        }\n        this.#currentActiveDescendantIndex = nextIndex;\n        break;\n      }\n    }\n  }\n  #updateProgressValue() {\n    const progressValue = this.progressValue;\n    const $items = this.#$slot.assignedElements();\n    const $progressValueIndex = $items.findIndex((it) =\u003e getAttribute(it, \"value\") === progressValue);\n    for (let i = 0; i \u003c $items.length; i++) {\n      if ($progressValueIndex \u003c 0 || $progressValueIndex \u003c i) {\n        setProgressStepperItemStatus($items[i], \"inactive\");\n      } else if ($progressValueIndex \u003e i) {\n        setProgressStepperItemStatus($items[i], \"complete\");\n      } else {\n        setProgressStepperItemStatus($items[i], \"incomplete\");\n      }\n    }\n    this.#resetActiveDescendant();\n  }\n  #getCheckedItemIndex() {\n    for (let i = 0; i \u003c this.#$items.length; i++) {\n      if (isProgressStepperItemChecked(this.#$items[i])) {\n        return i;\n      }\n    }\n    return -1;\n  }\n  #getFirstActiveItemIndex() {\n    for (let i = 0; i \u003c this.#$items.length; i++) {\n      if (isProgressStepperItemActive(this.#$items[i])) {\n        return i;\n      }\n    }\n    return -1;\n  }\n  #resetActiveDescendant() {\n    if (this.#currentActiveDescendantIndex \u003e= 0) {\n      setProgressStepperItemActiveDescendant(this.#$items[this.#currentActiveDescendantIndex], false);\n    }\n    this.#currentActiveDescendantIndex = this.#getCheckedItemIndex();\n    if (this.#currentActiveDescendantIndex \u003e= 0) {\n      setProgressStepperItemActiveDescendant(this.#$items[this.#currentActiveDescendantIndex], true);\n      return;\n    }\n    this.#currentActiveDescendantIndex = this.#getFirstActiveItemIndex();\n    if (this.#currentActiveDescendantIndex \u003e= 0) {\n      setProgressStepperItemActiveDescendant(this.#$items[this.#currentActiveDescendantIndex], true);\n    }\n  }\n  #onOptionKeydown = (e) =\u003e {\n    switch (e.code) {\n      case \"Enter\":\n      case \"Space\": {\n        e.preventDefault();\n        getTargetByAttribute(e, \"value\")?.click();\n        break;\n      }\n      case \"ArrowRight\": {\n        e.preventDefault();\n        this.#focusNextItem();\n        break;\n      }\n      case \"ArrowLeft\": {\n        e.preventDefault();\n        this.#focusPrevItem();\n        break;\n      }\n    }\n  };\n  #onOptionBlur = () =\u003e {\n    if (this.#isGoingToFocusItem) {\n      this.#isGoingToFocusItem = false;\n      return;\n    }\n    this.#resetActiveDescendant();\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-progress-stepper\", ProgressStepper);\nconst templateHTML$q = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;align-items:center;height:24px}#bar,#progress{height:8px;border-radius:4px}#progress{background-color:var(--sinch-comp-progress-color-default-background-initial);flex:1;min-width:0}#bar{background-color:var(--sinch-comp-progress-color-default-bar-initial);width:0}#text{display:none;width:46px;--sinch-global-color-text:var(--sinch-comp-progress-color-default-text-initial)}:host([detailed]) #text{display:block}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003csinch-text id=\"text\" type=\"m\"\u003e\u003c/sinch-text\u003e\u003cdiv id=\"progress\"\u003e\u003cdiv id=\"bar\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$q = document.createElement(\"template\");\ntemplate$q.innerHTML = templateHTML$q;\nclass Progress extends NectaryElement {\n  #$bar;\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$q.content.cloneNode(true));\n    this.#$bar = shadowRoot.querySelector(\"#bar\");\n    this.#$text = shadowRoot.querySelector(\"#text\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"progressbar\");\n  }\n  static get observedAttributes() {\n    return [\"value\", \"detailed\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"value\": {\n        const int = attrValueToInteger(newVal, { min: 0, max: 100 }) ?? 0;\n        this.#$bar.style.width = `${int}%`;\n        this.#$text.textContent = Intl.NumberFormat(navigator.language, { style: \"percent\" }).format(int / 100);\n        this.setAttribute(\"valuenow\", int !== null ? String(int) : \"0\");\n        this.setAttribute(\"aria-valuenow\", int !== null ? String(int) : \"0\");\n        break;\n      }\n      case \"detailed\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          break;\n        }\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  get value() {\n    return getIntegerAttribute(this, \"value\", 0);\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get detailed() {\n    return getBooleanAttribute(this, \"detailed\");\n  }\n  set detailed(isDetailed) {\n    updateBooleanAttribute(this, \"detailed\", isDetailed);\n  }\n}\ndefineCustomElement(\"sinch-progress\", Progress);\nconst templateHTML$p = '\u003cstyle\u003e:host{display:block;outline:0}#wrapper{display:flex;flex-direction:row;box-sizing:border-box;width:100%;min-height:24px;--sinch-local-color-background:var(--sinch-comp-radio-color-default-background-initial);--sinch-local-color-background-hover:var(--sinch-comp-radio-color-default-background-hover);--sinch-local-color-background-active:var(--sinch-comp-radio-color-default-background-active);--sinch-local-color-border:var(--sinch-comp-radio-color-default-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-radio-color-default-border-hover);--sinch-local-color-border-active:var(--sinch-comp-radio-color-default-border-active);--sinch-local-color-knob:var(--sinch-comp-radio-color-checked-knob-initial);--sinch-local-color-knob-hover:var(--sinch-comp-radio-color-checked-knob-hover);--sinch-local-color-knob-active:var(--sinch-comp-radio-color-checked-knob-active);--sinch-local-color-text:var(--sinch-comp-radio-color-default-label-initial)}:host([data-invalid])\u003e#wrapper{--sinch-local-color-border:var(--sinch-comp-radio-color-invalid-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-radio-color-invalid-border-hover);--sinch-local-color-border-active:var(--sinch-comp-radio-color-invalid-border-active);--sinch-local-color-text:var(--sinch-comp-radio-color-invalid-label-initial)}:host([checked])\u003e#wrapper{--sinch-local-color-border:var(--sinch-comp-radio-color-checked-border-initial);--sinch-local-color-border-hover:var(--sinch-comp-radio-color-checked-border-hover);--sinch-local-color-border-active:var(--sinch-comp-radio-color-checked-border-active)}:host([disabled])\u003e#wrapper{--sinch-local-color-background:var(--sinch-comp-radio-color-disabled-background-initial);--sinch-local-color-border:var(--sinch-comp-radio-color-disabled-border-initial);--sinch-local-color-text:var(--sinch-comp-radio-color-disabled-label-initial)}:host([disabled][checked])\u003e#wrapper{--sinch-local-color-border:var(--sinch-comp-radio-color-checked-disabled-border-initial);--sinch-local-color-knob:var(--sinch-comp-radio-color-checked-disabled-knob-initial);--sinch-local-color-text:var(--sinch-comp-radio-color-checked-disabled-label-initial)}#input{all:initial;display:block;width:18px;height:18px;cursor:pointer}:host([disabled]) #input{cursor:initial}#input-wrapper{position:relative;width:18px;height:18px;align-self:flex-start;margin-top:3px}#input::before{content:\"\";position:absolute;inset:-3px;border:2px solid var(--sinch-comp-radio-color-default-outline-focus);border-radius:50%;transition:opacity .1s linear;opacity:0;box-sizing:border-box;pointer-events:none}:host(:focus-visible) #input::before{opacity:1}#input::after{content:\"\";position:absolute;width:18px;height:18px;inset:0;margin:auto;background-color:var(--sinch-local-color-background);border:1px solid var(--sinch-local-color-border);border-radius:50%;box-sizing:border-box;pointer-events:none}:host(:hover:not([disabled])) #input::after{background-color:var(--sinch-local-color-background-hover);border-color:var(--sinch-local-color-border-hover)}:host(:active:not([disabled])) #input::after{background-color:var(--sinch-local-color-background-active);border-color:var(--sinch-local-color-border-active)}#knob{position:absolute;width:10px;height:10px;inset:0;margin:auto;border-radius:50%;transition:opacity .1s linear;opacity:0;background-color:var(--sinch-local-color-knob);pointer-events:none}:host([checked]) #knob{opacity:1}:host(:hover:not([disabled])) #knob{background-color:var(--sinch-local-color-knob-hover)}:host(:active:not([disabled])) #knob{background-color:var(--sinch-local-color-knob-active)}@media (prefers-reduced-motion){#input::after,#input::before,#knob{transition:none}}#label{flex:1;align-self:center;padding-left:8px;font:var(--sinch-comp-radio-font-label);color:var(--sinch-local-color-text);cursor:pointer}#label:empty{display:none}:host([disabled]) #label{cursor:initial}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"input-wrapper\"\u003e\u003cdiv id=\"input\"\u003e\u003c/div\u003e\u003cdiv id=\"knob\"\u003e\u003c/div\u003e\u003c/div\u003e\u003cspan id=\"label\"\u003e\u003c/span\u003e\u003c/div\u003e';\nconst template$p = document.createElement(\"template\");\ntemplate$p.innerHTML = templateHTML$p;\nclass RadioOption extends NectaryElement {\n  #$label;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$p.content.cloneNode(true));\n    this.#$label = shadowRoot.querySelector(\"#label\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"radio\");\n    this.tabIndex = 0;\n  }\n  disconnectedCallback() {\n  }\n  static get observedAttributes() {\n    return [\n      \"checked\",\n      \"disabled\",\n      \"text\",\n      \"data-invalid\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$label.textContent = newVal;\n        break;\n      }\n      case \"checked\": {\n        const isChecked = isAttrTrue(newVal);\n        updateExplicitBooleanAttribute(this, \"aria-checked\", isChecked);\n        updateBooleanAttribute(this, \"checked\", isChecked);\n        break;\n      }\n      case \"disabled\": {\n        const isDisabled = isAttrTrue(newVal);\n        updateExplicitBooleanAttribute(this, \"aria-disabled\", isDisabled);\n        updateBooleanAttribute(this, \"disabled\", isDisabled);\n        break;\n      }\n      case \"data-invalid\": {\n        updateBooleanAttribute(this, \"data-invalid\", isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  set checked(isChecked) {\n    updateBooleanAttribute(this, \"checked\", isChecked);\n  }\n  get checked() {\n    return getBooleanAttribute(this, \"checked\");\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  get focusable() {\n    return true;\n  }\n}\ndefineCustomElement(\"sinch-radio-option\", RadioOption);\nconst templateHTML$o = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:var(--sinch-comp-radio-direction,column);gap:var(--sinch-comp-radio-gap,8px);box-sizing:border-box;width:100%}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$o = document.createElement(\"template\");\ntemplate$o.innerHTML = templateHTML$o;\nclass Radio extends NectaryElement {\n  #$slot;\n  #controller = null;\n  #internals;\n  static formAssociated = true;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: true });\n    shadowRoot.appendChild(template$o.content.cloneNode(true));\n    this.#internals = this.attachInternals();\n    this.#$slot = shadowRoot.querySelector(\"slot\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"radiogroup\");\n    this.#internals.role = \"radiogroup\";\n    this.#$slot.addEventListener(\"slotchange\", this.#onSlotChange, options);\n    this.#$slot.addEventListener(\"keydown\", this.#onOptionKeyDown, options);\n    this.#$slot.addEventListener(\"click\", this.#onOptionClick, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  formAssociatedCallback() {\n    setFormValue(this.#internals, this.value);\n  }\n  formResetCallback() {\n    this.value = \"\";\n    setFormValue(this.#internals, \"\");\n  }\n  formStateRestoreCallback(state) {\n    if (this.#internals.form === null || getBooleanAttribute(this.#internals.form, \"data-form-state-restore\") === false) {\n      return;\n    }\n    if (state !== null) {\n      const value = typeof state === \"string\" ? state : state.get(this.name);\n      this.value = value?.toString() ?? \"\";\n      setFormValue(this.#internals, value?.toString() ?? \"\");\n    }\n  }\n  static get observedAttributes() {\n    return [\"value\", \"invalid\"];\n  }\n  set name(value) {\n    updateAttribute(this, \"name\", value);\n  }\n  get name() {\n    return getAttribute(this, \"name\", \"\");\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set invalid(isInvalid) {\n    updateBooleanAttribute(this, \"invalid\", isInvalid);\n  }\n  get invalid() {\n    return getBooleanAttribute(this, \"invalid\");\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"value\": {\n        this.#onValueChange(newVal ?? \"\");\n        setFormValue(this.#internals, newVal ?? \"\");\n        break;\n      }\n      case \"invalid\": {\n        this.#updateInvalid(isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  #onOptionKeyDown = (e) =\u003e {\n    const option = e.target?.closest(\"sinch-radio-option\") ?? null;\n    if (option === null) {\n      return;\n    }\n    switch (e.code) {\n      case \"ArrowUp\":\n      case \"ArrowLeft\": {\n        e.preventDefault();\n        const $option = this.#getPrevOption();\n        if ($option !== null) {\n          $option.focus();\n          $option.click();\n        }\n        break;\n      }\n      case \"ArrowDown\":\n      case \"ArrowRight\": {\n        e.preventDefault();\n        const $option = this.#getNextOption();\n        if ($option !== null) {\n          $option.focus();\n          $option.click();\n        }\n        break;\n      }\n    }\n  };\n  #onSlotChange = () =\u003e {\n    this.#onValueChange(this.value);\n  };\n  #onOptionClick = (e) =\u003e {\n    const target = e.target;\n    if (target === null) {\n      return;\n    }\n    const option = target.closest(\"sinch-radio-option\");\n    if (option === null || option.hasAttribute(\"disabled\")) {\n      return;\n    }\n    const value = getAttribute(option, \"value\");\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail: value })\n    );\n  };\n  #onValueChange(value) {\n    for (const node of this.#$slot.assignedElements()) {\n      const $option = this.#findRadioOptionElement(node);\n      if ($option != null) {\n        const isChecked = value === getAttribute($option, \"value\", \"\");\n        updateBooleanAttribute($option, \"checked\", isChecked);\n      }\n    }\n  }\n  #findRadioOptionElement(node) {\n    if (node.tagName === \"SINCH-RADIO-OPTION\") {\n      return node;\n    }\n    return node.querySelector?.(\"sinch-radio-option\") ?? null;\n  }\n  #getFirstOption() {\n    for (const node of this.#$slot.assignedElements()) {\n      const $option = this.#findRadioOptionElement(node);\n      if ($option?.disabled !== true) {\n        return $option;\n      }\n    }\n    return null;\n  }\n  #getLastOption() {\n    for (const node of this.#$slot.assignedElements().reverse()) {\n      const $option = this.#findRadioOptionElement(node);\n      if ($option?.disabled !== true) {\n        return $option;\n      }\n    }\n    return null;\n  }\n  #getNextOption() {\n    const $options = this.#getEnabledRadioElements();\n    const $selectedOption = this.#findSelectedOption($options);\n    const currentIndex = $selectedOption !== null ? $options.indexOf($selectedOption) : -1;\n    if (currentIndex \u003c 0) {\n      return this.#getFirstOption();\n    }\n    return $options[(currentIndex + 1) % $options.length];\n  }\n  #getPrevOption() {\n    const $options = this.#getEnabledRadioElements();\n    const $selectedOption = this.#findSelectedOption($options);\n    const currentIndex = $selectedOption !== null ? $options.indexOf($selectedOption) : -1;\n    if (currentIndex \u003c 0) {\n      return this.#getLastOption();\n    }\n    return $options[(currentIndex - 1 + $options.length) % $options.length];\n  }\n  #getEnabledRadioElements() {\n    return this.#$slot.assignedElements().map((el) =\u003e this.#findRadioOptionElement(el)).filter(Boolean).filter((el) =\u003e !el.hasAttribute(\"disabled\"));\n  }\n  #findSelectedOption(elements) {\n    return elements.find((el) =\u003e el.checked) ?? null;\n  }\n  #updateInvalid(isInvalid) {\n    for (const node of this.#$slot.assignedElements()) {\n      const $option = this.#findRadioOptionElement(node);\n      if ($option != null) {\n        updateBooleanAttribute($option, \"data-invalid\", isInvalid);\n      }\n    }\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-radio\", Radio);\nconst TEXT_EMPTY_DATA = \"​\";\nconst TEXT_WHITESPACE = \" \";\nconst isTextNode = ($n) =\u003e $n !== null \u0026\u0026 $n.nodeType === Node.TEXT_NODE;\nconst isEmptyText = (value) =\u003e value === null || value.length === 0 || value === TEXT_EMPTY_DATA;\nconst isEmptyTextNode = ($n) =\u003e isTextNode($n) \u0026\u0026 isEmptyText($n.nodeValue);\nconst getTextValue = ($n) =\u003e isEmptyText($n.nodeValue) ? TEXT_EMPTY_DATA : $n.nodeValue;\nconst isParagraph = ($n) =\u003e {\n  return $n !== null \u0026\u0026 $n.nodeType === Node.ELEMENT_NODE \u0026\u0026 $n.classList.contains(\"p\");\n};\nconst isListItem = ($n) =\u003e {\n  return isUnorderedListItem($n) || isOrderedListItem($n);\n};\nconst isUnorderedListItem = ($n) =\u003e {\n  return $n !== null \u0026\u0026 $n.nodeType === Node.ELEMENT_NODE \u0026\u0026 $n.classList.contains(\"uli\");\n};\nconst isOrderedListItem = ($n) =\u003e {\n  return $n !== null \u0026\u0026 $n.nodeType === Node.ELEMENT_NODE \u0026\u0026 $n.classList.contains(\"oli\");\n};\nconst isTextBlock = ($n) =\u003e isParagraph($n) || isListItem($n);\nconst isEmoji = ($n) =\u003e {\n  return $n !== null \u0026\u0026 $n.nodeName === \"IMG\";\n};\nconst isInline = ($n) =\u003e $n !== null \u0026\u0026 $n.nodeName === \"SPAN\";\nconst isRoot = ($n) =\u003e $n !== null \u0026\u0026 $n.nodeName === \"DIV\";\nconst assertNonNull = ($n) =\u003e {\n  if ($n === null) {\n    throw new Error(\"Node is NULL\");\n  }\n};\nconst assertEquals = (a, b) =\u003e {\n  if (a !== b) {\n    throw new Error(`\"${a}\" not equals \"${b}\"`);\n  }\n};\nconst assertTextNode = ($n) =\u003e {\n  assertNonNull($n);\n  if (!isTextNode($n)) {\n    throw new Error(`Node is not a TextNode: ${$n?.nodeName}`);\n  }\n};\nconst assertTextBlock = ($n) =\u003e {\n  assertNonNull($n);\n  if (!isTextBlock($n)) {\n    throw new Error(`Node is not a TextBlock: ${$n?.nodeName}`);\n  }\n};\nconst assertListItem = ($n) =\u003e {\n  assertNonNull($n);\n  if (!isListItem($n)) {\n    throw new Error(`Node is not a ListItem: ${$n?.nodeName}`);\n  }\n};\nconst markListItemAsBlock = ($li) =\u003e {\n  $li.classList.add(\"block\");\n};\nconst isListItemMarkedArBlock = ($li) =\u003e {\n  return $li.classList.contains(\"block\");\n};\nconst MAX_LISTITEM_LEVEL = 4;\nconst removeListItemLevel = ($li) =\u003e {\n  $li.classList.remove(\"l0\", \"l1\", \"l2\", \"l3\", \"l4\");\n};\nconst setListItemLevel = ($li, level) =\u003e {\n  removeListItemLevel($li);\n  const clampedLevel = Math.max(0, Math.min(level, MAX_LISTITEM_LEVEL));\n  $li.classList.add(`l${clampedLevel}`);\n};\nconst getListItemLevel = ($li) =\u003e {\n  if ($li.classList.contains(\"l1\")) {\n    return 1;\n  }\n  if ($li.classList.contains(\"l2\")) {\n    return 2;\n  }\n  if ($li.classList.contains(\"l3\")) {\n    return 3;\n  }\n  if ($li.classList.contains(\"l4\")) {\n    return 4;\n  }\n  return 0;\n};\nconst assertInline = ($n) =\u003e {\n  assertNonNull($n);\n  if (!isInline($n)) {\n    throw new Error(`Node is not an Inline: ${$n?.nodeName}`);\n  }\n};\nconst isTextContent = ($n) =\u003e {\n  return $n !== null \u0026\u0026 $n.nodeType === Node.ELEMENT_NODE \u0026\u0026 (isInline($n) || isEmoji($n));\n};\nconst assertTextContent = ($n) =\u003e {\n  assertNonNull($n);\n  if (!isTextContent($n)) {\n    throw new Error(`Node is not TextContent: ${$n?.nodeName}`);\n  }\n};\nconst createTextNode = (data2, doc) =\u003e {\n  return doc.createTextNode(data2);\n};\nconst createEmptyTextNode = (doc) =\u003e {\n  return createTextNode(TEXT_EMPTY_DATA, doc);\n};\nconst createEmptyInline = (doc) =\u003e {\n  const res = doc.createElement(\"SPAN\");\n  res.append(createEmptyTextNode(doc));\n  return res;\n};\nconst getParentInline = ($n) =\u003e {\n  const $p = $n.parentNode;\n  assertInline($p);\n  return $p;\n};\nconst isInsideList = (isOrdered, $n) =\u003e {\n  const $block = getParentTextBlock($n);\n  return isOrdered ? isOrderedListItem($block) : isUnorderedListItem($block);\n};\nconst isAllInsideList = (isOrdered, $a, $b) =\u003e {\n  return allSiblingsIncludingSatisfy(\n    getParentTextBlock($a),\n    getParentTextBlock($b),\n    isOrdered ? isOrderedListItem : isUnorderedListItem\n  );\n};\nconst FORMAT_TYPE_TO_NAME = {\n  formatBold: \"b\",\n  formatCodeTag: \"c\",\n  formatItalic: \"i\",\n  formatStrikeThrough: \"s\"\n};\nconst isFormatName = ($n, inlineName) =\u003e {\n  return $n.classList.contains(inlineName);\n};\nconst isFormatBold = ($n) =\u003e isFormatName($n, \"b\");\nconst isFormatItalic = ($n) =\u003e isFormatName($n, \"i\");\nconst isFormatStrikethrough = ($n) =\u003e isFormatName($n, \"s\");\nconst isFormatCodetag = ($n) =\u003e isFormatName($n, \"c\");\nconst isFormatLink = ($n) =\u003e isFormatName($n, \"l\");\nconst isAllInsideFormatName = ($a, $b, formatName) =\u003e {\n  const aBlock = getParentTextBlock($a);\n  const bBlock = getParentTextBlock($b);\n  let $currentBlock = aBlock;\n  let $prevBlock = null;\n  let hasTextNodes = false;\n  do {\n    let $n = $currentBlock === getParentTextBlock($a) ? $a : getFirstTextContent($currentBlock);\n    let $prev = $n;\n    do {\n      if (isInline($n)) {\n        hasTextNodes = true;\n        if (!isFormatName($n, formatName)) {\n          return false;\n        }\n      }\n      $prev = $n;\n      $n = getNextSiblingTextContent($n);\n    } while ($n !== null \u0026\u0026 $prev !== $b);\n    $prevBlock = $currentBlock;\n    $currentBlock = getNextSiblingTextBlock($currentBlock);\n  } while ($currentBlock !== null \u0026\u0026 $prevBlock !== bBlock);\n  return hasTextNodes;\n};\nconst isAllInsideBold = ($a, $b) =\u003e isAllInsideFormatName($a, $b, \"b\");\nconst isAllInsideItalic = ($a, $b) =\u003e isAllInsideFormatName($a, $b, \"i\");\nconst isAllInsideStrikethrough = ($a, $b) =\u003e isAllInsideFormatName($a, $b, \"s\");\nconst isAllInsideCodetag = ($a, $b) =\u003e isAllInsideFormatName($a, $b, \"c\");\nconst isAllInsideLink = ($a, $b) =\u003e isAllInsideFormatName($a, $b, \"l\");\nconst LINK_HREF_ATTR_NAME = \"data-href\";\nconst copyFormatName = ($source, $target) =\u003e {\n  const $inline = isTextNode($source) ? getParentInline($source) : $source;\n  $target.className = $inline.className;\n  if (isFormatLink($inline)) {\n    $target.setAttribute(LINK_HREF_ATTR_NAME, $inline.getAttribute(LINK_HREF_ATTR_NAME) ?? \"\");\n  }\n};\nconst setInlineFormat = ($n, formatName, shouldEnable) =\u003e {\n  if (shouldEnable) {\n    if (formatName === \"c\" || isFormatName($n, \"c\")) {\n      $n.className = \"\";\n    }\n    if (formatName === \"l\" || isFormatName($n, \"l\")) {\n      $n.className = \"\";\n      $n.removeAttribute(LINK_HREF_ATTR_NAME);\n    }\n    $n.classList.add(formatName);\n  } else {\n    if (formatName === \"l\") {\n      $n.removeAttribute(LINK_HREF_ATTR_NAME);\n    }\n    $n.classList.remove(formatName);\n  }\n};\nconst setAllInlineFormat = ($a, $b, formatName, shouldEnable) =\u003e {\n  const aBlock = getParentTextBlock($a);\n  const bBlock = getParentTextBlock($b);\n  let $currentBlock = aBlock;\n  let $prevBlock = null;\n  do {\n    let $n = $currentBlock === getParentTextBlock($a) ? $a : getFirstTextContent($currentBlock);\n    let $prev = $n;\n    do {\n      if (isInline($n)) {\n        setInlineFormat($n, formatName, shouldEnable);\n      }\n      $prev = $n;\n      $n = getNextSiblingTextContent($n);\n    } while ($n !== null \u0026\u0026 $prev !== $b);\n    $prevBlock = $currentBlock;\n    $currentBlock = getNextSiblingTextBlock($currentBlock);\n  } while ($currentBlock !== null \u0026\u0026 $prevBlock !== bBlock);\n};\nconst toggleInlineFormat = ($n, formatName) =\u003e {\n  setInlineFormat($n, formatName, !isFormatName($n, formatName));\n};\nconst areSameInlineFormat = ($a, $b) =\u003e {\n  if ($a.classList.length === 0 \u0026\u0026 $b.classList.length === 0) {\n    return true;\n  }\n  if ($a.classList.length !== $b.classList.length) {\n    return false;\n  }\n  if ($a.className === \"l\") {\n    return $b.className === \"l\" \u0026\u0026 $a.getAttribute(LINK_HREF_ATTR_NAME) === $b.getAttribute(LINK_HREF_ATTR_NAME);\n  }\n  for (let i = 0; i \u003c $a.classList.length; i++) {\n    if (!$b.classList.contains($a.classList[i])) {\n      return false;\n    }\n  }\n  return true;\n};\nconst createInlineWithText = (data2, doc) =\u003e {\n  const $res = doc.createElement(\"SPAN\");\n  $res.append(createTextNode(data2, doc));\n  return $res;\n};\nconst createInlineWithTextOfType = ($text, $source) =\u003e {\n  const $res = $source.ownerDocument.createElement($source.nodeName);\n  copyFormatName($source, $res);\n  $res.append($text);\n  return $res;\n};\nconst createLink = (text, href, doc) =\u003e {\n  const $link = createInlineWithText(text, doc);\n  setInlineFormat($link, \"l\", true);\n  $link.setAttribute(LINK_HREF_ATTR_NAME, href);\n  return $link;\n};\nconst EMOJI_CHAR_ATTR_NAME = \"data-char\";\nconst createEmoji = (emojiChar, baseUrl, doc) =\u003e {\n  const $emoji = doc.createElement(\"img\");\n  $emoji.setAttribute(EMOJI_CHAR_ATTR_NAME, emojiChar);\n  $emoji.setAttribute(\"src\", getEmojiUrl(baseUrl, emojiChar));\n  $emoji.classList.add(\"e\");\n  return $emoji;\n};\nconst PARAGRAPH_CLASSNAME = \"p\";\nconst createActuallyEmptyParagraph = (doc) =\u003e {\n  const $p = doc.createElement(\"p\");\n  $p.classList.add(PARAGRAPH_CLASSNAME);\n  return $p;\n};\nconst createEmptyParagraph = (doc) =\u003e {\n  const res = createActuallyEmptyParagraph(doc);\n  res.append(createEmptyInline(doc));\n  return res;\n};\nconst createParagraphWithChildren = (children, doc) =\u003e {\n  if (children.length === 0) {\n    return createEmptyParagraph(doc);\n  }\n  const $p = createActuallyEmptyParagraph(doc);\n  $p.append(...children);\n  return $p;\n};\nconst ULI_CLASSNAME = \"uli\";\nconst OLI_CLASSNAME = \"oli\";\nconst createActuallyEmptyListItem = (isOrdered, listLevel, doc) =\u003e {\n  const $li = doc.createElement(\"p\");\n  $li.className = isOrdered ? OLI_CLASSNAME : ULI_CLASSNAME;\n  setListItemLevel($li, listLevel);\n  return $li;\n};\nconst createEmptyListItem = (isOrdered, listLevel, doc) =\u003e {\n  const $li = createActuallyEmptyListItem(isOrdered, listLevel, doc);\n  $li.append(\n    createEmptyInline(doc)\n  );\n  return $li;\n};\nconst setListItemOrderedType = ($li, isOrdered) =\u003e {\n  if (isOrdered) {\n    $li.classList.remove(ULI_CLASSNAME);\n    $li.classList.add(OLI_CLASSNAME);\n  } else {\n    $li.classList.remove(OLI_CLASSNAME);\n    $li.classList.add(ULI_CLASSNAME);\n  }\n};\nconst convertToListItem = ($p, isOrdered) =\u003e {\n  $p.classList.remove(PARAGRAPH_CLASSNAME);\n  if (isOrdered) {\n    $p.classList.add(OLI_CLASSNAME);\n  } else {\n    $p.classList.add(ULI_CLASSNAME);\n  }\n  const $li = $p;\n  setListItemLevel($li, 0);\n  return $li;\n};\nconst convertToParagraph = ($li) =\u003e {\n  removeListItemLevel($li);\n  $li.classList.remove(ULI_CLASSNAME, OLI_CLASSNAME);\n  $li.classList.add(PARAGRAPH_CLASSNAME);\n  ensureListItemLevelsAreCorrect($li);\n  return $li;\n};\nconst createListItemWithChildren = (children, isOrdered, listLevel, doc) =\u003e {\n  if (children.length === 0) {\n    return createEmptyListItem(isOrdered, listLevel, doc);\n  }\n  const $li = createActuallyEmptyListItem(isOrdered, listLevel, doc);\n  $li.append(...children);\n  return $li;\n};\nconst getParentTextBlock = ($node) =\u003e {\n  const $inline = isTextNode($node) ? getParentInline($node) : $node;\n  const $p = $inline.parentNode;\n  assertTextBlock($p);\n  return $p;\n};\nconst childIndexOf = ($parent, $child) =\u003e {\n  return Array.prototype.indexOf.call($parent.childNodes, $child);\n};\nconst getChildByIndex = ($parent, index) =\u003e {\n  const children = $parent.childNodes;\n  if (index \u003c 0 || index \u003e= children.length) {\n    throw new Error(\"Invalid index\");\n  }\n  const $ch = index \u003e= children.length ? children[children.length - 1] : children[index];\n  return $ch;\n};\nconst afterLastChildIndex = ($parent) =\u003e {\n  return $parent.childNodes.length;\n};\nconst isAfterLastChildIndex = ($parent, index) =\u003e {\n  return index \u003e= $parent.childNodes.length;\n};\nconst getLastChild = (n) =\u003e n.lastChild;\nconst getFirstChild = (n) =\u003e n.firstChild;\nconst getPrevSibling = (n) =\u003e n.previousSibling;\nconst getNextSibling = (n) =\u003e n.nextSibling;\nconst getSiblingTextBlock = (getSibling) =\u003e ($node) =\u003e {\n  const $sib = getSibling($node);\n  if ($sib !== null) {\n    assertTextBlock($sib);\n    return $sib;\n  }\n  return null;\n};\nconst getPrevSiblingTextBlock = getSiblingTextBlock(getPrevSibling);\nconst getNextSiblingTextBlock = getSiblingTextBlock(getNextSibling);\nconst getPrevSiblingTextContent = ($node, ensureValid) =\u003e {\n  const $sib = $node.previousSibling;\n  if ($sib !== null) {\n    assertTextContent($sib);\n  }\n  return $sib;\n};\nconst getNextSiblingTextContent = ($node, ensureValid) =\u003e {\n  const $sib = $node.nextSibling;\n  if ($sib !== null) {\n    assertTextContent($sib);\n  }\n  return $sib;\n};\nconst createCollapsedRange = (cursor) =\u003e {\n  const { node, offset } = cursorToNodeWithOffset(cursor);\n  return {\n    startContainer: node,\n    startOffset: offset,\n    endContainer: node,\n    endOffset: offset\n  };\n};\nconst createSpanningRange = (aCursor, bCursor) =\u003e {\n  const { node: startContainer, offset: startOffset } = cursorToNodeWithOffset(aCursor);\n  const { node: endContainer, offset: endOffset } = cursorToNodeWithOffset(bCursor);\n  return {\n    startContainer,\n    startOffset,\n    endContainer,\n    endOffset\n  };\n};\nconst removePrevSiblings = ($node) =\u003e {\n  let $n;\n  while (($n = $node.previousSibling) !== null) {\n    $n.remove();\n  }\n};\nconst removeNextSiblings = ($node) =\u003e {\n  let $n;\n  while (($n = $node.nextSibling) !== null) {\n    $n.remove();\n  }\n};\nconst removeSiblingsBetween = ($a, $b) =\u003e {\n  let $n;\n  while (($n = $a.nextSibling) !== $b) {\n    assertNonNull($n);\n    $n.remove();\n  }\n};\nconst getCommonParent = ($n0, $n1) =\u003e {\n  let $n = $n0;\n  while (!$n.contains($n1)) {\n    $n = $n.parentNode;\n  }\n  return $n;\n};\nconst removeNodesBetween = (aCursor, bCursor) =\u003e {\n  if (aCursor.$inline === bCursor.$inline) {\n    return;\n  }\n  const commonParent = getCommonParent(aCursor.$inline, bCursor.$inline);\n  let $cpChildA = aCursor.$inline;\n  let $cpChildB = bCursor.$inline;\n  while ($cpChildA.parentNode !== commonParent) {\n    removeNextSiblings($cpChildA);\n    $cpChildA = $cpChildA.parentNode;\n  }\n  while ($cpChildB.parentNode !== commonParent) {\n    removePrevSiblings($cpChildB);\n    $cpChildB = $cpChildB.parentNode;\n  }\n  removeSiblingsBetween($cpChildA, $cpChildB);\n};\nconst ensureCorrectTextBlockIfEmpty = ($node) =\u003e {\n  if (!$node.hasChildNodes()) {\n    $node.append(\n      createEmptyInline($node.ownerDocument)\n    );\n    return;\n  }\n  const children = $node.childNodes;\n  if (children.length === 1) {\n    const $firstChild = children[0];\n    assertTextContent($firstChild);\n    if (isInline($firstChild)) {\n      if ($firstChild.childNodes.length \u003e 1 || !isTextNode($firstChild.firstChild)) {\n        $node.replaceChildren(createEmptyInline($node.ownerDocument));\n      }\n    }\n  }\n};\nconst getChildText = ($node) =\u003e {\n  if ($node.childNodes.length !== 1) {\n    throw new Error(\"Should have exact 1 child\");\n  }\n  const $child = $node.firstChild;\n  assertTextNode($child);\n  return $child;\n};\nconst getChildTextContent = (getFirstOrLastChild) =\u003e ($node) =\u003e {\n  ensureCorrectTextBlockIfEmpty($node);\n  const $child = getFirstOrLastChild($node);\n  assertTextContent($child);\n  return $child;\n};\nconst getLastTextContent = getChildTextContent(getLastChild);\nconst getFirstTextContent = getChildTextContent(getFirstChild);\nconst getFirstOrLastTextBlock = (getFirstOrLastChild) =\u003e ($root) =\u003e {\n  let $lc = getFirstOrLastChild($root);\n  if ($lc === null) {\n    $lc = createEmptyParagraph($root.ownerDocument);\n    $root.append($lc);\n  }\n  assertTextBlock($lc);\n  return $lc;\n};\nconst getLastTextBlock = getFirstOrLastTextBlock(getLastChild);\nconst mergeSiblingTextNodes = ($a, aCursor, bCursor) =\u003e {\n  const $b = $a.nextSibling;\n  if ($b === null) {\n    return;\n  }\n  assertTextNode($b);\n  const aContent = getTextValue($a);\n  const bContent = getTextValue($b);\n  const aContentLength = isEmptyText(aContent) ? 0 : aContent.length;\n  const bContentLength = isEmptyText(bContent) ? 0 : bContent.length;\n  let resultText = (isEmptyText(aContent) ? \"\" : aContent) + (isEmptyText(bContent) ? \"\" : bContent);\n  const isEmptyResultText = resultText.length === 0;\n  if (aCursor.$text === $a) {\n    aCursor.offset = isEmptyResultText ? 1 : aCursor.offset;\n  }\n  if (aCursor.$text === $b) {\n    aCursor.$text = $a;\n    aCursor.offset = isEmptyResultText ? 1 : aContentLength + (bContentLength === 0 ? 0 : aCursor.offset);\n  }\n  if (bCursor != null) {\n    if (bCursor.$text === $a) {\n      bCursor.offset = isEmptyResultText ? 1 : bCursor.offset;\n    }\n    if (bCursor.$text === $b) {\n      bCursor.$text = $a;\n      bCursor.offset = isEmptyResultText ? 1 : aContentLength + (bContentLength === 0 ? 0 : bCursor.offset);\n    }\n  }\n  if (isEmptyResultText) {\n    resultText = TEXT_EMPTY_DATA;\n  }\n  $a.nodeValue = resultText;\n  $b.remove();\n  mergeSiblingTextNodes($a, aCursor);\n};\nconst mergeNextTextContentSibling = ($a, aCursor, bCursor) =\u003e {\n  const $b = $a.nextSibling;\n  if ($b === null) {\n    return;\n  }\n  assertTextContent($b);\n  if (isInline($a) \u0026\u0026 isInline($b)) {\n    const $aText = getChildText($a);\n    const $bText = getChildText($b);\n    if (areSameInlineFormat($a, $b) || isEmptyTextNode($aText) || isEmptyTextNode($bText)) {\n      $a.append($bText);\n      $b.remove();\n      mergeSiblingTextNodes($aText, aCursor, bCursor);\n    }\n  }\n};\nconst mergePrevTextContentSibling = ($b, aCursor, bCursor) =\u003e {\n  const $a = $b.previousSibling;\n  if ($a === null) {\n    return;\n  }\n  assertTextContent($a);\n  if (isInline($a) \u0026\u0026 isInline($b)) {\n    const $aText = getChildText($a);\n    const $bText = getChildText($b);\n    if (areSameInlineFormat($a, $b) || isEmptyTextNode($aText) || isEmptyTextNode($bText)) {\n      $a.append($bText);\n      $b.remove();\n      mergeSiblingTextNodes($aText, aCursor, bCursor);\n    }\n  }\n};\nconst mergeTextContentBetween = ($a, $b, aCursor, bCursor) =\u003e {\n  const $sib = getNextSiblingTextContent($a);\n  if ($sib === null) {\n    return;\n  }\n  if ($a === $b || $sib === $b) {\n    mergeNextTextContentSibling($b, aCursor, bCursor);\n    mergeNextTextContentSibling($a, aCursor, bCursor);\n    mergePrevTextContentSibling($a, aCursor, bCursor);\n    return;\n  }\n  mergeNextTextContentSibling($a, aCursor, bCursor);\n  const $newSib = getNextSiblingTextContent($a);\n  assertNonNull($newSib);\n  if ($newSib === $sib) {\n    mergePrevTextContentSibling($a, aCursor, bCursor);\n    mergeTextContentBetween($sib, $b, aCursor, bCursor);\n  } else {\n    mergeTextContentBetween($a, $b, aCursor, bCursor);\n  }\n};\nconst mergeNextTextBlock = ($a, aCursor, bCursor) =\u003e {\n  const $b = $a.nextSibling;\n  if ($b === null) {\n    return;\n  }\n  assertTextBlock($b);\n  const $lastChild = getLastChild($a);\n  if ($b.hasChildNodes()) {\n    $a.append(...Array.from($b.childNodes));\n  }\n  $b.remove();\n  if ($lastChild !== null) {\n    assertTextContent($lastChild);\n    mergeNextTextContentSibling($lastChild, aCursor, bCursor);\n  }\n};\nconst sliceChildren = ($parent, index) =\u003e {\n  if (index \u003c 0) {\n    throw new Error(\"Not found\");\n  }\n  const children = Array.from($parent.childNodes);\n  if (index === 0) {\n    return children;\n  }\n  return children.slice(index);\n};\nconst splitTextBlock = ($a, childIndex) =\u003e {\n  const bChildren = sliceChildren($a, childIndex);\n  const $b = isListItem($a) ? createListItemWithChildren(bChildren, isOrderedListItem($a), getListItemLevel($a), $a.ownerDocument) : createParagraphWithChildren(bChildren, $a.ownerDocument);\n  ensureCorrectTextBlockIfEmpty($a);\n  ensureCorrectTextBlockIfEmpty($b);\n  $a.after($b);\n  return [\n    $a,\n    $b\n  ];\n};\nconst splitTextNode = ($aText, offset) =\u003e {\n  const content = getTextValue($aText);\n  const aContent = content.substring(0, offset);\n  const bContent = content.substring(offset);\n  let $bText = null;\n  if (aContent.length \u003e 0 \u0026\u0026 bContent.length \u003e 0) {\n    $bText = createTextNode(bContent, $aText.ownerDocument);\n    $aText.nodeValue = aContent;\n  }\n  const $aInline = getParentInline($aText);\n  let $bInline = null;\n  if ($bText !== null) {\n    $bInline = createInlineWithTextOfType($bText, $aInline);\n    $aInline.after($bInline);\n  }\n  const $before = aContent.length === 0 ? getPrevSiblingTextContent($aInline) : $aInline;\n  const $after = $bInline ?? (aContent.length === 0 ? $aInline : getNextSiblingTextContent($aInline));\n  return [$before, $after];\n};\nconst sliceTextNode = ($n, startOffset, endOffset) =\u003e {\n  const $after = splitTextNode($n, startOffset)[1];\n  assertInline($after);\n  const $before = splitTextNode(getChildText($after), endOffset - startOffset)[0];\n  assertEquals($before, $after);\n  return $after;\n};\nconst splitTextNodeAndInsertEmptyInline = ($n, offset) =\u003e {\n  const [$before, $after] = splitTextNode($n, offset);\n  const $inline = createEmptyInline($n.ownerDocument);\n  copyFormatName($n, $inline);\n  if ($before !== null) {\n    $before.after($inline);\n  } else {\n    assertNonNull($after);\n    $after.before($inline);\n  }\n  return $inline;\n};\nconst formatInline = (formatType, range) =\u003e {\n  const aCursor = createIncomingCursorFromNodeWithOffset(range.startContainer, range.startOffset);\n  const bCursor = createIncomingCursorFromNodeWithOffset(range.endContainer, range.endOffset);\n  const formatName = FORMAT_TYPE_TO_NAME[formatType];\n  if (aCursor.$inline === bCursor.$inline \u0026\u0026 isTextNode(aCursor.$text)) {\n    const { $text, $inline, offset: startOffset } = aCursor;\n    const { offset: endOffset } = bCursor;\n    if (isEmptyText($text.nodeValue)) {\n      assertInline($inline);\n      toggleInlineFormat($inline, formatName);\n      return {\n        prevent: true,\n        range: createCollapsedRange(\n          createEndCursorFromTextContent($inline)\n        )\n      };\n    }\n    if (startOffset === endOffset) {\n      const $newinline2 = splitTextNodeAndInsertEmptyInline($text, startOffset);\n      toggleInlineFormat($newinline2, formatName);\n      return {\n        prevent: true,\n        range: createCollapsedRange(\n          createEndCursorFromTextContent($newinline2)\n        )\n      };\n    }\n    const $newinline = sliceTextNode($text, startOffset, endOffset);\n    toggleInlineFormat($newinline, formatName);\n    const aTrackingCursor2 = createBeginCursorFromTextContent($newinline);\n    const bTrackingCursor2 = createEndCursorFromTextContent($newinline);\n    mergeNextTextContentSibling($newinline, aTrackingCursor2, bTrackingCursor2);\n    mergePrevTextContentSibling($newinline, aTrackingCursor2, bTrackingCursor2);\n    return {\n      prevent: true,\n      range: createSpanningRange(aTrackingCursor2, bTrackingCursor2)\n    };\n  }\n  const areAllInline = isAllInsideFormatName(aCursor.$inline, bCursor.$inline, formatName);\n  let $aInline = aCursor.$inline;\n  let $bInline = bCursor.$inline;\n  if (isTextNode(aCursor.$text)) {\n    $aInline = splitTextNode(aCursor.$text, aCursor.offset)[1];\n  }\n  if (isTextNode(bCursor.$text)) {\n    $bInline = splitTextNode(bCursor.$text, bCursor.offset)[0];\n  }\n  if ($aInline === null) {\n    const aBlock = getNextSiblingTextBlock(getParentTextBlock(aCursor.$inline));\n    assertNonNull(aBlock);\n    $aInline = getFirstTextContent(aBlock);\n  }\n  if ($bInline === null) {\n    const bBlock = getPrevSiblingTextBlock(getParentTextBlock(bCursor.$inline));\n    assertNonNull(bBlock);\n    $bInline = getLastTextContent(bBlock);\n  }\n  setAllInlineFormat($aInline, $bInline, formatName, !areAllInline);\n  const aTrackingCursor = createBeginCursorFromTextContent($aInline);\n  const bTrackingCursor = createEndCursorFromTextContent($bInline);\n  mergeTextContentBetween($aInline, $bInline, aTrackingCursor, bTrackingCursor);\n  return {\n    prevent: true,\n    range: createSpanningRange(aTrackingCursor, bTrackingCursor)\n  };\n};\nconst allSiblingsIncludingSatisfy = (aNode, bNode, func) =\u003e {\n  let currentNode = aNode;\n  const nextSib = bNode.nextSibling;\n  while (currentNode !== null \u0026\u0026 currentNode !== nextSib) {\n    const tempNext = currentNode.nextSibling;\n    if (!func(currentNode)) {\n      return false;\n    }\n    currentNode = tempNext;\n  }\n  return true;\n};\nconst formatIndent = (range) =\u003e {\n  if (range.startContainer === range.endContainer \u0026\u0026 range.startOffset === range.endOffset \u0026\u0026 range.startOffset !== 0) {\n    return {\n      prevent: false\n    };\n  }\n  const aCursor = createIncomingCursorFromNodeWithOffset(range.startContainer, range.startOffset);\n  const bCursor = createIncomingCursorFromNodeWithOffset(range.endContainer, range.endOffset);\n  const aBlock = getParentTextBlock(aCursor.$inline);\n  const bBlock = getParentTextBlock(bCursor.$inline);\n  const $iterateUpToNode = getNextSiblingTextBlock(bBlock);\n  let $block = aBlock;\n  let $prevBlock = null;\n  while ($block !== null \u0026\u0026 $block !== $iterateUpToNode) {\n    if (isListItem($block) \u0026\u0026 !isListItemMarkedArBlock($block)) {\n      const $prev = $prevBlock ?? getPrevSiblingTextBlock($block);\n      const currentLevel = getListItemLevel($block);\n      if (isListItem($prev) \u0026\u0026 currentLevel \u003c= getListItemLevel($prev)) {\n        setListItemLevel($block, currentLevel + 1);\n      }\n    }\n    $prevBlock = $block;\n    $block = getNextSiblingTextBlock($block);\n  }\n  return {\n    prevent: true,\n    range\n  };\n};\nconst ensureListItemLevelsAreCorrect = ($li) =\u003e {\n  if ($li === null) {\n    return;\n  }\n  let $block = getNextSiblingTextBlock($li);\n  let prevLevel = isListItem($li) ? getListItemLevel($li) : -1;\n  while ($block !== null \u0026\u0026 isListItem($block)) {\n    let currentLevel = getListItemLevel($block);\n    if (currentLevel \u003c= prevLevel + 1) {\n      break;\n    }\n    currentLevel = prevLevel + 1;\n    setListItemLevel($block, currentLevel);\n    prevLevel = currentLevel;\n    $block = getNextSiblingTextBlock($block);\n  }\n};\nconst formatOutdent = (range) =\u003e {\n  if (range.startContainer === range.endContainer \u0026\u0026 range.startOffset === range.endOffset \u0026\u0026 range.startOffset !== 0) {\n    return {\n      prevent: false\n    };\n  }\n  const aCursor = createIncomingCursorFromNodeWithOffset(range.startContainer, range.startOffset);\n  const bCursor = createIncomingCursorFromNodeWithOffset(range.endContainer, range.endOffset);\n  const aBlock = getParentTextBlock(aCursor.$inline);\n  const bBlock = getParentTextBlock(bCursor.$inline);\n  const $iterateUpToNode = getNextSiblingTextBlock(bBlock);\n  let $block = aBlock;\n  let $lastListItem = null;\n  while ($block !== null \u0026\u0026 $block !== $iterateUpToNode) {\n    if (isListItem($block)) {\n      setListItemLevel($block, getListItemLevel($block) - 1);\n      $lastListItem = $block;\n    }\n    $block = getNextSiblingTextBlock($block);\n  }\n  if ($lastListItem !== null) {\n    ensureListItemLevelsAreCorrect($lastListItem);\n  }\n  return {\n    prevent: true,\n    range\n  };\n};\nconst formatList = (isOrdered, range) =\u003e {\n  const aCursor = createIncomingCursorFromNodeWithOffset(range.startContainer, range.startOffset);\n  const bCursor = createIncomingCursorFromNodeWithOffset(range.endContainer, range.endOffset);\n  const aBlock = getParentTextBlock(aCursor.$inline);\n  const bBlock = getParentTextBlock(bCursor.$inline);\n  const isInsideSameListType = isAllInsideList(isOrdered, aCursor.$inline, bCursor.$inline);\n  if (isInsideSameListType) {\n    assertListItem(aBlock);\n    assertListItem(bBlock);\n    const $iterateUpToNode2 = getNextSiblingTextBlock(bBlock);\n    let $block2 = aBlock;\n    while ($block2 !== null \u0026\u0026 $block2 !== $iterateUpToNode2) {\n      convertToParagraph($block2);\n      $block2 = getNextSiblingTextBlock($block2);\n    }\n    return {\n      prevent: true,\n      range: createCollapsedRange(bCursor)\n    };\n  }\n  const $iterateUpToNode = getNextSiblingTextBlock(bBlock);\n  let $block = aBlock;\n  while ($block !== null \u0026\u0026 $block !== $iterateUpToNode) {\n    if (isParagraph($block)) {\n      convertToListItem($block, isOrdered);\n    } else {\n      assertListItem($block);\n      setListItemOrderedType($block, isOrdered);\n    }\n    $block = getNextSiblingTextBlock($block);\n  }\n  return {\n    prevent: true,\n    range: createCollapsedRange(bCursor)\n  };\n};\nconst createCursorFromTextNode = (node, offset) =\u003e {\n  return {\n    $text: node,\n    $inline: getParentInline(node),\n    offset: Math.min(node.length, offset)\n  };\n};\nconst createBeginCursorFromTextContent = (node) =\u003e {\n  if (isInline(node)) {\n    const $text = getChildText(node);\n    const content = getTextValue($text);\n    return {\n      $inline: node,\n      $text,\n      offset: isEmptyText(content) ? content.length : 0\n    };\n  }\n  return {\n    $text: null,\n    $inline: node,\n    offset: 0\n  };\n};\nconst createEndCursorFromTextContent = (node) =\u003e {\n  if (isInline(node)) {\n    const $text = getChildText(node);\n    return {\n      $inline: node,\n      $text,\n      offset: $text.length\n    };\n  }\n  return {\n    $text: null,\n    $inline: node,\n    offset: 0,\n    isAfterInline: true\n  };\n};\nconst createIncomingCursorFromNodeWithOffset = (node, offset) =\u003e {\n  if (isTextNode(node)) {\n    return createCursorFromTextNode(node, offset);\n  }\n  if (isEmoji(node)) {\n    return {\n      $text: null,\n      $inline: node,\n      offset: 0\n    };\n  }\n  if (isTextBlock(node)) {\n    if (isAfterLastChildIndex(node, offset)) {\n      return createEndCursorFromTextContent(\n        getLastTextContent(node)\n      );\n    }\n    return createIncomingCursorFromNodeWithOffset(getChildByIndex(node, offset), 0);\n  }\n  if (isInline(node)) {\n    return {\n      $inline: node,\n      $text: getChildText(node),\n      offset: 0\n    };\n  }\n  if (isRoot(node)) {\n    if (isAfterLastChildIndex(node, offset)) {\n      const $block = getLastTextBlock(node);\n      return createIncomingCursorFromNodeWithOffset($block, $block.childNodes.length);\n    }\n    return createIncomingCursorFromNodeWithOffset(getChildByIndex(node, offset), 0);\n  }\n  throw new Error(\"Should not happen\");\n};\nconst cursorToNodeWithOffset = ({ $text, $inline, offset, isAfterInline }) =\u003e {\n  if (isTextNode($text)) {\n    return {\n      node: $text,\n      offset\n    };\n  }\n  const $block = getParentTextBlock($inline);\n  const childIndex = childIndexOf($block, $inline) + (isAfterInline === true ? 1 : 0);\n  return {\n    node: $block,\n    offset: childIndex\n  };\n};\nconst removeContentInRange = (range) =\u003e {\n  const aCursor = createIncomingCursorFromNodeWithOffset(range.startContainer, range.startOffset);\n  const bCursor = createIncomingCursorFromNodeWithOffset(range.endContainer, range.endOffset);\n  if (aCursor.$inline === bCursor.$inline \u0026\u0026 aCursor.offset === bCursor.offset \u0026\u0026 aCursor.isAfterInline === bCursor.isAfterInline) {\n    return aCursor;\n  }\n  if (aCursor.$text === bCursor.$text \u0026\u0026 isTextNode(aCursor.$text)) {\n    const { $text, $inline, offset: startOffset } = aCursor;\n    const { offset: endOffset } = bCursor;\n    const content = getTextValue($text);\n    const nextContent = content.substring(0, startOffset) + content.substring(endOffset);\n    $text.nodeValue = nextContent;\n    if (isEmptyText(nextContent)) {\n      const $nextSib = getNextSiblingTextContent($inline);\n      const $prevSib = getPrevSiblingTextContent($inline);\n      if ($prevSib === null \u0026\u0026 $nextSib === null) {\n        $text.nodeValue = TEXT_EMPTY_DATA;\n        return createEndCursorFromTextContent($inline);\n      }\n      $inline.remove();\n      if ($nextSib === null) {\n        assertNonNull($prevSib);\n        return createEndCursorFromTextContent($prevSib);\n      }\n      return createBeginCursorFromTextContent($nextSib);\n    }\n    return createCursorFromTextNode($text, startOffset);\n  }\n  removeNodesBetween(aCursor, bCursor);\n  if (isTextNode(aCursor.$text)) {\n    aCursor.$text.nodeValue = getTextValue(aCursor.$text).substring(0, aCursor.offset);\n  }\n  if (isTextNode(bCursor.$text)) {\n    bCursor.$text.nodeValue = getTextValue(bCursor.$text).substring(bCursor.offset);\n  }\n  const aBlock = getParentTextBlock(aCursor.$inline);\n  const bBlock = getParentTextBlock(bCursor.$inline);\n  if (aCursor.$inline !== bCursor.$inline \u0026\u0026 (isEmptyTextNode(bCursor.$text) || bCursor.$text === null \u0026\u0026 bCursor.isAfterInline === true)) {\n    bCursor.$inline.remove();\n  }\n  let trackingCursor;\n  if (isEmptyTextNode(aCursor.$text) || aCursor.$text === null \u0026\u0026 aCursor.isAfterInline !== true) {\n    const $sib = getNextSiblingTextContent(aCursor.$inline);\n    aCursor.$inline.remove();\n    if ($sib === null) {\n      trackingCursor = createEndCursorFromTextContent(getLastTextContent(aBlock));\n    } else {\n      trackingCursor = createBeginCursorFromTextContent($sib);\n    }\n  } else {\n    trackingCursor = createEndCursorFromTextContent(aCursor.$inline);\n  }\n  if (aBlock === bBlock) {\n    mergeNextTextContentSibling(trackingCursor.$inline, trackingCursor);\n    mergePrevTextContentSibling(trackingCursor.$inline, trackingCursor);\n  } else if (getNextSiblingTextBlock(aBlock) === bBlock) {\n    mergeNextTextBlock(aBlock, trackingCursor);\n  }\n  return trackingCursor;\n};\nconst deleteContentBackward = ($root, range) =\u003e {\n  const { startContainer, endContainer, startOffset, endOffset } = range;\n  if (startContainer === endContainer \u0026\u0026 startOffset + 1 === endOffset \u0026\u0026 isTextNode(startContainer)) {\n    if (startContainer.length \u003e 1) {\n      return DEFAULT_ACTION_RESULT;\n    }\n    if (startContainer.length === 1 \u0026\u0026 startContainer.nodeValue !== TEXT_EMPTY_DATA) {\n      startContainer.nodeValue = TEXT_EMPTY_DATA;\n      return {\n        prevent: true,\n        range: {\n          startContainer,\n          startOffset: 1,\n          endContainer: startContainer,\n          endOffset: 1\n        }\n      };\n    }\n    const $inline = getParentInline(startContainer);\n    const $block = getParentTextBlock($inline);\n    const childIndex = childIndexOf($block, $inline);\n    if (childIndex \u003e 0) {\n      const $prevSib = getChildByIndex($block, childIndex - 1);\n      if (isInline($prevSib)) {\n        const $text = getChildText($prevSib);\n        return deleteContentBackward($root, {\n          startContainer: $text,\n          startOffset: $text.length - 1,\n          endContainer,\n          endOffset\n        });\n      }\n      return deleteContentBackward($root, {\n        startContainer: $block,\n        startOffset: childIndex - 1,\n        endContainer,\n        endOffset\n      });\n    }\n    const $prevBlock = getPrevSiblingTextBlock($block);\n    if ($prevBlock !== null) {\n      return deleteContentBackward($root, {\n        startContainer: $prevBlock,\n        startOffset: afterLastChildIndex($prevBlock),\n        endContainer,\n        endOffset\n      });\n    }\n  }\n  return {\n    prevent: true,\n    range: createCollapsedRange(\n      removeContentInRange(range)\n    )\n  };\n};\nconst insertLink = ($root, text, href, range) =\u003e {\n  const cursor = removeContentInRange(range);\n  const { $text, $inline, offset, isAfterInline: isAfterLastChild } = cursor;\n  const $link = createLink(text, href, $root.ownerDocument);\n  if (isTextNode($text)) {\n    if (isEmptyText($text.nodeValue)) {\n      getParentTextBlock($inline).replaceChild($link, $inline);\n    } else {\n      const [$before, $after] = splitTextNode($text, offset);\n      if ($before === null) {\n        assertNonNull($after);\n        $after.before($link);\n      } else {\n        $before.after($link);\n      }\n    }\n  } else if (isAfterLastChild === true) {\n    $inline.after($link);\n  } else {\n    $inline.before($link);\n  }\n  return {\n    prevent: true,\n    range: createCollapsedRange(\n      createEndCursorFromTextContent($link)\n    )\n  };\n};\nconst insertLineBreak = (range) =\u003e {\n  const cursor = removeContentInRange(range);\n  const { $text, $inline, offset, isAfterInline: isAfterLastChild } = cursor;\n  const $block = getParentTextBlock($inline);\n  if (isListItem($block)) {\n    if (isEmptyTextBlock($block)) {\n      convertToParagraph($block);\n      return {\n        prevent: true,\n        range: createCollapsedRange(\n          createEndCursorFromTextContent(getLastTextContent($block))\n        )\n      };\n    }\n  }\n  let splitIndex = 0;\n  if (isTextNode($text)) {\n    const [$before] = splitTextNode($text, offset);\n    splitIndex = $before !== null ? childIndexOf($block, $before) + 1 : 0;\n  } else {\n    splitIndex = childIndexOf($block, $inline) + (isAfterLastChild === true ? 1 : 0);\n  }\n  const [_, $bBlock] = splitTextBlock($block, splitIndex);\n  return {\n    prevent: true,\n    range: createCollapsedRange(\n      createBeginCursorFromTextContent(getFirstTextContent($bBlock))\n    )\n  };\n};\nconst insertEmoji = ($root, emojiChar, range) =\u003e {\n  const cursor = removeContentInRange(range);\n  const { $text, $inline, offset, isAfterInline } = cursor;\n  const baseUrl = getEmojiBaseUrl($root);\n  const $emoji = createEmoji(emojiChar, baseUrl, $root.ownerDocument);\n  if (isTextNode($text)) {\n    if (isEmptyText($text.nodeValue)) {\n      getParentTextBlock($inline).replaceChild($emoji, $inline);\n    } else {\n      const [$before, $after] = splitTextNode($text, offset);\n      if ($before === null) {\n        assertNonNull($after);\n        $after.before($emoji);\n      } else {\n        $before.after($emoji);\n      }\n    }\n  } else if (isAfterInline === true) {\n    $inline.after($emoji);\n  } else {\n    $inline.before($emoji);\n  }\n  return {\n    prevent: true,\n    range: createCollapsedRange(\n      createEndCursorFromTextContent($emoji)\n    )\n  };\n};\nconst insertText = ($root, data2, range) =\u003e {\n  if (data2 !== null \u0026\u0026 isEmojiString(data2)) {\n    return insertEmoji($root, data2, range);\n  }\n  if (\n    // Is collapsed range\n    range.startContainer === range.endContainer \u0026\u0026 range.startOffset === range.endOffset \u0026\u0026 // Is non-empty text node\n    isTextNode(range.startContainer) \u0026\u0026 !isEmptyText(range.startContainer.nodeValue)\n  ) {\n    const $inline2 = getParentInline(range.startContainer);\n    const isHotTextWhitespace = range.startOffset === range.startContainer.length \u0026\u0026 data2 === TEXT_WHITESPACE \u0026\u0026 (isFormatCodetag($inline2) || isFormatLink($inline2));\n    if (!isHotTextWhitespace) {\n      return DEFAULT_ACTION_RESULT;\n    }\n  }\n  const cursor = removeContentInRange(range);\n  if (data2 === null) {\n    return {\n      prevent: true,\n      range: createCollapsedRange(cursor)\n    };\n  }\n  const { $text, $inline, offset, isAfterInline } = cursor;\n  if ($text === null \u0026\u0026 isEmoji($inline)) {\n    const $newInline = createInlineWithText(data2, $root.ownerDocument);\n    if (isAfterInline === true) {\n      $inline.after($newInline);\n    } else {\n      $inline.before($newInline);\n    }\n    return {\n      prevent: true,\n      range: createCollapsedRange(\n        createEndCursorFromTextContent($newInline)\n      )\n    };\n  }\n  if (isTextNode($text)) {\n    assertInline($inline);\n    if (isEmptyText($text.nodeValue)) {\n      $text.nodeValue = data2;\n      return {\n        prevent: true,\n        range: createCollapsedRange(\n          createCursorFromTextNode($text, data2.length)\n        )\n      };\n    }\n    if (offset === $text.length \u0026\u0026 data2 === TEXT_WHITESPACE) {\n      if (isFormatLink($inline) || isFormatCodetag($inline)) {\n        const $newinline = createInlineWithText(data2, $root.ownerDocument);\n        $inline.after($newinline);\n        return {\n          prevent: true,\n          range: createCollapsedRange(\n            createEndCursorFromTextContent($newinline)\n          )\n        };\n      }\n    }\n    const content = $text.nodeValue;\n    $text.nodeValue = content.substring(0, offset) + data2 + content.substring(offset);\n    return {\n      prevent: true,\n      range: createCollapsedRange(\n        createCursorFromTextNode($text, offset + data2.length)\n      )\n    };\n  }\n  return {\n    prevent: true,\n    range: createCollapsedRange(cursor)\n  };\n};\nconst insertFromPaste = (data2, range, visitor) =\u003e {\n  const cursor = removeContentInRange(range);\n  const { $text, $inline, offset, isAfterInline } = cursor;\n  const $mdFragment = parseMarkdown(data2, visitor);\n  if ($mdFragment.childNodes.length === 0) {\n    return {\n      prevent: true,\n      range\n    };\n  }\n  const shouldSpreadNodesIntoBlock = $mdFragment.childNodes.length === 1;\n  if (shouldSpreadNodesIntoBlock) {\n    const $block2 = getParentTextBlock($inline);\n    const $fragment = document.createDocumentFragment();\n    $fragment.append(...Array.from($mdFragment.childNodes[0].childNodes));\n    const $pasteLastChild = $fragment.lastChild;\n    if ($pasteLastChild !== null) {\n      assertTextContent($pasteLastChild);\n    }\n    if (isTextNode($text)) {\n      if (isEmptyText($text.nodeValue)) {\n        $block2.replaceChild($fragment, $inline);\n      } else {\n        const [$before, $after] = splitTextNode($text, offset);\n        if ($before === null) {\n          assertNonNull($after);\n          $after.before($fragment);\n        } else {\n          $before.after($fragment);\n        }\n      }\n    } else if (isAfterInline === true) {\n      $inline.after($fragment);\n    } else {\n      $inline.before($fragment);\n    }\n    return {\n      prevent: true,\n      range: createCollapsedRange(\n        createEndCursorFromTextContent($pasteLastChild ?? getLastTextContent($block2))\n      )\n    };\n  }\n  const $block = getParentTextBlock($inline);\n  let splitIndex = childIndexOf($block, $inline) + (isAfterInline === true ? 1 : 0);\n  if (isTextNode($text)) {\n    if (isEmptyText($text.nodeValue)) {\n      $inline.remove();\n    } else {\n      const [$before] = splitTextNode($text, offset);\n      if ($before !== null) {\n        splitIndex++;\n      }\n    }\n  }\n  const [$aBlock, $bBlock] = splitTextBlock($block, splitIndex);\n  const $root = $aBlock.parentElement;\n  const $lastBlock = $mdFragment.lastChild;\n  assertTextBlock($lastBlock);\n  if (isEmptyTextBlock($aBlock)) {\n    $root.replaceChild($mdFragment, $aBlock);\n    if (isEmptyTextBlock($bBlock)) {\n      $bBlock.remove();\n    }\n  } else if (isEmptyTextBlock($bBlock)) {\n    $root.replaceChild($mdFragment, $bBlock);\n  } else {\n    $aBlock.after($mdFragment);\n  }\n  return {\n    prevent: true,\n    range: createCollapsedRange(\n      createEndCursorFromTextContent(\n        getLastTextContent($lastBlock)\n      )\n    )\n  };\n};\nconst DEFAULT_ACTION_RESULT = {\n  prevent: false\n};\nconst handleEmojiMousedown = ($n) =\u003e {\n  if (isEmoji($n)) {\n    return {\n      prevent: true,\n      range: createCollapsedRange(\n        createEndCursorFromTextContent($n)\n      )\n    };\n  }\n  return DEFAULT_ACTION_RESULT;\n};\nconst getEndRange = ($root) =\u003e {\n  const $block = getLastTextBlock($root);\n  const $inline = getLastTextContent($block);\n  return createCollapsedRange(\n    createEndCursorFromTextContent($inline)\n  );\n};\nconst getSelectionInfo = (range) =\u003e {\n  const aCursor = createIncomingCursorFromNodeWithOffset(range.startContainer, range.startOffset);\n  const bCursor = createIncomingCursorFromNodeWithOffset(range.endContainer, range.endOffset);\n  if (aCursor.$inline === bCursor.$inline) {\n    const { $text, $inline } = aCursor;\n    if ($text !== null || isInline($inline)) {\n      assertInline($inline);\n      return {\n        bold: isFormatBold($inline),\n        italic: isFormatItalic($inline),\n        strikethrough: isFormatStrikethrough($inline),\n        codetag: isFormatCodetag($inline),\n        link: isFormatLink($inline),\n        olist: isInsideList(true, $inline),\n        ulist: isInsideList(false, $inline)\n      };\n    }\n    return {\n      italic: false,\n      bold: false,\n      strikethrough: false,\n      codetag: false,\n      link: false,\n      olist: false,\n      ulist: false\n    };\n  }\n  return {\n    bold: isAllInsideBold(aCursor.$inline, bCursor.$inline),\n    italic: isAllInsideItalic(aCursor.$inline, bCursor.$inline),\n    strikethrough: isAllInsideStrikethrough(aCursor.$inline, bCursor.$inline),\n    codetag: isAllInsideCodetag(aCursor.$inline, bCursor.$inline),\n    link: isAllInsideLink(aCursor.$inline, bCursor.$inline),\n    olist: isAllInsideList(true, aCursor.$inline, bCursor.$inline),\n    ulist: isAllInsideList(false, aCursor.$inline, bCursor.$inline)\n  };\n};\nconst isSelectionEqual = (a, b) =\u003e {\n  return a === b || a !== null \u0026\u0026 b !== null \u0026\u0026 a.bold === b.bold \u0026\u0026 a.codetag === b.codetag \u0026\u0026 a.italic === b.italic \u0026\u0026 a.link === b.link \u0026\u0026 a.strikethrough === b.strikethrough \u0026\u0026 a.olist === b.olist \u0026\u0026 a.ulist === b.ulist;\n};\nconst isEmptyTextBlock = ($block) =\u003e {\n  const blockChildren = $block.childNodes;\n  if (blockChildren.length \u003e 1) {\n    return false;\n  }\n  const $inline = blockChildren[0];\n  const isEmptyText2 = isInline($inline) \u0026\u0026 !isFormatCodetag($inline) \u0026\u0026 isEmptyTextNode(getChildText($inline));\n  return isEmptyText2;\n};\nconst isEditorEmpty = ($root) =\u003e {\n  const rootChildren = $root.childNodes;\n  if (rootChildren.length \u003e 1) {\n    return false;\n  }\n  const $block = rootChildren[0];\n  assertTextBlock($block);\n  return isEmptyTextBlock($block);\n};\nconst serializeDescriptorReducer = (range) =\u003e (state, $n) =\u003e {\n  if (isEmoji($n)) {\n    const text2 = $n.getAttribute(EMOJI_CHAR_ATTR_NAME) ?? \"\";\n    if (text2.length \u003e 0) {\n      state.push({ isEmoji: true, text: text2 });\n    }\n    return state;\n  }\n  let text = getTextValue(getChildText($n));\n  let trailingSpaces = \"\";\n  if (range !== null) {\n    const [aCursor, bCursor] = range;\n    const isACursorPointingHere = aCursor.$inline === $n;\n    const isBCursorPointingHere = bCursor.$inline === $n;\n    if (isACursorPointingHere \u0026\u0026 isBCursorPointingHere) {\n      text = text.substring(aCursor.offset, bCursor.offset);\n    } else if (isACursorPointingHere) {\n      text = text.substring(aCursor.offset);\n    } else if (isBCursorPointingHere) {\n      text = text.substring(0, bCursor.offset);\n    }\n  }\n  if (isEmptyText(text)) {\n    return state;\n  }\n  if (isFormatCodetag($n)) {\n    state.push({ isCodetag: true, text });\n    return state;\n  }\n  if (isFormatLink($n)) {\n    const href = $n.getAttribute(LINK_HREF_ATTR_NAME) ?? \"#\";\n    state.push({ isLink: true, text, href });\n    return state;\n  }\n  const leadingNonSpaceIndex = text.search(/\\S/);\n  if (leadingNonSpaceIndex \u003c 0) {\n    state.push({ isWhitespace: true, text });\n    return state;\n  }\n  if (leadingNonSpaceIndex \u003e 0) {\n    state.push({ isWhitespace: true, text: text.substring(0, leadingNonSpaceIndex) });\n    text = text.substring(leadingNonSpaceIndex);\n  }\n  const trailingSpaceIndex = text.search(/\\s+$/);\n  if (trailingSpaceIndex \u003e= 0) {\n    trailingSpaces = text.substring(trailingSpaceIndex);\n    text = text.substring(0, trailingSpaceIndex);\n  }\n  state.push({\n    isBold: isFormatBold($n),\n    isItalic: isFormatItalic($n),\n    isStrikethrough: isFormatStrikethrough($n),\n    text\n  });\n  if (trailingSpaces.length \u003e 0) {\n    state.push({ isWhitespace: true, text: trailingSpaces });\n  }\n  return state;\n};\nconst MD_STRIKE_TOKEN = \"~~\";\nconst MD_EM3_STAR_TOKEN = \"***\";\nconst MD_EM2_STAR_TOKEN = \"**\";\nconst MD_EM1_STAR_TOKEN = \"*\";\nconst MD_EM3_UNDERSCORE_TOKEN = \"___\";\nconst MD_EM2_UNDERSCORE_TOKEN = \"__\";\nconst MD_EM1_UNDERSCORE_TOKEN = \"_\";\nconst MD_LINEBREAK_TOKEN = \"  \\n\";\nconst MD_CODETAG_TOKEN = \"`\";\nconst MD_ULISTITEM_TOKEN = \"*\";\nconst MD_OLISTITEM_TOKEN = \"1.\";\nconst MD_LISTITEM_JOIN = \"\\n\";\nconst MD_PARAGRAPH_JOIN = \"\\n\\n\";\nconst serializeTextReducer = (state, desc, i, descArray) =\u003e {\n  const { chunks } = state;\n  if (desc.isLink === true) {\n    chunks.push(`[${desc.text}](${desc.href})`);\n    return state;\n  }\n  if (desc.isEmoji === true) {\n    chunks.push(desc.text);\n    return state;\n  }\n  if (desc.isCodetag === true) {\n    chunks.push(`${MD_CODETAG_TOKEN}${desc.text}${MD_CODETAG_TOKEN}`);\n    return state;\n  }\n  if (desc.isWhitespace === true) {\n    chunks.push(desc.text);\n    return state;\n  }\n  const prev = i === 0 ? null : descArray[i - 1];\n  const next = i \u003e= descArray.length - 1 ? null : descArray[i + 1];\n  const shouldUseUnderscores = (i - state.lastUnderscoreIndex) % 2 === 0 \u0026\u0026 (prev === null || prev.isBold === true || prev.isItalic === true || prev.isWhitespace === true || prev.isCodetag === true) \u0026\u0026 (next === null || next.isBold === true || next.isItalic === true || next.isWhitespace === true || next.isCodetag === true);\n  const { isBold, isItalic, isStrikethrough } = desc;\n  if (shouldUseUnderscores) {\n    state.lastUnderscoreIndex = i;\n  }\n  if (isStrikethrough === true \u0026\u0026 (prev === null || prev.isStrikethrough !== true)) {\n    chunks.push(MD_STRIKE_TOKEN);\n  }\n  if (isBold === true \u0026\u0026 isItalic === true) {\n    chunks.push(shouldUseUnderscores ? MD_EM3_UNDERSCORE_TOKEN : MD_EM3_STAR_TOKEN);\n  } else if (isBold === true) {\n    chunks.push(shouldUseUnderscores ? MD_EM2_UNDERSCORE_TOKEN : MD_EM2_STAR_TOKEN);\n  } else if (isItalic === true) {\n    chunks.push(shouldUseUnderscores ? MD_EM1_UNDERSCORE_TOKEN : MD_EM1_STAR_TOKEN);\n  }\n  chunks.push(desc.text);\n  if (isBold === true \u0026\u0026 isItalic === true) {\n    chunks.push(shouldUseUnderscores ? MD_EM3_UNDERSCORE_TOKEN : MD_EM3_STAR_TOKEN);\n  } else if (isBold === true) {\n    chunks.push(shouldUseUnderscores ? MD_EM2_UNDERSCORE_TOKEN : MD_EM2_STAR_TOKEN);\n  } else if (isItalic === true) {\n    chunks.push(shouldUseUnderscores ? MD_EM1_UNDERSCORE_TOKEN : MD_EM1_STAR_TOKEN);\n  }\n  if (isStrikethrough === true \u0026\u0026 (next === null || next.isStrikethrough !== true)) {\n    chunks.push(MD_STRIKE_TOKEN);\n  }\n  return state;\n};\nconst serializeTextBlock = ($n, range) =\u003e {\n  let children;\n  if (range !== null) {\n    const [aCursor, bCursor] = range;\n    const aBlock = getParentTextBlock(aCursor.$inline);\n    const bBlock = getParentTextBlock(bCursor.$inline);\n    const startIndex = aBlock === $n ? childIndexOf($n, aCursor.$inline) : 0;\n    const endIndex = bBlock === $n ? childIndexOf($n, bCursor.$inline) + 1 : $n.childNodes.length;\n    children = Array.prototype.slice.call($n.childNodes, startIndex, endIndex);\n  } else {\n    children = Array.from($n.childNodes);\n  }\n  const result = children.reduce(\n    serializeDescriptorReducer(range),\n    []\n  ).reduce(\n    serializeTextReducer,\n    {\n      lastUnderscoreIndex: 0,\n      chunks: []\n    }\n  );\n  return result.chunks.join(\"\");\n};\nconst serializeListItemIndent = (level, isOrderedStack) =\u003e {\n  let res = \"\";\n  for (let i = 0; i \u003c level; i++) {\n    res = res.concat(\n      isOrderedStack[i] ? \"  \" : \" \",\n      // MD_ULISTITEM_TOKEN.length\n      \" \"\n    );\n  }\n  return res;\n};\nconst serializeListItem = ($li, isOrderedStack, range) =\u003e {\n  const isOrdered = isOrderedListItem($li);\n  const listMdToken = isOrdered ? MD_OLISTITEM_TOKEN : MD_ULISTITEM_TOKEN;\n  const level = getListItemLevel($li);\n  isOrderedStack[level] = isOrdered;\n  return `${serializeListItemIndent(level, isOrderedStack)}${listMdToken} ${serializeTextBlock($li, range)}`;\n};\nconst serializeRoot = ($root, range) =\u003e {\n  let children;\n  if (range !== null) {\n    const [aCursor, bCursor] = range;\n    const aBlock = getParentTextBlock(aCursor.$inline);\n    const bBlock = getParentTextBlock(bCursor.$inline);\n    const startIndex = childIndexOf($root, aBlock);\n    const endIndex = childIndexOf($root, bBlock) + 1;\n    children = Array.prototype.slice.call($root.childNodes, startIndex, endIndex);\n  } else {\n    children = Array.from($root.childNodes);\n  }\n  const chunks = [];\n  const listChunks = [];\n  const listIsOrderedStack = [];\n  const paragraphChunks = [];\n  const flushListChunks = () =\u003e {\n    if (listChunks.length \u003e 0) {\n      chunks.push(\n        listChunks.join(MD_LISTITEM_JOIN)\n      );\n      listChunks.length = 0;\n    }\n  };\n  const flushParagraphChunks = () =\u003e {\n    if (paragraphChunks.length \u003e 0) {\n      chunks.push(\n        paragraphChunks.reduce((a, b) =\u003e {\n          return b.length \u003e 0 ? a.concat(MD_LINEBREAK_TOKEN, b) : a.concat(\"\u003cbr\u003e\");\n        })\n      );\n      paragraphChunks.length = 0;\n    }\n  };\n  for (let i = 0; i \u003c children.length; i++) {\n    const $child = children[i];\n    if (isListItem($child)) {\n      flushParagraphChunks();\n      const isMainList = i === 0 || !isListItem(children[i - 1]) || isListItemMarkedArBlock($child);\n      if (isMainList) {\n        flushListChunks();\n      }\n      listChunks.push(\n        serializeListItem($child, listIsOrderedStack, range)\n      );\n    } else {\n      assertTextBlock($child);\n      flushListChunks();\n      paragraphChunks.push(\n        serializeTextBlock($child, range)\n      );\n    }\n  }\n  flushListChunks();\n  flushParagraphChunks();\n  return chunks.join(MD_PARAGRAPH_JOIN);\n};\nconst serializeMarkdown = ($root, range) =\u003e {\n  if (range !== null) {\n    const aCursor = createIncomingCursorFromNodeWithOffset(range.startContainer, range.startOffset);\n    const bCursor = createIncomingCursorFromNodeWithOffset(range.endContainer, range.endOffset);\n    return serializeRoot($root, [aCursor, bCursor]);\n  }\n  return serializeRoot($root, null);\n};\nconst createParseVisitor = (doc) =\u003e {\n  let emojiBaseUrl = null;\n  return {\n    updateEmojiBaseUrl(url) {\n      emojiBaseUrl = url;\n    },\n    createVisitor() {\n      const $root = doc.createDocumentFragment();\n      let $currentBlock = null;\n      const listsStack = [];\n      let isFirstListItem = false;\n      return {\n        escaped(char) {\n          const $text = doc.createTextNode(char);\n          if ($currentBlock != null) {\n            $currentBlock.appendChild($text);\n          } else {\n            this.paragraph();\n            $currentBlock.appendChild($text);\n          }\n        },\n        emoji(emojiChar) {\n          const $emoji = createEmoji(emojiChar, emojiBaseUrl, doc);\n          $currentBlock.appendChild($emoji);\n        },\n        codetag(text) {\n          const $inline = createInlineWithText(text, doc);\n          setInlineFormat($inline, \"c\", true);\n          $currentBlock.appendChild($inline);\n        },\n        inline(text, { isBold, isItalic, isStrikethrough }) {\n          const $inline = createInlineWithText(text, doc);\n          setInlineFormat($inline, \"b\", isBold === true);\n          setInlineFormat($inline, \"i\", isItalic === true);\n          setInlineFormat($inline, \"s\", isStrikethrough === true);\n          $currentBlock.appendChild($inline);\n        },\n        linebreak() {\n          if (listsStack.length === 0) {\n            $currentBlock = createActuallyEmptyParagraph(doc);\n            $root.appendChild($currentBlock);\n          }\n        },\n        link(text, href) {\n          const $link = createLink(text, href, doc);\n          $currentBlock.appendChild($link);\n        },\n        list(isOrdered) {\n          listsStack.push({\n            isOrdered\n          });\n          isFirstListItem = true;\n          $currentBlock = null;\n        },\n        endList() {\n          listsStack.length = listsStack.length - 1;\n          isFirstListItem = false;\n          $currentBlock = null;\n        },\n        listItem() {\n          const listLevel = listsStack.length - 1;\n          const { isOrdered } = listsStack.at(-1);\n          const $li = createActuallyEmptyListItem(isOrdered, listLevel, doc);\n          if (listsStack.length === 1 \u0026\u0026 isFirstListItem) {\n            markListItemAsBlock($li);\n            isFirstListItem = false;\n          }\n          $root.appendChild($li);\n          $currentBlock = $li;\n        },\n        paragraph() {\n          if (listsStack.length === 0) {\n            $currentBlock = createActuallyEmptyParagraph(doc);\n            $root.appendChild($currentBlock);\n          }\n        },\n        end() {\n          const children = $root.childNodes;\n          for (let i = 0; i \u003c children.length; i++) {\n            const child = children[i];\n            assertTextBlock(child);\n            ensureCorrectTextBlockIfEmpty(child);\n          }\n          return $root;\n        }\n      };\n    }\n  };\n};\nconst setBrowserCaret = ({ startContainer, startOffset, endContainer, endOffset }) =\u003e {\n  const selection = document.getSelection();\n  if (selection === null) {\n    return;\n  }\n  selection.removeAllRanges();\n  const range = document.createRange();\n  range.setStart(startContainer, startOffset);\n  range.setEnd(endContainer, endOffset);\n  selection.addRange(range);\n};\nconst templateHTML$n = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:column;position:relative;width:100%;box-sizing:border-box;background-color:var(--sinch-comp-textarea-color-default-background-initial);border-radius:var(--sinch-local-shape-radius);overflow:hidden;--sinch-local-shape-radius:var(--sinch-comp-textarea-shape-radius)}#input-wrapper{position:relative;padding:8px 10px 8px 12px;box-sizing:border-box}#input{font:var(--sinch-comp-textarea-font-input);color:var(--sinch-comp-textarea-color-default-text-initial);white-space:pre-wrap;overflow-wrap:break-word;border:none;outline:0}#placeholder{display:none;position:absolute;left:0;top:0;font:var(--sinch-comp-textarea-font-input);color:var(--sinch-comp-textarea-color-default-text-placeholder);padding:8px 10px 8px 12px;pointer-events:none;user-select:none}#input.empty+#placeholder{display:block}#border{position:absolute;border:1px solid var(--sinch-comp-textarea-color-default-border-initial);border-radius:var(--sinch-local-shape-radius);inset:0;pointer-events:none}:host([invalid]) #border{border-color:var(--sinch-comp-textarea-color-invalid-border-initial)}:host([disabled]){color:var(--sinch-comp-textarea-color-disabled-text-initial);-webkit-text-fill-color:var(--sinch-comp-textarea-color-disabled-text-initial)}:host([disabled]) #border{border-color:var(--sinch-comp-textarea-color-disabled-border-initial)}:host(:not([disabled])) #input-wrapper:focus-within~#border{border-color:var(--sinch-comp-textarea-color-default-border-focus);border-width:2px}.oli,.p,.uli{margin:0}.oli.l0,.uli.l0{margin-left:6px}.oli.l1,.uli.l1{margin-left:36px}.oli.l2,.uli.l2{margin-left:64px}.oli.l3,.uli.l3{margin-left:92px}.oli.l4,.uli.l4{margin-left:120px}.uli.l0{counter-reset:list-0 list-1 list-2 list-3 list-4}.uli.l1{counter-reset:list-1 list-2 list-3 list-4}.uli.l2{counter-reset:list-2 list-3 list-4}.uli.l3{counter-reset:list-3 list-4}.uli.l4{counter-reset:list-4}.oli.l0{counter-reset:list-1 list-2 list-3 list-4}.oli.l1{counter-reset:list-2 list-3 list-4}.oli.l2{counter-reset:list-3 list-4}.oli.l3{counter-reset:list-4}.oli.l0::before{counter-increment:list-0;content:counter(list-0,decimal) \". \"}.oli.l1::before{counter-increment:list-1;content:counter(list-1,lower-alpha) \". \"}.oli.l2::before{counter-increment:list-2;content:counter(list-2,lower-roman) \". \"}.oli.l3::before{counter-increment:list-3;content:counter(list-3,decimal) \". \"}.oli.l4::before{counter-increment:list-4;content:counter(list-4,lower-alpha) \". \"}.oli.block,.oli:first-of-type,.p+.oli{counter-reset:list-0 list-1 list-2 list-3 list-4}.uli::before{content:\"\\\\25CF\";display:inline-block;width:16px}.oli+.p,.oli.block,.p+.oli,.p+.uli,.uli+.p,.uli.block{margin-top:.5em}.c{font:var(--sinch-comp-code-tag-font-text);font-size:inherit;line-height:inherit;color:var(--sinch-comp-code-tag-color-default-text-initial);border:1px solid var(--sinch-comp-code-tag-color-default-border-initial);background-color:var(--sinch-comp-code-tag-color-default-background-initial);padding:0 .25em;border-radius:var(--sinch-comp-code-tag-shape-radius)}.l{font:var(--sinch-comp-link-default-font-initial);color:var(--sinch-comp-link-color-default-text-initial);text-decoration:underline}.i{font-style:italic}.b{font-weight:700}.s{text-decoration:line-through}.e{background-repeat:no-repeat;background-position:50% 50%;background-size:contain;width:1em;height:1em;vertical-align:-.2em}#top-wrapper{display:flex;flex-direction:row;align-items:center;gap:8px;padding:4px 4px 0}#top-wrapper.empty{display:none}#bottom-wrapper{display:flex;flex-direction:row;align-items:center;gap:8px;padding:0 4px 4px}#bottom-wrapper.empty{display:none}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"top-wrapper\"\u003e\u003cslot id=\"top\" name=\"top\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cdiv id=\"input-wrapper\"\u003e\u003cdiv id=\"input\" contenteditable suppresscontenteditablewarning autocapitalize=\"false\" autocorrect=\"false\" autosave=\"false\" spellcheck=\"false\"\u003e\u003c/div\u003e\u003cdiv id=\"placeholder\"\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv id=\"border\"\u003e\u003c/div\u003e\u003cdiv id=\"bottom-wrapper\"\u003e\u003cslot id=\"bottom\" name=\"bottom\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$n = document.createElement(\"template\");\ntemplate$n.innerHTML = templateHTML$n;\nconst SUPPORTS_SHADOW_SELECTION = typeof window.ShadowRoot.prototype.getSelection === \"function\";\nclass RichTextarea extends NectaryElement {\n  #$input;\n  #$placeholder;\n  #controller = null;\n  #sh;\n  #pendingRangePolyfill = false;\n  #$bottomSlot;\n  #$bottomWrapper;\n  #$topSlot;\n  #$topWrapper;\n  #rangePolyfill = null;\n  #cachedRange = null;\n  #lastSelectionInfo = null;\n  #prevDispatchedValue = null;\n  #parseVisitor;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: true });\n    shadowRoot.appendChild(template$n.content.cloneNode(true));\n    this.#sh = shadowRoot;\n    this.#$input = shadowRoot.querySelector(\"#input\");\n    this.#$placeholder = shadowRoot.querySelector(\"#placeholder\");\n    this.#$topSlot = shadowRoot.querySelector(\"#top\");\n    this.#$topWrapper = shadowRoot.querySelector(\"#top-wrapper\");\n    this.#$bottomSlot = shadowRoot.querySelector(\"#bottom\");\n    this.#$bottomWrapper = shadowRoot.querySelector(\"#bottom-wrapper\");\n    Object.defineProperty(this.#$input, \"ownerDocument\", { value: shadowRoot });\n    if (typeof shadowRoot.createElement !== \"function\") {\n      Object.defineProperty(shadowRoot, \"createElement\", {\n        value: document.createElement.bind(shadowRoot.ownerDocument)\n      });\n    }\n    Object.defineProperty(shadowRoot, \"createTextNode\", {\n      value: document.createTextNode.bind(shadowRoot.ownerDocument)\n    });\n    Object.defineProperty(shadowRoot, \"createElementNS\", {\n      value: document.createElementNS.bind(shadowRoot.ownerDocument)\n    });\n    Object.defineProperty(shadowRoot, \"createDocumentFragment\", {\n      value: document.createDocumentFragment.bind(shadowRoot.ownerDocument)\n    });\n    this.#parseVisitor = createParseVisitor(shadowRoot);\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.setAttribute(\"role\", \"textbox\");\n    this.ariaMultiLine = \"true\";\n    this.#$input.addEventListener(\"beforeinput\", this.#onBeforeInput, options);\n    this.#$input.addEventListener(\"keydown\", this.#onKeydown, options);\n    this.#$input.addEventListener(\"mousedown\", this.#onMouseDown, options);\n    this.#$input.addEventListener(\"focus\", this.#onInputFocus, options);\n    this.#$input.addEventListener(\"blur\", this.#onInputBlur, options);\n    this.#$input.addEventListener(\"dragstart\", this.#onDragStart, options);\n    this.#$input.addEventListener(\"cut\", this.#onCut, options);\n    this.#$input.addEventListener(\"copy\", this.#onCopy, options);\n    this.#$input.addEventListener(\"paste\", this.#onPaste, options);\n    this.#$bottomSlot.addEventListener(\"slotchange\", this.#onBottomSlotChange, options);\n    this.#$topSlot.addEventListener(\"slotchange\", this.#onTopSlotChange, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, options);\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, options);\n    this.addEventListener(\"-selection\", this.#onSelectionReactHandler, options);\n    document.addEventListener(\"selectionchange\", this.#onSelectionChange, options);\n    this.#parseVisitor.updateEmojiBaseUrl(getEmojiBaseUrl(this));\n    this.#onTopSlotChange();\n    this.#onBottomSlotChange();\n    this.#onValueChange(this.value);\n    this.#cachedRange = getEndRange(this.#$input);\n    this.#updateEditorEmptyClass();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\n      \"value\",\n      \"placeholder\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"value\": {\n        if (this.isConnected === true) {\n          this.#onValueChange(newVal);\n        }\n        break;\n      }\n      case \"placeholder\": {\n        this.#$placeholder.textContent = newVal;\n        updateAttribute(this, \"aria-placeholder\", newVal);\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set placeholder(value) {\n    updateAttribute(this, \"placeholder\", value);\n  }\n  get placeholder() {\n    return getAttribute(this, \"placeholder\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set rows(value) {\n    updateAttribute(this, \"rows\", value);\n  }\n  get rows() {\n    return getIntegerAttribute(this, \"rows\", 0);\n  }\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$input.focus();\n  }\n  blur() {\n    this.#$input.blur();\n  }\n  insertText(value) {\n    const res = this.#handleInput(\"insertText\", this.#getCurrentRange(), value);\n    this.#handleActionResult(res);\n  }\n  insertLink(text, href) {\n    const res = this.#handleInput(\"insertLink\", this.#getCurrentRange(), text, href);\n    this.#handleActionResult(res);\n  }\n  formatItalic() {\n    const res = this.#handleInput(\"formatItalic\", this.#getCurrentRange());\n    this.#handleActionResult(res);\n  }\n  formatBold() {\n    const res = this.#handleInput(\"formatBold\", this.#getCurrentRange());\n    this.#handleActionResult(res);\n  }\n  formatStrikethrough() {\n    const res = this.#handleInput(\"formatStrikeThrough\", this.#getCurrentRange());\n    this.#handleActionResult(res);\n  }\n  formatCodeTag() {\n    const res = this.#handleInput(\"formatCodeTag\", this.#getCurrentRange());\n    this.#handleActionResult(res);\n  }\n  formatOrderedList() {\n    const res = formatList(true, this.#getCurrentRange());\n    this.#handleActionResult(res);\n  }\n  formatUnorderedList() {\n    const res = formatList(false, this.#getCurrentRange());\n    this.#handleActionResult(res);\n  }\n  /**\n   * Input must be in focus\n   */\n  #getSelectionRange() {\n    if (SUPPORTS_SHADOW_SELECTION) {\n      const selection = this.#sh.getSelection();\n      if (selection === null || selection.rangeCount === 0) {\n        return null;\n      }\n      return selection.getRangeAt(0);\n    }\n    {\n      const selection = document.getSelection();\n      if (selection === null || selection.rangeCount === 0) {\n        return null;\n      }\n      const range = selection.getRangeAt(0);\n      if (this.#$input.contains(range.startContainer)) {\n        return range;\n      }\n    }\n    this.#pendingRangePolyfill = true;\n    this.#rangePolyfill = null;\n    document.execCommand(\"indent\");\n    this.#pendingRangePolyfill = false;\n    return this.#rangePolyfill;\n  }\n  #onMouseDown = (e) =\u003e {\n    this.#handleActionResult(\n      handleEmojiMousedown(e.target)\n    );\n  };\n  #onKeydown = (e) =\u003e {\n    if (e.shiftKey) {\n      switch (e.key) {\n        case \"Tab\": {\n          const res = this.#handleInput(\"formatOutdent\", this.#getSelectionRange());\n          if (res.prevent) {\n            e.preventDefault();\n          }\n          this.#handleActionResult(res);\n          break;\n        }\n      }\n    } else {\n      switch (e.key) {\n        case \"Tab\": {\n          const res = this.#handleInput(\"formatIndent\", this.#getSelectionRange());\n          if (res.prevent) {\n            e.preventDefault();\n          }\n          this.#handleActionResult(res);\n          break;\n        }\n      }\n    }\n    if (e.metaKey || e.ctrlKey) {\n      switch (e.key) {\n        case \"b\": {\n          const res = this.#handleInput(\"formatBold\", this.#getSelectionRange());\n          if (res.prevent) {\n            e.preventDefault();\n          }\n          this.#handleActionResult(res);\n          break;\n        }\n        case \"i\": {\n          const res = this.#handleInput(\"formatItalic\", this.#getSelectionRange());\n          if (res.prevent) {\n            e.preventDefault();\n          }\n          this.#handleActionResult(res);\n          break;\n        }\n      }\n      if (e.shiftKey) {\n        switch (e.key) {\n          case \"x\": {\n            const res = this.#handleInput(\"formatStrikeThrough\", this.#getSelectionRange());\n            if (res.prevent) {\n              e.preventDefault();\n            }\n            this.#handleActionResult(res);\n            break;\n          }\n          case \"c\": {\n            const res = this.#handleInput(\"formatCodeTag\", this.#getSelectionRange());\n            if (res.prevent) {\n              e.preventDefault();\n            }\n            this.#handleActionResult(res);\n            break;\n          }\n        }\n      }\n    }\n  };\n  #onBeforeInput = (e) =\u003e {\n    const [range] = e.getTargetRanges();\n    if (this.#pendingRangePolyfill) {\n      this.#pendingRangePolyfill = false;\n      this.#rangePolyfill = range;\n      e.preventDefault();\n      e.stopImmediatePropagation();\n      return;\n    }\n    const handleResult = this.#handleInput(e.inputType, range, e.data);\n    if (handleResult.prevent) {\n      e.preventDefault();\n    }\n    this.#handleActionResult(handleResult);\n  };\n  #handleInput(inputType, range, text, href) {\n    if (range === null) {\n      return { prevent: true, range: null };\n    }\n    switch (inputType) {\n      // case 'deleteByDrag':\n      // case 'deleteByCut':\n      //   break\n      // }\n      // case 'insertLink': {\n      //   break\n      // }\n      case \"deleteContent\":\n      case \"deleteContentForward\":\n      case \"deleteWordForward\":\n      case \"deleteContentBackward\":\n      case \"deleteWordBackward\": {\n        return deleteContentBackward(this.#$input, range);\n      }\n      case \"insertLineBreak\":\n      case \"insertParagraph\": {\n        return insertLineBreak(range);\n      }\n      case \"insertReplacementText\":\n      case \"insertText\": {\n        return insertText(this.#$input, text, range);\n      }\n      case \"insertLink\": {\n        return insertLink(this.#$input, text, href, range);\n      }\n      // case 'formatUnderline':\n      case \"formatItalic\":\n      case \"formatBold\":\n      case \"formatStrikeThrough\":\n      case \"formatCodeTag\": {\n        return formatInline(inputType, range);\n      }\n      case \"formatIndent\": {\n        return formatIndent(range);\n      }\n      case \"formatOutdent\": {\n        return formatOutdent(range);\n      }\n      // case 'formatSuperscript':\n      // case 'formatSubscript':\n      // case 'historyUndo':\n      // case 'historyRedo':\n      default: {\n        return { prevent: true, range: null };\n      }\n    }\n  }\n  #handleActionResult(result) {\n    if (result.prevent) {\n      this.#cachedRange = result.range;\n      if (result.range !== null) {\n        setBrowserCaret(result.range);\n      }\n    }\n    this.#updateEditorEmptyClass();\n  }\n  #onInputFocus = () =\u003e {\n    if (this.#cachedRange !== null) {\n      setBrowserCaret(this.#cachedRange);\n    }\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onInputBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n    this.#dispatchChangeEvent();\n  };\n  #dispatchChangeEvent() {\n    const value = serializeMarkdown(this.#$input, null);\n    this.#prevDispatchedValue = value;\n    if (value !== this.value) {\n      this.dispatchEvent(new CustomEvent(\"-change\", { detail: value }));\n    }\n  }\n  #getCurrentRange = () =\u003e {\n    if (isElementFocused(this.#$input)) {\n      this.#cachedRange = this.#getSelectionRange();\n    }\n    if (this.#cachedRange === null) {\n      this.#cachedRange = getEndRange(this.#$input);\n    }\n    return this.#cachedRange;\n  };\n  #onSelectionChange = () =\u003e {\n    if (isElementFocused(this.#$input)) {\n      this.#cachedRange = this.#getSelectionRange();\n    }\n    if (this.#cachedRange === null) {\n      return;\n    }\n    const selectionInfo = getSelectionInfo(this.#cachedRange);\n    if (!isSelectionEqual(this.#lastSelectionInfo, selectionInfo)) {\n      this.#lastSelectionInfo = selectionInfo;\n      this.dispatchEvent(new CustomEvent(\"-selection\", { detail: selectionInfo }));\n    }\n  };\n  #onValueChange(value) {\n    if (value === this.#prevDispatchedValue) {\n      return;\n    }\n    if (value === null || value.length === 0) {\n      this.#$input.innerHTML = \"\";\n      this.#cachedRange = getEndRange(this.#$input);\n      this.#prevDispatchedValue = value;\n      this.#updateEditorEmptyClass();\n      return;\n    }\n    this.#cachedRange = null;\n    this.#prevDispatchedValue = value;\n    this.#$input.replaceChildren(\n      parseMarkdown(value, this.#parseVisitor.createVisitor())\n    );\n    this.#updateEditorEmptyClass();\n  }\n  #onCopy = (e) =\u003e {\n    e.preventDefault();\n    if (this.#cachedRange === null) {\n      return;\n    }\n    if (e.clipboardData != null) {\n      e.clipboardData.setData(\"text/plain\", serializeMarkdown(this.#$input, this.#cachedRange));\n    }\n  };\n  #onCut = (e) =\u003e {\n    e.preventDefault();\n    if (this.#cachedRange === null) {\n      return;\n    }\n    if (e.clipboardData != null) {\n      e.clipboardData.setData(\"text/plain\", serializeMarkdown(this.#$input, this.#cachedRange));\n    }\n    this.#handleActionResult(\n      deleteContentBackward(this.#$input, this.#cachedRange)\n    );\n  };\n  #onPaste = (e) =\u003e {\n    e.preventDefault();\n    const pasteValue = e.clipboardData?.getData(\"text/plain\") ?? \"\";\n    if (pasteValue.length === 0 || this.#cachedRange === null) {\n      return;\n    }\n    this.#handleActionResult(\n      insertFromPaste(\n        pasteValue,\n        this.#cachedRange,\n        this.#parseVisitor.createVisitor()\n      )\n    );\n  };\n  #updateEditorEmptyClass() {\n    setClass(this.#$input, \"empty\", isEditorEmpty(this.#$input));\n  }\n  #onBottomSlotChange = () =\u003e {\n    const isEmpty = this.#$bottomSlot.assignedElements().length === 0;\n    setClass(this.#$bottomWrapper, \"empty\", isEmpty);\n  };\n  #onTopSlotChange = () =\u003e {\n    const isEmpty = this.#$topSlot.assignedElements().length === 0;\n    setClass(this.#$topWrapper, \"empty\", isEmpty);\n  };\n  #onDragStart = (e) =\u003e {\n    e.preventDefault();\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n  #onSelectionReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-selection\")?.(e);\n    getReactEventHandler(this, \"onSelection\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-rich-textarea\", RichTextarea);\nconst templateHTML$m = '\u003cstyle\u003e:host{display:block;--sinch-global-size-icon:32px}#icon-dropdown{display:block;will-change:transform;transform:rotate(180deg)}:host([value]:not([value=false])) #icon-dropdown{transform:rotate(0)}\u003c/style\u003e\u003csinch-button id=\"button\" size=\"s\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-chevron-down\" id=\"icon-dropdown\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e';\nconst template$m = document.createElement(\"template\");\ntemplate$m.innerHTML = templateHTML$m;\nclass SegmentCollapse extends NectaryElement {\n  #$button;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$m.content.cloneNode(true));\n    this.#$button = shadowRoot.querySelector(\"#button\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"checkbox\");\n    this.#$button.addEventListener(\"click\", this.#onClick);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler);\n  }\n  disconnectedCallback() {\n    this.#$button.removeEventListener(\"click\", this.#onClick);\n    this.removeEventListener(\"-change\", this.#onChangeReactHandler);\n  }\n  static get observedAttributes() {\n    return [\"value\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"value\": {\n        updateExplicitBooleanAttribute(\n          this,\n          \"aria-checked\",\n          isAttrTrue(newVal)\n        );\n        break;\n      }\n    }\n  }\n  set value(isChecked) {\n    updateBooleanAttribute(this, \"value\", isChecked);\n  }\n  get value() {\n    return getBooleanAttribute(this, \"value\");\n  }\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$button.focus();\n  }\n  blur() {\n    this.#$button.blur();\n  }\n  #onClick = () =\u003e {\n    const detail = !this.value;\n    this.dispatchEvent(new CustomEvent(\"-change\", { detail }));\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-segment-collapse\", SegmentCollapse);\nconst templateHTML$l = '\u003cstyle\u003e:host{display:block;outline:0}#wrapper{position:relative;display:flex;flex-direction:row;align-items:center;gap:12px;width:100%;height:32px;padding:0 16px;box-sizing:border-box;color:var(--sinch-local-color-text);background-color:var(--sinch-local-color-background);cursor:pointer;--sinch-local-color-text:var(--sinch-comp-segmented-control-color-default-text-initial);--sinch-local-shape-radius:var(--sinch-comp-segmented-control-shape-radius);--sinch-local-color-border:var(--sinch-comp-segmented-control-color-default-border-initial);--sinch-local-color-background:var(--sinch-comp-segmented-control-color-default-background-initial);--sinch-global-color-icon:var(--sinch-comp-segmented-control-color-default-icon-initial);--sinch-global-size-icon:var(--sinch-comp-segmented-control-size-icon)}:host(:hover){--sinch-local-color-background:var(--sinch-comp-segmented-control-color-default-background-hover)}:host(:first-child) #wrapper{border-top-left-radius:var(--sinch-local-shape-radius);border-bottom-left-radius:var(--sinch-local-shape-radius)}:host(:last-child) #wrapper{border-top-right-radius:var(--sinch-local-shape-radius);border-bottom-right-radius:var(--sinch-local-shape-radius)}:host([data-checked]) #wrapper{--sinch-local-color-text:var(--sinch-comp-segmented-control-color-checked-text-initial);--sinch-global-color-icon:var(--sinch-comp-segmented-control-color-checked-icon-initial);--sinch-local-color-border:var(--sinch-comp-segmented-control-color-checked-border-initial);--sinch-local-color-background:var(--sinch-comp-segmented-control-color-checked-background-initial)}:host([disabled]) #wrapper{--sinch-local-color-text:var(--sinch-comp-segmented-control-color-disabled-text-initial);--sinch-global-color-icon:var(--sinch-comp-segmented-control-color-disabled-icon-initial);--sinch-local-color-border:var(--sinch-comp-segmented-control-color-disabled-border-initial);--sinch-local-color-background:var(--sinch-comp-segmented-control-color-disabled-background-initial)}#border{position:absolute;inset:0;border:1px solid var(--sinch-local-color-border);pointer-events:none;box-sizing:border-box}:host(:first-child) #border{border-top-left-radius:var(--sinch-local-shape-radius);border-bottom-left-radius:var(--sinch-local-shape-radius)}:host(:last-child) #border{border-top-right-radius:var(--sinch-local-shape-radius);border-bottom-right-radius:var(--sinch-local-shape-radius)}:host(:not(:first-child)) #border{border-left-width:0}:host([data-checked]) #border{border-width:2px}:host([data-checked]:not(:first-child)) #border{left:-1px}#outline{display:none;position:absolute;inset:-3px;border:2px solid var(--sinch-comp-segmented-control-color-default-outline-focus);pointer-events:none;box-sizing:border-box;z-index:1}:host(:focus-visible) #outline{display:block}:host(:first-child) #outline{border-top-left-radius:calc(var(--sinch-local-shape-radius) + 3px);border-bottom-left-radius:calc(var(--sinch-local-shape-radius) + 3px)}:host(:last-child) #outline{border-top-right-radius:calc(var(--sinch-local-shape-radius) + 3px);border-bottom-right-radius:calc(var(--sinch-local-shape-radius) + 3px)}:host(:not(:first-child)) #outline{left:-4px}#content{font:var(--sinch-comp-segmented-control-font-label);flex-shrink:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}::slotted(*){display:block;pointer-events:none}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003cspan id=\"content\"\u003e\u003c/span\u003e\u003cdiv id=\"border\"\u003e\u003c/div\u003e\u003cdiv id=\"outline\"\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$l = document.createElement(\"template\");\ntemplate$l.innerHTML = templateHTML$l;\nclass SegmentedControlOption extends NectaryElement {\n  #$label;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$l.content.cloneNode(true));\n    this.#$label = shadowRoot.querySelector(\"#content\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"tab\");\n    this.addEventListener(\"focus\", this.#onButtonFocus, options);\n    this.addEventListener(\"blur\", this.#onButtonBlur, options);\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler);\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler);\n    this.#updateTabIndex();\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"data-checked\", \"disabled\", \"text\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"text\": {\n        this.#$label.textContent = newVal;\n        break;\n      }\n      case \"data-checked\": {\n        updateExplicitBooleanAttribute(this, \"aria-selected\", isAttrTrue(newVal));\n        break;\n      }\n      case \"disabled\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          return;\n        }\n        this.#updateTabIndex();\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  get focusable() {\n    return true;\n  }\n  #updateTabIndex() {\n    this.tabIndex = this.disabled ? -1 : 0;\n  }\n  #onButtonFocus = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onButtonBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n}\ndefineCustomElement(\"sinch-segmented-control-option\", SegmentedControlOption);\nfunction getActualActiveElement() {\n  let activeElement = document.activeElement;\n  while (activeElement?.shadowRoot?.activeElement != null) {\n    activeElement = activeElement.shadowRoot.activeElement;\n  }\n  return activeElement;\n}\nfunction createKeyboardNavigation() {\n  return {\n    navigateToNextOption(enabledOptions, forward) {\n      const optionsLength = enabledOptions.length;\n      if (optionsLength === 0) {\n        return;\n      }\n      const currentIndex = enabledOptions.findIndex((option) =\u003e option === getActualActiveElement());\n      let nextIndex;\n      if (currentIndex !== -1) {\n        if (forward) {\n          nextIndex = (currentIndex + 1) % optionsLength;\n        } else {\n          nextIndex = currentIndex === 0 ? optionsLength - 1 : currentIndex - 1;\n        }\n      } else {\n        nextIndex = forward ? 0 : optionsLength - 1;\n      }\n      this.navigateToOption(enabledOptions, nextIndex);\n    },\n    navigateToOption(enabledOptions, index) {\n      const optionsLength = enabledOptions.length;\n      if (enabledOptions.length === 0 || index \u003c 0 || index \u003e= optionsLength) {\n        return;\n      }\n      const option = enabledOptions[index];\n      option.focus();\n    },\n    handleKeyboardNavigation(e, enabledOptions) {\n      switch (e.code) {\n        case \"Space\":\n        case \"Enter\": {\n          e.preventDefault();\n          const target = getTargetByAttribute(e, \"value\");\n          if (target !== null) {\n            target.click();\n          }\n          break;\n        }\n        case \"ArrowLeft\":\n        case \"ArrowRight\": {\n          e.preventDefault();\n          this.navigateToNextOption(enabledOptions, e.code === \"ArrowRight\");\n          break;\n        }\n        case \"Home\": {\n          e.preventDefault();\n          this.navigateToOption(enabledOptions, 0);\n          break;\n        }\n        case \"End\": {\n          e.preventDefault();\n          this.navigateToOption(enabledOptions, enabledOptions.length - 1);\n          break;\n        }\n      }\n    }\n  };\n}\nconst templateHTML$k = '\u003cstyle\u003e:host{display:block;outline:0}#wrapper{display:flex;flex-direction:row;width:100%;box-sizing:border-box;position:relative;z-index:0}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$k = document.createElement(\"template\");\ntemplate$k.innerHTML = templateHTML$k;\nclass SegmentedControl extends NectaryElement {\n  #$slot;\n  #controller = null;\n  #enabledOptions = [];\n  #keyboardNav = createKeyboardNavigation();\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$k.content.cloneNode(true));\n    this.#$slot = shadowRoot.querySelector(\"slot\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"tablist\");\n    this.setAttribute(\"aria-orientation\", \"horizontal\");\n    this.#$slot.addEventListener(\"slotchange\", this.#onSlotChange, options);\n    this.#$slot.addEventListener(\"click\", this.#onOptionClick, options);\n    this.#$slot.addEventListener(\"keydown\", this.#onOptionKeydown, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler);\n    this.#updateEnabledOptions();\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"value\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"value\": {\n        this.#onValueChange(newVal);\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  #updateEnabledOptions = () =\u003e {\n    this.#enabledOptions = Array.from(this.#$slot.assignedElements()).filter(\n      (option) =\u003e !getBooleanAttribute(option, \"disabled\")\n    );\n  };\n  #onSlotChange = () =\u003e {\n    this.#onValueChange(this.value);\n    this.#updateEnabledOptions();\n  };\n  #onOptionClick = (e) =\u003e {\n    const target = getTargetByAttribute(e, \"value\");\n    if (target === null || getBooleanAttribute(target, \"disabled\")) {\n      return;\n    }\n    const value = getAttribute(target, \"value\", \"\");\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail: value })\n    );\n  };\n  #onOptionKeydown = (e) =\u003e {\n    this.#keyboardNav.handleKeyboardNavigation(e, this.#enabledOptions);\n  };\n  #onValueChange(value) {\n    for (const $option of this.#$slot.assignedElements()) {\n      const isChecked = !getBooleanAttribute($option, \"disabled\") \u0026\u0026 value === getAttribute($option, \"value\", \"\");\n      updateBooleanAttribute($option, \"data-checked\", isChecked);\n    }\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-segmented-control\", SegmentedControl);\nconst templateHTML$j = '\u003cstyle\u003e:host{display:block;outline:0}#wrapper{position:relative;width:56px;height:32px;padding:3px 16px;box-sizing:border-box;background-color:var(--sinch-local-color-background);cursor:pointer;--sinch-global-color-icon:var(--sinch-comp-segmented-control-color-default-icon-initial);--sinch-global-size-icon:var(--sinch-comp-segmented-control-size-icon);--sinch-local-shape-radius:var(--sinch-comp-segmented-control-shape-radius);--sinch-local-color-border:var(--sinch-comp-segmented-control-color-default-border-initial);--sinch-local-color-background:var(--sinch-comp-segmented-control-color-default-background-initial)}:host(:hover){--sinch-local-color-background:var(--sinch-comp-segmented-control-color-default-background-hover)}:host(:first-child) #wrapper{border-top-left-radius:var(--sinch-local-shape-radius);border-bottom-left-radius:var(--sinch-local-shape-radius)}:host(:last-child) #wrapper{border-top-right-radius:var(--sinch-local-shape-radius);border-bottom-right-radius:var(--sinch-local-shape-radius)}:host([data-checked]) #wrapper{--sinch-global-color-icon:var(--sinch-comp-segmented-control-color-checked-icon-initial);--sinch-local-color-border:var(--sinch-comp-segmented-control-color-checked-border-initial);--sinch-local-color-background:var(--sinch-comp-segmented-control-color-checked-background-initial)}:host([disabled]) #wrapper{--sinch-global-color-icon:var(--sinch-comp-segmented-control-color-disabled-icon-initial);--sinch-local-color-border:var(--sinch-comp-segmented-control-color-disabled-border-initial);--sinch-local-color-background:var(--sinch-comp-segmented-control-color-disabled-background-initial);cursor:initial}#border{position:absolute;inset:0;border:1px solid var(--sinch-local-color-border);pointer-events:none;box-sizing:border-box}:host(:first-child) #border{border-top-left-radius:var(--sinch-local-shape-radius);border-bottom-left-radius:var(--sinch-local-shape-radius)}:host(:last-child) #border{border-top-right-radius:var(--sinch-local-shape-radius);border-bottom-right-radius:var(--sinch-local-shape-radius)}:host(:not(:first-child)) #border{border-left-width:0}:host([data-checked]) #border{border-width:2px}:host([data-checked]:not(:first-child)) #border{left:-1px}#outline{display:none;position:absolute;inset:-3px;border:2px solid var(--sinch-comp-segmented-control-color-default-outline-focus);pointer-events:none;box-sizing:border-box;z-index:1}:host(:focus-visible) #outline{display:block}:host(:first-child) #outline{border-top-left-radius:calc(var(--sinch-local-shape-radius) + 3px);border-bottom-left-radius:calc(var(--sinch-local-shape-radius) + 3px)}:host(:last-child) #outline{border-top-right-radius:calc(var(--sinch-local-shape-radius) + 3px);border-bottom-right-radius:calc(var(--sinch-local-shape-radius) + 3px)}:host(:not(:first-child)) #outline{left:-4px}::slotted(*){display:block;pointer-events:none}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003cdiv id=\"border\"\u003e\u003c/div\u003e\u003cdiv id=\"outline\"\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$j = document.createElement(\"template\");\ntemplate$j.innerHTML = templateHTML$j;\nclass SegmentedIconControlOption extends NectaryElement {\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$j.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"tab\");\n    this.addEventListener(\"focus\", this.#onButtonFocus, options);\n    this.addEventListener(\"blur\", this.#onButtonBlur, options);\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, options);\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, options);\n    this.#updateTabIndex();\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"data-checked\", \"disabled\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"data-checked\": {\n        updateExplicitBooleanAttribute(this, \"aria-selected\", isAttrTrue(newVal));\n        break;\n      }\n      case \"disabled\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          break;\n        }\n        this.#updateTabIndex();\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  get focusable() {\n    return true;\n  }\n  #updateTabIndex() {\n    this.tabIndex = this.disabled ? -1 : 0;\n  }\n  #onButtonFocus = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onButtonBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n}\ndefineCustomElement(\"sinch-segmented-icon-control-option\", SegmentedIconControlOption);\nconst templateHTML$i = '\u003cstyle\u003e:host{display:block;outline:0}#wrapper{display:flex;flex-direction:row;width:100%;box-sizing:border-box;position:relative;z-index:0}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$i = document.createElement(\"template\");\ntemplate$i.innerHTML = templateHTML$i;\nclass SegmentedIconControl extends NectaryElement {\n  #$slot;\n  #controller = null;\n  #keyboardNav = createKeyboardNavigation();\n  #enabledOptions = [];\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$i.content.cloneNode(true));\n    this.#$slot = shadowRoot.querySelector(\"slot\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"tablist\");\n    this.setAttribute(\"aria-orientation\", \"horizontal\");\n    this.#$slot.addEventListener(\"slotchange\", this.#onSlotChange, options);\n    this.#$slot.addEventListener(\"click\", this.#onOptionClick, options);\n    this.#$slot.addEventListener(\"keydown\", this.#onOptionKeydown, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    this.#updateEnabledOptions();\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"value\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"value\": {\n        this.#onValueChange(newVal ?? \"\");\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set multiple(isMultiple) {\n    updateBooleanAttribute(this, \"multiple\", isMultiple);\n  }\n  get multiple() {\n    return getBooleanAttribute(this, \"multiple\");\n  }\n  #updateEnabledOptions = () =\u003e {\n    this.#enabledOptions = Array.from(this.#$slot.assignedElements()).filter(\n      (option) =\u003e !getBooleanAttribute(option, \"disabled\")\n    );\n  };\n  #onSlotChange = () =\u003e {\n    this.#onValueChange(this.value);\n    this.#updateEnabledOptions();\n  };\n  #onOptionClick = (e) =\u003e {\n    const target = getTargetByAttribute(e, \"value\");\n    if (target === null || getBooleanAttribute(target, \"disabled\")) {\n      return;\n    }\n    const value = getAttribute(target, \"value\", \"\");\n    const detail = this.multiple ? updateCsv(this.value, value, !getBooleanAttribute(target, \"data-checked\")) : value;\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail })\n    );\n  };\n  #onOptionKeydown = (e) =\u003e {\n    this.#keyboardNav.handleKeyboardNavigation(e, this.#enabledOptions);\n  };\n  #onValueChange(csv) {\n    if (this.multiple) {\n      const values = unpackCsv(csv);\n      for (const $option of this.#$slot.assignedElements()) {\n        const isChecked = !getBooleanAttribute($option, \"disabled\") \u0026\u0026 values.includes(getAttribute($option, \"value\", \"\"));\n        updateBooleanAttribute($option, \"data-checked\", isChecked);\n      }\n    } else {\n      const value = getFirstCsvValue(csv);\n      for (const $option of this.#$slot.assignedElements()) {\n        const isChecked = !getBooleanAttribute($option, \"disabled\") \u0026\u0026 value === getAttribute($option, \"value\", \"\");\n        updateBooleanAttribute($option, \"data-checked\", isChecked);\n      }\n    }\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-segmented-icon-control\", SegmentedIconControl);\nconst templateHTML$h = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle;outline:0;cursor:pointer}:host([disabled]){cursor:initial}#wrapper{position:relative;display:flex;flex-direction:row;align-items:center;gap:8px;box-sizing:border-box;width:100%;height:var(--sinch-local-size);padding:0 8px 0 12px;background-color:var(--sinch-comp-select-button-color-default-background-initial);border-radius:var(--sinch-local-shape-radius);--sinch-local-size:var(--sinch-comp-select-button-size-container-m);--sinch-global-size-icon:var(--sinch-comp-select-button-size-icon-m);--sinch-local-shape-radius:var(--sinch-comp-select-button-shape-radius-size-m);--sinch-global-color-icon:var(--sinch-comp-select-button-color-default-icon-initial)}:host([data-size=\"l\"])\u003e#wrapper{--sinch-local-size:var(--sinch-comp-select-button-size-container-l);--sinch-global-size-icon:var(--sinch-comp-select-button-size-icon-l);--sinch-local-shape-radius:var(--sinch-comp-select-button-shape-radius-size-l)}:host([data-size=\"m\"])\u003e#wrapper{--sinch-local-size:var(--sinch-comp-select-button-size-container-m);--sinch-global-size-icon:var(--sinch-comp-select-button-size-icon-m);--sinch-local-shape-radius:var(--sinch-comp-select-button-shape-radius-size-m)}:host([data-size=\"s\"])\u003e#wrapper{--sinch-local-size:var(--sinch-comp-select-button-size-container-s);--sinch-global-size-icon:var(--sinch-comp-select-button-size-icon-s);--sinch-local-shape-radius:var(--sinch-comp-select-button-shape-radius-size-s)}:host([data-size=\"l\"]) #wrapper{padding:0 12px}:host([data-size=\"m\"]) #wrapper{padding:0 8px 0 12px}:host([data-size=\"s\"]) #wrapper{padding:0 4px 0 12px}:host([disabled]) #wrapper{--sinch-global-color-icon:var(--sinch-comp-select-button-color-disabled-icon-initial)}#text{flex:1;min-width:0;--sinch-comp-text-font:var(--sinch-comp-select-button-font-input);--sinch-global-color-text:var(--sinch-comp-select-button-color-default-text-initial)}#text:empty{display:none}#placeholder{display:none;flex:1;min-width:0;--sinch-comp-text-font:var(--sinch-comp-select-button-font-placeholder);--sinch-global-color-text:var(--sinch-comp-select-button-color-default-placeholder-initial)}#text:empty+#placeholder{display:block}#border{position:absolute;border:1px solid var(--sinch-comp-select-button-color-default-border-initial);border-radius:var(--sinch-local-shape-radius);inset:0;pointer-events:none}:host(:focus-visible) #border{border-color:var(--sinch-comp-select-button-color-default-border-focus);border-width:2px}:host([invalid]) #border{border-color:var(--sinch-comp-select-button-color-invalid-border-initial)}:host([disabled]) #border{border-color:var(--sinch-comp-select-button-color-disabled-border-initial)}:host([disabled]) #text{--sinch-global-color-text:var(--sinch-comp-select-button-color-disabled-text-initial)}:host([disabled]) #placeholder{--sinch-global-color-text:var(--sinch-comp-select-button-color-disabled-placeholder-initial)}#left{display:flex;flex-direction:row;align-self:stretch;align-items:center;gap:4px;margin-left:-4px}#left.empty{display:none}#dropdown-icon{margin-left:-4px}\u003c/style\u003e\u003cdiv id=\"wrapper\" inert\u003e\u003cdiv id=\"border\"\u003e\u003c/div\u003e\u003cdiv id=\"left\"\u003e\u003cslot name=\"left\"\u003e\u003c/slot\u003e\u003c/div\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003csinch-text id=\"text\" type=\"m\" ellipsis\u003e\u003c/sinch-text\u003e\u003csinch-text id=\"placeholder\" type=\"m\" ellipsis\u003e\u003c/sinch-text\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-chevron-down\" id=\"dropdown-icon\"\u003e\u003c/sinch-icon\u003e\u003c/div\u003e';\nconst template$h = document.createElement(\"template\");\ntemplate$h.innerHTML = templateHTML$h;\nclass SelectButton extends NectaryElement {\n  #$text;\n  #$placeholder;\n  #$leftSlot;\n  #$leftWrapper;\n  #$wrapper;\n  #controller = null;\n  #sizeContext;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$h.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#text\");\n    this.#$placeholder = shadowRoot.querySelector(\"#placeholder\");\n    this.#$leftSlot = shadowRoot.querySelector('slot[name=\"left\"]');\n    this.#$leftWrapper = shadowRoot.querySelector(\"#left\");\n    this.#$wrapper = shadowRoot.querySelector(\"#wrapper\");\n    this.#sizeContext = new Context(this.#$wrapper, \"size\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.setAttribute(\"role\", \"button\");\n    this.tabIndex = 0;\n    this.addEventListener(\"click\", this.#onButtonClick, { signal });\n    this.addEventListener(\"focus\", this.#onButtonFocus, { signal });\n    this.addEventListener(\"blur\", this.#onButtonBlur, { signal });\n    this.addEventListener(\"keydown\", this.#onButtonKeydown, { signal });\n    this.addEventListener(\"-click\", this.#onClickReactHandler, { signal });\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, { signal });\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, { signal });\n    this.#$leftSlot.addEventListener(\"slotchange\", this.#onLeftSlotChange, {\n      signal\n    });\n    this.#sizeContext.listen(this.#controller.signal);\n    subscribeContext(this, \"size\", this.#onContextSize, signal);\n    this.#onLeftSlotChange();\n    this.#onSizeUpdate();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\n      \"text\",\n      \"placeholder\",\n      \"invalid\",\n      \"disabled\",\n      \"size\",\n      \"data-size\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n      case \"placeholder\": {\n        this.#$placeholder.textContent = newVal;\n        break;\n      }\n      case \"invalid\": {\n        const isInvalid = isAttrTrue(newVal);\n        this.ariaInvalid = isInvalid.toString();\n        updateBooleanAttribute(this, \"invalid\", isInvalid);\n        break;\n      }\n      case \"disabled\": {\n        const isDisabled = isAttrTrue(newVal);\n        this.ariaDisabled = isDisabled.toString();\n        updateBooleanAttribute(this, \"disabled\", isDisabled);\n        break;\n      }\n      case \"size\": {\n        updateAttribute(this, \"data-size\", newVal);\n        break;\n      }\n      case \"data-size\": {\n        this.#onSizeUpdate();\n        break;\n      }\n    }\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set placeholder(value) {\n    updateAttribute(this, \"placeholder\", value);\n  }\n  get placeholder() {\n    return getAttribute(this, \"placeholder\");\n  }\n  set invalid(isInvalid) {\n    updateBooleanAttribute(this, \"invalid\", isInvalid);\n  }\n  get invalid() {\n    return getBooleanAttribute(this, \"invalid\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set size(size) {\n    updateLiteralAttribute(this, sizeValues, \"size\", size);\n  }\n  get size() {\n    return getLiteralAttribute(this, sizeValues, \"size\", DEFAULT_SIZE);\n  }\n  get focusable() {\n    return true;\n  }\n  #onContextSize = (e) =\u003e {\n    if (this.hasAttribute(\"size\") === true) {\n      return;\n    }\n    switch (e.detail) {\n      case \"l\": {\n        this.setAttribute(\"data-size\", \"m\");\n        break;\n      }\n      default: {\n        this.setAttribute(\"data-size\", \"s\");\n      }\n    }\n  };\n  #onSizeUpdate() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const size = this.getAttribute(\"data-size\") ?? DEFAULT_SIZE;\n    this.#sizeContext.dispatch(size);\n  }\n  #onLeftSlotChange = () =\u003e {\n    setClass(\n      this.#$leftWrapper,\n      \"empty\",\n      this.#$leftSlot.assignedElements().length === 0\n    );\n  };\n  #onButtonFocus = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onButtonBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n  };\n  #onButtonKeydown = (e) =\u003e {\n    switch (e.code) {\n      case \"Space\":\n      case \"Enter\": {\n        e.preventDefault();\n        this.click();\n      }\n    }\n  };\n  #onButtonClick = () =\u003e {\n    if (!this.disabled) {\n      this.dispatchEvent(new CustomEvent(\"-click\"));\n    }\n  };\n  #onClickReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-click\")?.(e);\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n}\ndefineCustomElement(\"sinch-select-button\", SelectButton);\nconst templateHTML$g = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;position:relative;box-sizing:border-box;min-height:40px;padding:8px 16px;align-items:center;gap:10px;user-select:none;cursor:pointer;background-color:var(--sinch-comp-select-menu-color-default-background-initial);--sinch-global-color-text:var(--sinch-comp-select-menu-color-default-option-initial);--sinch-global-color-icon:var(--sinch-comp-select-menu-color-default-icon-initial);--sinch-global-size-icon:var(--sinch-comp-select-menu-size-icon)}#content{flex:1;min-width:0;--sinch-comp-text-font:var(--sinch-comp-select-menu-font-option)}#icon-check{display:none;margin-right:-6px}:host([data-checked]) #icon-check{display:block}:host([data-selected])\u003e#wrapper{background-color:var(--sinch-comp-select-menu-color-default-background-selected)}:host(:hover)\u003e#wrapper{background-color:var(--sinch-comp-select-menu-color-default-background-hover)}:host([disabled])\u003e#wrapper{cursor:initial;pointer-events:none;background-color:var(--sinch-comp-select-menu-color-disabled-background-initial);--sinch-global-color-text:var(--sinch-comp-select-menu-color-disabled-option-initial);--sinch-global-color-icon:var(--sinch-comp-select-menu-color-disabled-icon-initial)}::slotted([slot=icon]){margin-left:-6px}::slotted([slot=content]){pointer-events:none;flex:1}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003cslot name=\"content\"\u003e\u003c/slot\u003e\u003csinch-text id=\"content\" type=\"m\" ellipsis\u003e\u003c/sinch-text\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-check\" id=\"icon-check\"\u003e\u003c/sinch-icon\u003e\u003c/div\u003e';\nconst template$g = document.createElement(\"template\");\ntemplate$g.innerHTML = templateHTML$g;\nclass SelectMenuOption extends NectaryElement {\n  #$contentSlot;\n  #$content;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$g.content.cloneNode(true));\n    this.#$contentSlot = shadowRoot.querySelector('slot[name=\"content\"]');\n    this.#$content = shadowRoot.querySelector(\"#content\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"option\");\n    this.#$contentSlot.addEventListener(\n      \"slotchange\",\n      this.#onContentSlotChange\n    );\n    this.#onContentSlotChange();\n  }\n  static get observedAttributes() {\n    return [\"text\", \"data-checked\", \"disabled\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$content.textContent = newVal;\n        break;\n      }\n      case \"data-checked\": {\n        updateExplicitBooleanAttribute(\n          this,\n          \"aria-selected\",\n          isAttrTrue(newVal)\n        );\n        break;\n      }\n      case \"disabled\": {\n        updateBooleanAttribute(this, \"disabled\", isAttrTrue(newVal));\n        updateExplicitBooleanAttribute(this, \"aria-disabled\", isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  matchesSearch(searchValue) {\n    return this.text.toLowerCase().includes(searchValue.toLowerCase());\n  }\n  #onContentSlotChange = () =\u003e {\n    const elements = this.#$contentSlot.assignedElements();\n    this.#$content.style.display = elements.length \u003e 0 ? \"none\" : \"\";\n  };\n}\ndefineCustomElement(\"sinch-select-menu-option\", SelectMenuOption);\nconst isSelectMenuOption = (el) =\u003e el.localName === \"sinch-select-menu-option\";\nconst templateHTML$f = '\u003cstyle\u003e:host{display:block;outline:0}#listbox{overflow-y:auto;max-height:var(--sinch-comp-select-menu-font-max-height)}#search{display:none;margin:10px}#search.active{display:block}#search-clear:not(.active){display:none}#not-found{display:flex;align-items:center;justify-content:center;width:100%;height:30px;margin-bottom:10px;pointer-events:none;user-select:none;--sinch-comp-text-font:var(--sinch-comp-select-menu-font-not-found-text);--sinch-global-color-text:var(--sinch-comp-select-menu-color-default-not-found-text-initial)}#not-found:not(.active){display:none}::slotted(.hidden){display:none}::slotted(sinch-title){padding:8px 16px;--sinch-global-color-text:var(--sinch-comp-select-menu-color-default-title-initial)}\u003c/style\u003e\u003csinch-input id=\"search\" size=\"s\" placeholder=\"Search\"\u003e\u003csinch-icon icons-version=\"2\" name=\"magnifying-glass\" id=\"icon-search\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003csinch-button id=\"search-clear\" slot=\"right\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-xmark\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e\u003c/sinch-input\u003e\u003cdiv id=\"not-found\"\u003e\u003csinch-text type=\"m\"\u003eNo results\u003c/sinch-text\u003e\u003c/div\u003e\u003cdiv id=\"listbox\" role=\"presentation\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst ITEM_HEIGHT = 40;\nconst NUM_ITEMS_SEARCH = 7;\nconst template$f = document.createElement(\"template\");\ntemplate$f.innerHTML = templateHTML$f;\nclass SelectMenu extends NectaryElement {\n  #$optionSlot;\n  #$listbox;\n  #$search;\n  #$searchClear;\n  #$notFound;\n  #controller = null;\n  #searchDebounce;\n  #internals;\n  #userManagedSearch = false;\n  static formAssociated = true;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$f.content.cloneNode(true));\n    this.#internals = this.attachInternals();\n    this.#$optionSlot = shadowRoot.querySelector(\"slot\");\n    this.#$listbox = shadowRoot.querySelector(\"#listbox\");\n    this.#$search = shadowRoot.querySelector(\"#search\");\n    this.#$searchClear = shadowRoot.querySelector(\"#search-clear\");\n    this.#$notFound = shadowRoot.querySelector(\"#not-found\");\n    this.#searchDebounce = debounceTimeout(200)(this.#updateSearchValue);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.setAttribute(\"role\", \"listbox\");\n    this.#internals.role = \"listbox\";\n    this.tabIndex = 0;\n    this.addEventListener(\"keydown\", this.#onListboxKeyDown, options);\n    this.addEventListener(\"focus\", this.#onFocus, options);\n    this.addEventListener(\"blur\", this.#onListboxBlur, options);\n    this.#$listbox.addEventListener(\"click\", this.#onListboxClick, options);\n    this.#$search.addEventListener(\n      \"-change\",\n      this.#onSearchChange,\n      options\n    );\n    this.#$searchClear.addEventListener(\n      \"-click\",\n      this.#onSearchClearClick,\n      options\n    );\n    this.#$optionSlot.addEventListener(\n      \"slotchange\",\n      this.#onOptionSlotChange,\n      options\n    );\n    this.addEventListener(\n      \"-search-change\",\n      this.#onSearchChangeReactHandler,\n      options\n    );\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    subscribeContext(\n      this,\n      \"keydown\",\n      this.#onContextKeyDown,\n      this.#controller.signal\n    );\n    subscribeContext(\n      this,\n      \"visibility\",\n      this.#onContextVisibility,\n      this.#controller.signal\n    );\n    this.#onOptionSlotChange();\n  }\n  disconnectedCallback() {\n    this.#searchDebounce.cancel();\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  formAssociatedCallback() {\n    setFormValue(this.#internals, CSVToFormData(this.name, this.value));\n  }\n  formResetCallback() {\n    this.value = \"\";\n    setFormValue(this.#internals, \"\");\n  }\n  formStateRestoreCallback(state) {\n    if (this.#internals.form === null || getBooleanAttribute(this.#internals.form, \"data-form-state-restore\") === false) {\n      return;\n    }\n    if (state !== null) {\n      const value = typeof state === \"string\" ? state : state.get(this.name);\n      this.value = value?.toString() ?? \"\";\n      setFormValue(this.#internals, CSVToFormData(this.name, value?.toString() ?? \"\"));\n    }\n  }\n  static get observedAttributes() {\n    return [\n      \"value\",\n      \"rows\",\n      \"multiple\",\n      \"search-value\",\n      \"search-placeholder\",\n      \"search-autocomplete\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"multiple\": {\n        this.#onValueChange(this.value);\n        updateExplicitBooleanAttribute(\n          this,\n          \"aria-multiselectable\",\n          isAttrTrue(newVal)\n        );\n        this.#internals.ariaMultiSelectable = isAttrTrue(newVal).toString();\n        break;\n      }\n      case \"search-autocomplete\": {\n        updateAttribute(this.#$search, \"autocomplete\", newVal);\n        break;\n      }\n      case \"value\": {\n        this.#onValueChange(newVal ?? \"\");\n        break;\n      }\n      case \"rows\": {\n        const numberOfItems = this.#$optionSlot.assignedElements().length;\n        const maxNumberOfRows = parseInt(newVal ?? \"0\", 10);\n        this.#$listbox.style.maxHeight = attrValueToPixels(newVal, {\n          min: 2,\n          itemSizeMultiplier: ITEM_HEIGHT,\n          addExtraSpace: numberOfItems \u003e maxNumberOfRows\n        });\n        break;\n      }\n      case \"search-placeholder\": {\n        updateAttribute(this.#$search, \"placeholder\", newVal);\n        break;\n      }\n      case \"search-value\": {\n        updateAttribute(this.#$search, \"value\", newVal);\n        this.#userManagedSearch = true;\n        this.#updateSearchList(newVal !== null ? newVal : \"\");\n        break;\n      }\n    }\n  }\n  set name(value) {\n    updateAttribute(this, \"name\", value);\n  }\n  get name() {\n    return getAttribute(this, \"name\", \"\");\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set rows(value) {\n    updateIntegerAttribute(this, \"rows\", value);\n  }\n  get rows() {\n    return getIntegerAttribute(this, \"rows\", null);\n  }\n  set multiple(isMultiple) {\n    updateBooleanAttribute(this, \"multiple\", isMultiple);\n  }\n  get multiple() {\n    return getBooleanAttribute(this, \"multiple\");\n  }\n  set searchable(isSearchable) {\n    updateBooleanAttribute(this, \"searchable\", isSearchable);\n  }\n  get searchable() {\n    const searchableAttribute = this.getAttribute(\"searchable\");\n    return searchableAttribute === null ? searchableAttribute : isAttrTrue(searchableAttribute);\n  }\n  set \"search-autocomplete\"(autocomplete) {\n    updateAttribute(this.#$search, \"autocomplete\", autocomplete);\n  }\n  get \"search-autocomplete\"() {\n    return getAttribute(this.#$search, \"autocomplete\", \"\");\n  }\n  set \"search-placeholder\"(placeholder) {\n    updateAttribute(this.#$search, \"placeholder\", placeholder);\n  }\n  get \"search-placeholder\"() {\n    return getAttribute(this.#$search, \"placeholder\", \"\");\n  }\n  set \"search-value\"(value) {\n    updateAttribute(this, \"search-value\", value);\n    this.#userManagedSearch = true;\n  }\n  get \"search-value\"() {\n    return getAttribute(this, \"search-value\", \"\");\n  }\n  get focusable() {\n    return true;\n  }\n  #onFocus = () =\u003e {\n    const isSearchActive = hasClass(this.#$search, \"active\");\n    if (isSearchActive) {\n      this.#$search.focus();\n    }\n  };\n  #onListboxBlur = () =\u003e {\n    this.#selectOption(null);\n  };\n  #onListboxClick = (e) =\u003e {\n    const $elem = e.target;\n    if ($elem == null || !($elem instanceof Element) || !isSelectMenuOption($elem)) {\n      return;\n    }\n    this.focus();\n    if (!isTargetEqual(e, this.#$listbox) \u0026\u0026 !getBooleanAttribute($elem, \"disabled\")) {\n      this.#selectOption($elem);\n      this.#dispatchChangeEvent($elem);\n    }\n  };\n  #onSearchChange = (e) =\u003e {\n    if (!this.#userManagedSearch) {\n      this.#$search.value = e.detail;\n      this.#searchDebounce.fn();\n    } else {\n      this.#updateSearchValue(e.detail);\n    }\n    setClass(this.#$searchClear, \"active\", e.detail.length \u003e 0);\n  };\n  #onSearchClearClick = () =\u003e {\n    if (!this.#userManagedSearch) {\n      this.#$search.value = \"\";\n      this.#searchDebounce.fn();\n    } else {\n      this.#updateSearchValue(\"\");\n    }\n    this.#$search.focus();\n    setClass(this.#$searchClear, \"active\", false);\n  };\n  #updateSearchValue = (newValue) =\u003e {\n    const searchValue = newValue === void 0 ? this.#$search.value.toLowerCase() : newValue;\n    const searchChangedEvent = new CustomEvent(\"-search-change\", {\n      detail: searchValue,\n      cancelable: true\n    });\n    this.dispatchEvent(searchChangedEvent);\n    if (!searchChangedEvent.defaultPrevented) {\n      this.#updateSearchList(searchValue);\n    }\n  };\n  #updateSearchList = (searchValue) =\u003e {\n    const $options = this.#getOptionElements();\n    let someFound = false;\n    for (const $opt of $options) {\n      const isHidden = searchValue.length \u003e 0 \u0026\u0026 !$opt.matchesSearch(searchValue);\n      someFound ||= !isHidden;\n      setClass($opt, \"hidden\", isHidden);\n    }\n    setClass(this.#$notFound, \"active\", !someFound);\n    this.#selectOption(null);\n  };\n  #onContextKeyDown = (e) =\u003e {\n    this.#handleKeydown(e.detail);\n  };\n  #onContextVisibility = (e) =\u003e {\n    if (e.detail) {\n      this.#selectOption(this.#findCheckedOption());\n      this.#onFocus();\n    } else {\n      this.#selectOption(null);\n    }\n  };\n  #onListboxKeyDown = (e) =\u003e {\n    this.#handleKeydown(e);\n  };\n  #handleKeydown(e) {\n    switch (e.code) {\n      case \"Space\":\n      case \"Enter\": {\n        const $option = this.#findSelectedOption();\n        if ($option !== null) {\n          e.preventDefault();\n          this.#dispatchChangeEvent($option);\n        }\n        break;\n      }\n      case \"ArrowUp\": {\n        e.preventDefault();\n        this.#selectOption(this.#getPrevOption());\n        break;\n      }\n      case \"ArrowDown\": {\n        e.preventDefault();\n        this.#selectOption(this.#getNextOption());\n        break;\n      }\n    }\n  }\n  #onOptionSlotChange = () =\u003e {\n    const searchable = this.searchable;\n    const options = this.#getOptionElements();\n    const isEnoughOptions = options.length \u003e= NUM_ITEMS_SEARCH;\n    const isSearchActive = isEnoughOptions \u0026\u0026 searchable !== false || Boolean(searchable);\n    if (!isSearchActive) {\n      updateAttribute(this.#$search, \"value\", null);\n    }\n    setClass(this.#$search, \"active\", isSearchActive);\n    this.#onValueChange(this.value);\n  };\n  #onValueChange(csv) {\n    if (this.multiple) {\n      const values = unpackCsv(csv);\n      for (const $option of this.#getOptionElements()) {\n        const isChecked = !getBooleanAttribute($option, \"disabled\") \u0026\u0026 values.includes(getAttribute($option, \"value\", \"\"));\n        updateBooleanAttribute($option, \"data-checked\", isChecked);\n      }\n      const formData = new FormData();\n      values.forEach((value) =\u003e {\n        formData.append(this.name, value);\n      });\n      setFormValue(this.#internals, formData);\n    } else {\n      const value = getFirstCsvValue(csv);\n      for (const $option of this.#getOptionElements()) {\n        const isChecked = !getBooleanAttribute($option, \"disabled\") \u0026\u0026 value === getAttribute($option, \"value\", \"\");\n        updateBooleanAttribute($option, \"data-checked\", isChecked);\n      }\n      setFormValue(this.#internals, value ?? \"\");\n    }\n  }\n  #getFirstOption() {\n    const $options = this.#getOptionElements();\n    for (let i = 0; i \u003c $options.length; i++) {\n      const el = $options[i];\n      if (!getBooleanAttribute(el, \"disabled\") \u0026\u0026 !el.classList.contains(\"hidden\")) {\n        return el;\n      }\n    }\n    return null;\n  }\n  #getLastOption() {\n    const $options = this.#getOptionElements();\n    for (let i = $options.length - 1; i \u003e= 0; i--) {\n      const el = $options[i];\n      if (!getBooleanAttribute(el, \"disabled\") \u0026\u0026 !el.classList.contains(\"hidden\")) {\n        return el;\n      }\n    }\n    return null;\n  }\n  #getNextOption() {\n    const index = this.#getSelectedOptionIndex();\n    if (index !== null) {\n      const $options = this.#getOptionElements();\n      for (let i = 1; i \u003c= $options.length; i++) {\n        const el = $options[(i + index) % $options.length];\n        if (!getBooleanAttribute(el, \"disabled\") \u0026\u0026 !el.classList.contains(\"hidden\")) {\n          return el;\n        }\n      }\n    }\n    return this.#getFirstOption();\n  }\n  #getPrevOption() {\n    const index = this.#getSelectedOptionIndex();\n    if (index !== null) {\n      const $options = this.#getOptionElements();\n      for (let i = 1; i \u003c= $options.length; i++) {\n        const el = $options[(index - i + $options.length) % $options.length];\n        if (!getBooleanAttribute(el, \"disabled\") \u0026\u0026 !el.classList.contains(\"hidden\")) {\n          return el;\n        }\n      }\n    }\n    return this.#getLastOption();\n  }\n  #selectOption($option) {\n    const hasRows = this.hasAttribute(\"rows\");\n    for (const $op of this.#getOptionElements()) {\n      const isSelected = $op === $option;\n      updateBooleanAttribute($op, \"data-selected\", isSelected);\n      if (isSelected \u0026\u0026 Boolean(hasRows)) {\n        $op.scrollIntoView?.({ block: \"nearest\" });\n      }\n    }\n  }\n  #getOptionElements() {\n    const assignedElements = this.#$optionSlot.assignedElements();\n    return assignedElements.filter(isSelectMenuOption);\n  }\n  #getSelectedOptionIndex() {\n    const elements = this.#getOptionElements();\n    for (let i = 0; i \u003c elements.length; i++) {\n      const el = elements[i];\n      if (!getBooleanAttribute(el, \"disabled\") \u0026\u0026 getBooleanAttribute(el, \"data-selected\")) {\n        return i;\n      }\n    }\n    return null;\n  }\n  #findSelectedOption() {\n    const elements = this.#getOptionElements();\n    for (const el of elements) {\n      if (!getBooleanAttribute(el, \"disabled\") \u0026\u0026 getBooleanAttribute(el, \"data-selected\")) {\n        return el;\n      }\n    }\n    return null;\n  }\n  #findCheckedOption() {\n    const elements = this.#getOptionElements();\n    const value = this.multiple ? getFirstCsvValue(this.value) : this.value;\n    for (const $el of elements) {\n      if (!getBooleanAttribute($el, \"disabled\") \u0026\u0026 getAttribute($el, \"value\") === value) {\n        return $el;\n      }\n    }\n    return null;\n  }\n  #dispatchChangeEvent($opt) {\n    if ($opt === null) {\n      return;\n    }\n    const value = $opt.value;\n    const result = this.multiple ? updateCsv(\n      this.value,\n      value,\n      !getBooleanAttribute($opt, \"data-checked\")\n    ) : value;\n    this.dispatchEvent(new CustomEvent(\"-change\", { detail: result }));\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  #onSearchChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-search-change\")?.(e);\n    getReactEventHandler(this, \"onSearchChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-select-menu\", SelectMenu);\nconst templateHTML$e = '\u003cstyle\u003e:host{display:block;height:var(--sinch-sys-size-m);--sinch-local-shape-radius:var(--sinch-sys-shape-radius-m)}:host([size=xs]){height:var(--sinch-sys-size-xs);--sinch-local-shape-radius:var(--sinch-sys-shape-radius-xs)}:host([size=\"s\"]){height:var(--sinch-sys-size-s);--sinch-local-shape-radius:var(--sinch-sys-shape-radius-s)}:host([size=\"m\"]){height:var(--sinch-sys-size-m);--sinch-local-shape-radius:var(--sinch-sys-shape-radius-m)}:host([size=\"l\"]){height:var(--sinch-sys-size-l);--sinch-local-shape-radius:var(--sinch-sys-shape-radius-l)}#content{height:100%;background-color:var(--sinch-sys-color-border-subtle);border-radius:var(--sinch-local-shape-radius)}\u003c/style\u003e\u003cdiv id=\"content\"\u003e\u003c/div\u003e';\nconst template$e = document.createElement(\"template\");\ntemplate$e.innerHTML = templateHTML$e;\nclass SkeletonItem extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$e.content.cloneNode(true));\n  }\n}\ndefineCustomElement(\"sinch-skeleton-item\", SkeletonItem);\nconst getUid = () =\u003e crypto.getRandomValues(new Uint8Array(21)).reduce((id, byte) =\u003e {\n  const nextByte = byte \u0026 63;\n  if (nextByte \u003c 36) {\n    return id + nextByte.toString(36);\n  }\n  if (nextByte \u003c 62) {\n    return id + (nextByte - 26).toString(36).toUpperCase();\n  }\n  if (nextByte \u003e 62) {\n    return `${id}-`;\n  }\n  return `${id}_`;\n}, \"\");\nconst templateHTML$d = '\u003cstyle\u003e:host{display:block}#wrapper{position:relative;display:flex;flex-direction:column;gap:16px;height:100%;box-sizing:border-box;overflow:hidden}:host([card]:not([card=false]))\u003e#wrapper{padding:16px;background-color:var(--sinch-sys-color-surface-primary-default);border-radius:var(--sinch-sys-shape-radius-l);border:1px solid var(--sinch-sys-color-border-subtle)}#shimmer{position:absolute;inset:0;background-image:linear-gradient(90deg,transparent 0,var(--sinch-sys-color-surface-tertiary-default) 100px,transparent 200px);clip-path:url(\"#clip\")}#svg{display:block;width:0;height:0}\u003c/style\u003e\u003csvg id=\"svg\"\u003e\u003cdefs\u003e\u003cclipPath id=\"clip\"\u003e\u003c/clipPath\u003e\u003c/defs\u003e\u003c/svg\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003cdiv id=\"shimmer\"\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$d = document.createElement(\"template\");\ntemplate$d.innerHTML = templateHTML$d;\nconst ANIMATION_DURATION = 2e3;\nconst BORDER_WIDTH = 1;\nclass Skeleton extends NectaryElement {\n  #animation = null;\n  #shimmer;\n  #wrapper;\n  #slot;\n  #controller = null;\n  #clip;\n  #borderWidth = 0;\n  #bb = null;\n  #observer = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$d.content.cloneNode(true));\n    this.#shimmer = shadowRoot.querySelector(\"#shimmer\");\n    this.#slot = shadowRoot.querySelector(\"slot\");\n    this.#wrapper = shadowRoot.querySelector(\"#wrapper\");\n    this.#clip = shadowRoot.querySelector(\"#clip\");\n  }\n  connectedCallback() {\n    const id = getUid();\n    this.#shimmer.style.setProperty(\"clip-path\", `url(#${id})`);\n    this.#clip.setAttribute(\"id\", id);\n    this.#controller = new AbortController();\n    if (!shouldReduceMotion()) {\n      this.#slot.addEventListener(\"slotchange\", this.#onSlotChange, { signal: this.#controller.signal });\n      this.#observer = new IntersectionObserver((entries) =\u003e {\n        this.#bb = entries[0].boundingClientRect;\n        if (this.#bb.width === 0) {\n          return;\n        }\n        this.#updateAnimation();\n        for (const child of this.#slot.assignedElements()) {\n          this.#handleSkeletonItemData(child);\n        }\n        this.#observer.disconnect();\n        this.#observer = null;\n      }, { threshold: 1 });\n      this.#observer.observe(this.#wrapper);\n    }\n  }\n  disconnectedCallback() {\n    this.#animation?.cancel();\n    this.#animation = null;\n    this.#controller.abort();\n    this.#controller = null;\n    this.#observer?.disconnect();\n    this.#observer = null;\n  }\n  static get observedAttributes() {\n    return [\"card\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"card\": {\n        this.#borderWidth = isAttrTrue(newVal) ? BORDER_WIDTH : 0;\n        break;\n      }\n    }\n  }\n  #updateAnimation() {\n    const bb = this.#bb;\n    const bgWidth = bb.width * 4;\n    this.#shimmer.style.setProperty(\"background-size\", `${bgWidth}px`);\n    this.#animation = this.#shimmer.animate({\n      backgroundPosition: [`0px`, `${bgWidth}px`]\n    }, {\n      duration: ANIMATION_DURATION,\n      iterations: Infinity\n    });\n  }\n  #onSlotChange = () =\u003e {\n    this.#clip.innerHTML = \"\";\n    if (this.#bb === null) {\n      return;\n    }\n    for (const child of this.#slot.assignedElements()) {\n      this.#handleSkeletonItemData(child);\n    }\n  };\n  #handleSkeletonItemData(child) {\n    const data2 = child.getBoundingClientRect();\n    const radiusStr = getCssVar(child, \"--sinch-local-shape-radius\") ?? \"0\";\n    const radius = attrValueToInteger(radiusStr, { min: 0, defaultValue: 0 });\n    const bb = this.#bb;\n    const rect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n    rect.setAttribute(\"x\", (data2.x - bb.x - this.#borderWidth).toString());\n    rect.setAttribute(\"y\", (data2.y - bb.y - this.#borderWidth).toString());\n    rect.setAttribute(\"width\", data2.width.toString());\n    rect.setAttribute(\"height\", data2.height.toString());\n    rect.setAttribute(\"rx\", radius.toString());\n    this.#clip.appendChild(rect);\n  }\n}\ndefineCustomElement(\"sinch-skeleton\", Skeleton);\nconst templateHTML$c = \"\u003cstyle\u003e:host{display:table-row-group}\u003c/style\u003e\u003cslot\u003e\u003c/slot\u003e\";\nconst template$c = document.createElement(\"template\");\ntemplate$c.innerHTML = templateHTML$c;\nclass TableBody extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$c.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"rowgroup\");\n  }\n}\ndefineCustomElement(\"sinch-table-body\", TableBody);\nconst alignValues = [\"start\", \"center\", \"end\"];\nconst templateHTML$b = '\u003cstyle\u003e:host{display:table-cell;vertical-align:top;border-bottom:1px solid var(--sinch-comp-table-color-cell-default-border-initial)}#wrapper{display:flex;flex-direction:column;justify-content:center;min-height:48px;box-sizing:border-box;padding:8px}:host([align=end]) #wrapper{text-align:end;align-items:flex-end}:host([align=center]) #wrapper{text-align:center;align-items:center}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$b = document.createElement(\"template\");\ntemplate$b.innerHTML = templateHTML$b;\nclass TableCell extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$b.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"cell\");\n  }\n  set align(value) {\n    updateLiteralAttribute(this, alignValues, \"align\", value);\n  }\n  get align() {\n    return getLiteralAttribute(this, alignValues, \"align\", \"start\");\n  }\n}\ndefineCustomElement(\"sinch-table-cell\", TableCell);\nconst templateHTML$a = '\u003cstyle\u003e:host{display:table-cell;border-bottom:1px solid var(--sinch-comp-table-color-head-cell-default-border-initial);vertical-align:middle}#wrapper{position:relative;display:flex;align-items:center;gap:8px;width:100%;height:100%;padding:8px;box-sizing:border-box;--sinch-global-color-icon:var(--sinch-comp-table-color-head-cell-default-icon-initial)}#text{flex-shrink:1;min-width:0;--sinch-global-color-text:var(--sinch-comp-table-color-head-cell-default-text-initial)}#text:empty{display:none}:host([align=center])\u003e#wrapper{justify-content:center}:host([align=end])\u003e#wrapper{justify-content:flex-end}:host([fit]){width:1px}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot name=\"checkbox\"\u003e\u003c/slot\u003e\u003cslot name=\"left\"\u003e\u003c/slot\u003e\u003csinch-text id=\"text\" type=\"m\"\u003e\u003c/sinch-text\u003e\u003cslot name=\"tooltip\"\u003e\u003c/slot\u003e\u003cslot name=\"right\"\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst template$a = document.createElement(\"template\");\ntemplate$a.innerHTML = templateHTML$a;\nclass TableHeadCell extends NectaryElement {\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$a.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#text\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"columnheader\");\n    this.setAttribute(\"scope\", \"col\");\n  }\n  static get observedAttributes() {\n    return [\"text\", \"fit\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n      case \"fit\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\");\n  }\n  set align(value) {\n    updateLiteralAttribute(this, alignValues, \"align\", value);\n  }\n  get align() {\n    return getLiteralAttribute(this, alignValues, \"align\", \"start\");\n  }\n  set fit(isFit) {\n    updateBooleanAttribute(this, \"fit\", isFit);\n  }\n  get fit() {\n    return getBooleanAttribute(this, \"fit\");\n  }\n}\ndefineCustomElement(\"sinch-table-head-cell\", TableHeadCell);\nconst templateHTML$9 = \"\u003cstyle\u003e:host{display:table-header-group}\u003c/style\u003e\u003cslot\u003e\u003c/slot\u003e\";\nconst template$9 = document.createElement(\"template\");\ntemplate$9.innerHTML = templateHTML$9;\nclass TableHead extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$9.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"rowgroup\");\n  }\n}\ndefineCustomElement(\"sinch-table-head\", TableHead);\nconst templateHTML$8 = \"\u003cstyle\u003e:host{display:table-row;background-color:var(--sinch-comp-table-color-row-default-background-initial)}:host([selected]){background-color:var(--sinch-comp-table-color-row-checked-background-initial)}:host(:hover){background-color:var(--sinch-comp-table-color-row-default-background-hover)}:host([sticky]) ::slotted(sinch-table-head-cell){position:sticky;top:0;z-index:1;background-color:var(--sinch-comp-table-color-row-default-background-sticky)}:host(:last-child) ::slotted(sinch-table-cell){border-bottom:none}\u003c/style\u003e\u003cslot\u003e\u003c/slot\u003e\";\nconst template$8 = document.createElement(\"template\");\ntemplate$8.innerHTML = templateHTML$8;\nclass TableRow extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$8.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"row\");\n  }\n  static get observedAttributes() {\n    return [\"sticky\", \"selected\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"sticky\":\n      case \"selected\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  set sticky(isSticky) {\n    updateBooleanAttribute(this, \"sticky\", isSticky);\n  }\n  get sticky() {\n    return getBooleanAttribute(this, \"sticky\");\n  }\n  set selected(isSelected) {\n    updateBooleanAttribute(this, \"selected\", isSelected);\n  }\n  get selected() {\n    return getBooleanAttribute(this, \"selected\");\n  }\n}\ndefineCustomElement(\"sinch-table-row\", TableRow);\nconst templateHTML$7 = \"\u003cstyle\u003e:host{display:table}\u003c/style\u003e\u003cslot\u003e\u003c/slot\u003e\";\nconst template$7 = document.createElement(\"template\");\ntemplate$7.innerHTML = templateHTML$7;\nclass Table extends NectaryElement {\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$7.content.cloneNode(true));\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"table\");\n  }\n}\ndefineCustomElement(\"sinch-table\", Table);\nconst templateHTML$6 = '\u003cstyle\u003e:host{display:block}#button{all:initial;position:relative;display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px 16px;box-sizing:border-box;cursor:pointer;background-color:var(--sinch-comp-tab-color-default-background-initial);border-top-left-radius:var(--sinch-comp-tab-shape-radius);border-top-right-radius:var(--sinch-comp-tab-shape-radius);height:39px;--sinch-global-color-text:var(--sinch-comp-tab-color-default-text-initial);--sinch-global-color-icon:var(--sinch-comp-tab-color-default-icon-initial);--sinch-global-size-icon:var(--sinch-comp-tab-size-icon)}#button:hover{background-color:var(--sinch-comp-tab-color-default-background-hover)}#button:focus-visible::after{content:\"\";position:absolute;inset:0;bottom:-3px;border:2px solid var(--sinch-comp-tab-color-default-outline-focus);border-top-left-radius:var(--sinch-comp-tab-shape-radius);border-top-right-radius:var(--sinch-comp-tab-shape-radius);pointer-events:none}#button:disabled{cursor:unset;pointer-events:none;--sinch-global-color-text:var(--sinch-comp-tab-color-disabled-text-initial);--sinch-global-color-icon:var(--sinch-comp-tab-color-disabled-icon-initial)}:host([data-checked]) #button{--sinch-global-color-text:var(--sinch-comp-tab-color-checked-text-initial);--sinch-global-color-icon:var(--sinch-comp-tab-color-checked-icon-initial)}:host([data-checked]) #button::before{content:\"\";position:absolute;left:0;right:0;bottom:-1px;pointer-events:none;border-top:2px solid var(--sinch-comp-tab-color-checked-border-initial)}#text{flex-shrink:1;flex-basis:auto;min-width:0;--sinch-comp-text-font:var(--sinch-comp-tab-font-label)}::slotted(*){display:block}\u003c/style\u003e\u003cbutton id=\"button\" tabindex=\"0\"\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003csinch-text id=\"text\" type=\"m\" ellipsis\u003e\u003c/sinch-text\u003e\u003c/button\u003e';\nconst template$6 = document.createElement(\"template\");\ntemplate$6.innerHTML = templateHTML$6;\nclass TabsOption extends NectaryElement {\n  #$button;\n  #$text;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: true });\n    shadowRoot.appendChild(template$6.content.cloneNode(true));\n    this.#$button = shadowRoot.querySelector(\"#button\");\n    this.#$text = shadowRoot.querySelector(\"#text\");\n  }\n  connectedCallback() {\n    this.setAttribute(\"role\", \"tab\");\n    this.#$button.addEventListener(\"click\", this.#onClick);\n  }\n  disconnectedCallback() {\n    this.#$button.removeEventListener(\"click\", this.#onClick);\n  }\n  static get observedAttributes() {\n    return [\"data-checked\", \"disabled\", \"text\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        break;\n      }\n      case \"data-checked\": {\n        updateExplicitBooleanAttribute(this, \"aria-selected\", isAttrTrue(newVal));\n        break;\n      }\n      case \"disabled\": {\n        const isDisabled = isAttrTrue(newVal);\n        this.#$button.disabled = isDisabled;\n        updateBooleanAttribute(this, name, isDisabled);\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$button.focus();\n  }\n  blur() {\n    this.#$button.blur();\n  }\n  #onClick = (e) =\u003e {\n    e.stopPropagation();\n    this.dispatchEvent(\n      new CustomEvent(\"option-change\", { bubbles: true, detail: this.value })\n    );\n  };\n}\ndefineCustomElement(\"sinch-tabs-option\", TabsOption);\nconst getTagColorBg = (id) =\u003e {\n  return `var(--sinch-comp-tag-color-${id}-background)`;\n};\nconst getTagColorFg = (id) =\u003e {\n  return `var(--sinch-comp-tag-color-${id}-foreground)`;\n};\nconst templateHTML$5 = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle;outline:0}:host([ellipsis]){display:inline}#wrapper{display:flex;flex-direction:row;align-items:center;gap:4px;width:100%;height:var(--sinch-comp-tag-size-container-m);padding:0 9px;border-radius:var(--sinch-comp-tag-shape-radius);background-color:var(--sinch-comp-tag-color-default-background);box-sizing:border-box;user-select:none;--sinch-global-color-text:var(--sinch-comp-tag-color-default-foreground);--sinch-global-color-icon:var(--sinch-comp-tag-color-default-foreground);--sinch-global-size-icon:var(--sinch-comp-tag-size-icon-m)}:host([small]) #wrapper{height:var(--sinch-comp-tag-size-container-s);padding:0 8px;--sinch-global-size-icon:var(--sinch-comp-tag-size-icon-s)}#text{flex:1;--sinch-comp-text-font:var(--sinch-comp-tag-font-size-m-label)}:host([small]) #text{--sinch-comp-text-font:var(--sinch-comp-tag-font-size-s-label)}::slotted(*){margin-left:-4px}\u003c/style\u003e\u003csinch-tooltip id=\"tooltip\" type=\"fast\"\u003e\u003cdiv id=\"wrapper\"\u003e\u003cslot name=\"icon\"\u003e\u003c/slot\u003e\u003csinch-text id=\"text\" type=\"s\" ellipsis\u003e\u003c/sinch-text\u003e\u003c/div\u003e\u003c/sinch-tooltip\u003e';\nconst template$5 = document.createElement(\"template\");\ntemplate$5.innerHTML = templateHTML$5;\nclass Tag extends NectaryElement {\n  #$text;\n  #$tooltip;\n  #$wrapper;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$5.content.cloneNode(true));\n    this.#$wrapper = shadowRoot.querySelector(\"#wrapper\");\n    this.#$text = shadowRoot.querySelector(\"#text\");\n    this.#$tooltip = shadowRoot.querySelector(\"#tooltip\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#updateColor();\n    this.#updateEllipsisTooltip();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n  }\n  get color() {\n    return getAttribute(this, \"color\");\n  }\n  set color(value) {\n    updateAttribute(this, \"color\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n    updateAttribute(this.#$tooltip, \"text\", value);\n  }\n  get small() {\n    return getBooleanAttribute(this, \"small\");\n  }\n  set small(isSmall) {\n    updateBooleanAttribute(this, \"small\", isSmall);\n  }\n  static get observedAttributes() {\n    return [\"text\", \"color\", \"small\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"color\": {\n        this.#updateColor();\n        break;\n      }\n      case \"text\": {\n        this.#$text.textContent = newVal;\n        this.#updateEllipsisTooltip();\n        break;\n      }\n      case \"small\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  #updateColor() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const colorName = this.color;\n    if (colorName !== null \u0026\u0026 colorName.length \u003e 0) {\n      const bg = getTagColorBg(colorName);\n      const fg = getTagColorFg(colorName);\n      this.#$wrapper.style.setProperty(\"background-color\", bg);\n      this.#$wrapper.style.setProperty(\"--sinch-global-color-text\", fg);\n      this.#$wrapper.style.setProperty(\"--sinch-global-color-icon\", fg);\n    } else {\n      this.#$wrapper.style.removeProperty(\"background-color\");\n      this.#$wrapper.style.removeProperty(\"--sinch-global-color-text\");\n      this.#$wrapper.style.removeProperty(\"--sinch-global-color-icon\");\n    }\n  }\n  #updateEllipsisTooltip() {\n    const ellipsis = getBooleanAttribute(this, \"ellipsis\");\n    requestAnimationFrame(() =\u003e {\n      const hasOverflow = this.#$text.offsetWidth \u003c this.#$text.scrollWidth;\n      if (ellipsis \u0026\u0026 hasOverflow) {\n        updateAttribute(this.#$tooltip, \"text\", this.text);\n      } else {\n        updateAttribute(this.#$tooltip, \"text\", \"\");\n      }\n    });\n  }\n}\ndefineCustomElement(\"sinch-tag\", Tag);\nconst templateHTML$4 = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:column;position:relative;width:100%;box-sizing:border-box;background-color:var(--sinch-comp-textarea-color-default-background-initial);border-radius:var(--sinch-local-shape-radius);padding-right:2px;overflow:hidden;--sinch-local-shape-radius:var(--sinch-comp-textarea-shape-radius)}#input{all:initial;display:block;font:var(--sinch-comp-textarea-font-input);color:var(--sinch-comp-textarea-color-default-text-initial);resize:none;white-space:pre-wrap;overflow-wrap:break-word;padding:8px 10px 8px 12px;border:none;box-sizing:border-box}#input::placeholder{color:var(--sinch-comp-textarea-color-default-text-placeholder);opacity:1}#input:disabled{color:var(--sinch-comp-textarea-color-disabled-text-initial);-webkit-text-fill-color:var(--sinch-comp-textarea-color-disabled-text-initial)}#border{position:absolute;border:1px solid var(--sinch-comp-textarea-color-default-border-initial);border-radius:var(--sinch-local-shape-radius);inset:0;pointer-events:none}:host([invalid]) #border{border-color:var(--sinch-comp-textarea-color-invalid-border-initial)}#input:focus+#border{border-color:var(--sinch-comp-textarea-color-default-border-focus);border-width:2px}#input:disabled+#border{border-color:var(--sinch-comp-textarea-color-disabled-border-initial)}#bottom{display:flex;flex-direction:row;align-items:center;gap:8px;padding:12px 4px 4px}#bottom.empty{display:none}:host([resizable]) #bottom{padding-right:calc(var(--sinch-comp-textarea-size-resize-handle) + 4px)}#resize-handle{display:none;position:absolute;width:var(--sinch-comp-textarea-size-resize-handle);height:var(--sinch-comp-textarea-size-resize-handle);bottom:0;right:0;cursor:ns-resize}:host([resizable]) #resize-handle{display:block}#resize-icon{display:block;pointer-events:none;fill:var(--sinch-comp-textarea-color-default-border-initial)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003ctextarea id=\"input\"\u003e\u003c/textarea\u003e\u003cdiv id=\"border\"\u003e\u003c/div\u003e\u003cdiv id=\"bottom\"\u003e\u003cslot name=\"bottom\"\u003e\u003c/slot\u003e\u003cdiv id=\"resize-handle\"\u003e\u003csvg id=\"resize-icon\" width=\"16\" height=\"16\"\u003e\u003cpath d=\"m14.833 4.724-9.61 9.61-.942-.944 9.61-9.609.942.943ZM15.443 10 10.5 14.943 9.557 14 14.5 9.057l.943.943Z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$4 = document.createElement(\"template\");\ntemplate$4.innerHTML = templateHTML$4;\nclass Textarea extends NectaryElement {\n  #$input;\n  #$bottomSlot;\n  #$bottomWrapper;\n  #$resizeHandle;\n  #cursorPos = null;\n  #isPendingDk = false;\n  #controller = null;\n  #sizeContext;\n  #prevContentHeight = 0;\n  #dragStartY = 0;\n  #intersectionObserver = null;\n  #internals;\n  static formAssociated = true;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ delegatesFocus: true });\n    shadowRoot.appendChild(template$4.content.cloneNode(true));\n    this.#internals = this.attachInternals();\n    this.#$input = shadowRoot.querySelector(\"#input\");\n    this.#$bottomSlot = shadowRoot.querySelector('slot[name=\"bottom\"]');\n    this.#$bottomWrapper = shadowRoot.querySelector(\"#bottom\");\n    this.#$resizeHandle = shadowRoot.querySelector(\"#resize-handle\");\n    this.#sizeContext = new Context(this.#$bottomWrapper, \"size\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.setAttribute(\"role\", \"textbox\");\n    this.#internals.role = \"textbox\";\n    this.ariaMultiLine = \"true\";\n    this.#internals.ariaMultiLine = \"true\";\n    this.#$input.addEventListener(\"input\", this.#onInput, options);\n    this.#$input.addEventListener(\"compositionstart\", this.#onCompositionStart, options);\n    this.#$input.addEventListener(\"mousedown\", this.#onSelectionChange, options);\n    this.#$input.addEventListener(\"keydown\", this.#onSelectionChange, options);\n    this.#$input.addEventListener(\"focus\", this.#onInputFocus, options);\n    this.#$input.addEventListener(\"blur\", this.#onInputBlur, options);\n    this.#$resizeHandle.addEventListener(\"mousedown\", this.#onDragStart, options);\n    this.#$bottomSlot.addEventListener(\"slotchange\", this.#onBottomSlotChange, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, options);\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, options);\n    this.#sizeContext.listen(this.#controller.signal);\n    this.#onBottomSlotChange();\n    this.#updateMinRows();\n    this.#onSizeUpdate();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n    this.#controller = null;\n    if (this.#intersectionObserver !== null) {\n      this.#intersectionObserver.disconnect();\n      this.#intersectionObserver = null;\n    }\n  }\n  formAssociatedCallback() {\n    setFormValue(this.#internals, this.#$input.value);\n  }\n  formResetCallback() {\n    this.#$input.value = \"\";\n    setFormValue(this.#internals, \"\");\n  }\n  formStateRestoreCallback(state) {\n    if (this.#internals.form === null || getBooleanAttribute(this.#internals.form, \"data-form-state-restore\") === false) {\n      return;\n    }\n    if (state !== null) {\n      const value = typeof state === \"string\" ? state : state.get(this.name);\n      this.#$input.value = value?.toString() ?? \"\";\n      setFormValue(this.#internals, value?.toString() ?? \"\");\n    }\n  }\n  static get observedAttributes() {\n    return [\n      \"value\",\n      \"placeholder\",\n      \"invalid\",\n      \"disabled\",\n      \"rows\",\n      \"minrows\",\n      \"resizable\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"value\": {\n        const nextVal = newVal ?? \"\";\n        const prevVal = this.#$input.value;\n        if (nextVal !== prevVal) {\n          const prevCursorPos = this.#$input.selectionEnd;\n          const isPrevCursorEnd = prevCursorPos === prevVal.length;\n          const isShrinkingContent = nextVal.length \u003c prevVal.length;\n          this.#$input.value = nextVal;\n          setFormValue(this.#internals, nextVal);\n          if (!this.resizable) {\n            if (isShrinkingContent) {\n              this.#$input.style.removeProperty(\"height\");\n            }\n            const nextContentHeight = this.#$input.scrollHeight;\n            if (isShrinkingContent || nextContentHeight !== this.#prevContentHeight) {\n              this.#prevContentHeight = nextContentHeight;\n              this.#$input.style.setProperty(\"height\", `${this.#prevContentHeight}px`);\n            }\n          }\n          if (!isPrevCursorEnd) {\n            this.#$input.setSelectionRange(this.#cursorPos, this.#cursorPos);\n          }\n        }\n        break;\n      }\n      case \"placeholder\": {\n        this.#$input.placeholder = newVal ?? \"\";\n        updateAttribute(this, \"aria-placeholder\", newVal);\n        this.#internals.ariaPlaceholder = newVal ?? \"\";\n        break;\n      }\n      case \"invalid\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          break;\n        }\n        const isInvalid = isAttrTrue(newVal);\n        this.ariaInvalid = isInvalid.toString();\n        this.#internals.ariaInvalid = isInvalid.toString();\n        updateBooleanAttribute(this, \"invalid\", isInvalid);\n        break;\n      }\n      case \"disabled\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          break;\n        }\n        const isDisabled = isAttrTrue(newVal);\n        this.#$input.disabled = isDisabled;\n        updateBooleanAttribute(this, \"disabled\", isDisabled);\n        break;\n      }\n      case \"rows\": {\n        updateAttribute(this.#$input, \"rows\", newVal);\n        break;\n      }\n      case \"minrows\": {\n        this.#updateMinRows();\n        break;\n      }\n      case \"resizable\": {\n        if (isAttrEqual(oldVal, newVal)) {\n          break;\n        }\n        const isNewValTrue = isAttrTrue(newVal);\n        updateBooleanAttribute(this, name, isNewValTrue);\n        if (hasClass(this.#$bottomWrapper, \"empty\") \u0026\u0026 isNewValTrue) {\n          setClass(this.#$bottomWrapper, \"empty\", false);\n        }\n        break;\n      }\n    }\n  }\n  set name(value) {\n    updateAttribute(this, \"name\", value);\n  }\n  get name() {\n    return getAttribute(this, \"name\", \"\");\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set placeholder(value) {\n    updateAttribute(this, \"placeholder\", value);\n  }\n  get placeholder() {\n    return getAttribute(this, \"placeholder\");\n  }\n  set invalid(value) {\n    updateBooleanAttribute(this, \"invalid\", value);\n  }\n  get invalid() {\n    return getBooleanAttribute(this, \"invalid\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set resizable(isResizable) {\n    updateBooleanAttribute(this, \"resizable\", isResizable);\n  }\n  get resizable() {\n    return getBooleanAttribute(this, \"resizable\");\n  }\n  set rows(value) {\n    updateAttribute(this, \"rows\", value);\n  }\n  get rows() {\n    return getIntegerAttribute(this, \"rows\", 0);\n  }\n  set minRows(value) {\n    updateAttribute(this, \"minrows\", value);\n  }\n  get minRows() {\n    return getIntegerAttribute(this, \"minrows\", 0);\n  }\n  get selectionStart() {\n    return this.#$input.selectionStart;\n  }\n  set selectionStart(value) {\n    this.#$input.selectionStart = value;\n  }\n  get selectionEnd() {\n    return this.#$input.selectionEnd;\n  }\n  set selectionEnd(value) {\n    this.#$input.selectionEnd = value;\n  }\n  get selectionDirection() {\n    return this.#$input.selectionDirection;\n  }\n  set selectionDirection(value) {\n    this.#$input.selectionDirection = value;\n  }\n  get focusable() {\n    return true;\n  }\n  focus() {\n    this.#$input.focus();\n  }\n  blur() {\n    this.#$input.blur();\n  }\n  #updateMinRows() {\n    const minRows = this.minRows;\n    if (minRows \u003c= 0) {\n      this.#$input.style.removeProperty(\"min-height\");\n      if (this.#intersectionObserver !== null) {\n        this.#intersectionObserver.disconnect();\n        this.#intersectionObserver = null;\n      }\n    } else {\n      if (this.isDomConnected) {\n        this.#calcMinRows();\n      }\n      if (this.#intersectionObserver === null) {\n        this.#intersectionObserver = new IntersectionObserver(this.#intersectionObserverCallback, { root: null });\n        this.#intersectionObserver.observe(this.#$input);\n      }\n    }\n  }\n  #intersectionObserverCallback = ([entry]) =\u003e {\n    if (entry != null \u0026\u0026 entry.isIntersecting) {\n      this.#calcMinRows();\n    }\n  };\n  #calcMinRows() {\n    this.#$input.rows = this.minRows;\n    this.#$input.style.setProperty(\"min-height\", `${getRect(this.#$input).height}px`);\n    this.#$input.rows = this.rows;\n  }\n  #onCompositionStart = () =\u003e {\n    this.#isPendingDk = true;\n  };\n  #onSelectionChange = () =\u003e {\n    this.#cursorPos = this.#$input.selectionEnd;\n  };\n  #onInput = (e) =\u003e {\n    e.stopPropagation();\n    const nextValue = this.#$input.value;\n    const prevValue = this.value;\n    setFormValue(this.#internals, nextValue);\n    if (prevValue !== nextValue) {\n      const nextCursorPos = this.#$input.selectionEnd;\n      if (!this.#isPendingDk) {\n        this.#$input.value = prevValue;\n        const prevCursorPos = this.#cursorPos;\n        const isPrevCursorEnd = prevCursorPos === null || prevCursorPos === prevValue.length;\n        if (!isPrevCursorEnd) {\n          this.#$input.setSelectionRange(prevCursorPos, prevCursorPos);\n        }\n      }\n      this.#isPendingDk = false;\n      this.#cursorPos = nextCursorPos;\n      this.dispatchEvent(\n        new CustomEvent(\"-change\", {\n          detail: nextValue\n        })\n      );\n    }\n  };\n  #onDragStart = (e) =\u003e {\n    if (this.#dragStartY !== 0) {\n      return;\n    }\n    this.#dragStartY = e.clientY;\n    this.#prevContentHeight = getRect(this.#$input).height;\n    window.addEventListener(\"mousemove\", this.#onDragResize, { signal: this.#controller.signal, capture: true });\n    window.addEventListener(\"mouseup\", this.#onDragEnd, { signal: this.#controller.signal, capture: true });\n  };\n  #onDragResize = (e) =\u003e {\n    const dy = e.clientY - this.#dragStartY;\n    const height = Math.round(Math.max(0, this.#prevContentHeight + dy));\n    this.#$input.style.setProperty(\"height\", `${height}px`);\n  };\n  #onDragEnd = () =\u003e {\n    window.removeEventListener(\"mousemove\", this.#onDragResize, { capture: true });\n    window.removeEventListener(\"mouseup\", this.#onDragEnd, { capture: true });\n    this.#dragStartY = 0;\n    this.#prevContentHeight = 0;\n  };\n  #onInputFocus = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-focus\"));\n  };\n  #onInputBlur = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-blur\"));\n  };\n  #onBottomSlotChange = () =\u003e {\n    const isEmpty = this.#$bottomSlot.assignedElements().length === 0;\n    if (!this.resizable) {\n      setClass(this.#$bottomWrapper, \"empty\", isEmpty);\n    }\n  };\n  #onSizeUpdate() {\n    if (!this.isDomConnected) {\n      return;\n    }\n    const size = this.getAttribute(\"data-size\") ?? DEFAULT_SIZE;\n    this.#sizeContext.dispatch(size);\n  }\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  #onFocusReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.();\n  };\n  #onBlurReactHandler = () =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.();\n  };\n}\ndefineCustomElement(\"sinch-textarea\", Textarea);\nconst parseTime = (value) =\u003e {\n  if (value === \"\" || value === null) {\n    return { hours: 0, minutes: 0 };\n  }\n  const timeParts = value.split(\":\");\n  const hours = parseInt(timeParts[0] ?? \"00\");\n  const minutes = parseInt(timeParts[1] ?? \"00\");\n  if (isNaN(hours) || hours \u003e 23 || hours \u003c 0) {\n    return { hours: 0, minutes: 0 };\n  }\n  if (isNaN(minutes) || minutes \u003e 59 || minutes \u003c 0) {\n    return { hours: 0, minutes: 0 };\n  }\n  return { hours, minutes };\n};\nconst pad = (value) =\u003e {\n  return value.toString().padStart(2, \"0\");\n};\nconst stringifyTime = (hour, minute) =\u003e {\n  return `${pad(hour)}:${pad(minute)}:00`;\n};\nconst stringifyHour = (hour, is24) =\u003e {\n  if (is24) {\n    return pad(hour);\n  }\n  if (hour === 0 || hour === 12) {\n    return \"12\";\n  }\n  return pad(hour % 12);\n};\nconst stringifyHourFace = (hour) =\u003e {\n  return hour === 0 ? \"12\" : hour === 12 ? \"24\" : String(hour);\n};\nconst stringifyMinute = (minute) =\u003e {\n  return pad(minute);\n};\nconst hourToIndex = (hour, is24) =\u003e {\n  if (is24) {\n    if (hour === 0) {\n      return 12;\n    }\n    if (hour === 12) {\n      return 0;\n    }\n    return hour;\n  }\n  return hour % 12;\n};\nconst getNeedleRotationDeg = (elem) =\u003e {\n  const match = elem.style.transform.match(/^rotate\\((-?\\d+)deg\\)$/);\n  if (match === null) {\n    return 0;\n  }\n  return Number(match[1]);\n};\nconst getShortestCssDeg = (currentDeg, nextDeg) =\u003e {\n  const angle = currentDeg % 360;\n  const diff = (360 - (angle - nextDeg)) % 360;\n  if (diff \u003e 180) {\n    return currentDeg - 360 + diff;\n  }\n  return currentDeg + diff;\n};\nconst templateHTML$3 = '\u003cstyle\u003e:host{display:block;outline:0}#wrapper{display:flex;flex-direction:column;width:248px;padding:16px;box-sizing:border-box;gap:16px}#header{position:relative;width:100%;height:48px;font:var(--sinch-comp-time-picker-header-font);line-height:48px;user-select:none;color:var(--sinch-comp-time-picker-header-color-default-text-initial)}#footer{display:flex;justify-content:center;width:100%;height:32px}#picker{position:relative;width:216px;height:216px;border-radius:50%;box-sizing:border-box;border:1px solid var(--sinch-comp-time-picker-watch-face-color-default-border-initial);background-color:var(--sinch-comp-time-picker-watch-face-color-default-background-initial)}#picker-hours,#picker-minutes{position:absolute;left:0;top:0;width:100%;height:100%;border-radius:50%;pointer-events:none;user-select:none}.digit-hour-12,.digit-hour-24,.digit-minute{position:absolute;width:28px;height:28px;text-align:center;top:calc(50% - 14px);left:calc(50% - 14px);z-index:1;cursor:pointer}.digit-hour-12{font:var(--sinch-comp-time-picker-digit-font-default-h12);color:var(--sinch-comp-time-picker-digit-color-default-h12-initial);line-height:28px}.digit-hour-12.selected{font:var(--sinch-comp-time-picker-digit-font-checked-h12);color:var(--sinch-comp-time-picker-digit-color-checked-h12-default)}.digit-hour-24{font:var(--sinch-comp-time-picker-digit-font-default-h24);color:var(--sinch-comp-time-picker-digit-color-default-h24-initial);line-height:28px}.digit-hour-24.selected{font:var(--sinch-comp-time-picker-digit-font-checked-h24);color:var(--sinch-comp-time-picker-digit-color-checked-h24-initial)}.digit-minute{font:var(--sinch-comp-time-picker-digit-font-default-minutes);color:var(--sinch-comp-time-picker-digit-color-default-minute-initial);line-height:28px}.digit-minute.selected{font:var(--sinch-comp-time-picker-digit-font-checked-minutes);color:var(--sinch-comp-time-picker-digit-color-checked-minute-initial)}#picker-touch{position:absolute;left:0;top:0;width:100%;height:100%;cursor:pointer;border-radius:50%}#needle-hour,#needle-minute,#picker-touch::after{background-color:var(--sinch-comp-time-picker-needle-color-default-background-initial)}#needle-hour,#needle-minute{position:absolute;transform-origin:bottom center;transform:rotate(0);bottom:50%;height:50px;transition-duration:.25s;transition-timing-function:ease-in-out;transition-property:transform height;z-index:2;outline:0}@media (prefers-reduced-motion){#needle-hour,#needle-minute{transition:none}}#needle-hour{width:4px;left:calc(50% - 2px);border-radius:2px}#needle-minute{width:2px;left:calc(50% - 1px);border-radius:1px}#needle-hour:focus-visible,#needle-minute:focus-visible{background-color:var(--sinch-comp-time-picker-needle-color-default-background-focus)}#needle-minute:not(.selected)::after{content:\"\";position:absolute;transform:translateX(-50%);left:0;top:-16px;width:4px;height:4px;border-radius:50%;background-color:var(--sinch-comp-time-picker-digit-color-checked-minute-initial)}#picker-touch::after{content:\"\";position:absolute;top:50%;left:50%;width:12px;height:12px;border-radius:50%;transform:translate(-50%,-50%)}#header-hours,#header-minutes{position:absolute;padding:0 4px;width:50px;outline:0}#header-hours{right:calc(50% + 8px);text-align:right}#header-minutes{left:calc(50% + 8px)}#header-colon{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}#submit{position:absolute;right:0;top:50%;transform:translateY(-50%)}#submit-icon{--sinch-global-color-icon:var(--sinch-comp-time-picker-header-color-default-icon-initial)}:host([ampm]) .digit-hour-24{display:none}:host(:not([ampm])) #footer{display:none}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"header\"\u003e\u003cdiv id=\"header-hours\" role=\"meter\" aria-valuemin=\"0\" aria-valuemax=\"23\" aria-valuenow=\"0\" aria-valuetext=\"0\"\u003e\u003cspan\u003e00\u003c/span\u003e\u003c/div\u003e\u003cdiv id=\"header-colon\"\u003e\u0026colon;\u003c/div\u003e\u003cdiv id=\"header-minutes\" role=\"meter\" aria-valuemin=\"0\" aria-valuemax=\"59\" aria-valuenow=\"0\" aria-valuetext=\"0\"\u003e\u003cspan\u003e00\u003c/span\u003e\u003c/div\u003e\u003csinch-button id=\"submit\" size=\"s\" aria-label=\"Submit\"\u003e\u003csinch-icon icons-version=\"2\" name=\"fa-check\" id=\"icon-submit\" slot=\"icon\"\u003e\u003c/sinch-icon\u003e\u003c/sinch-button\u003e\u003c/div\u003e\u003cdiv id=\"picker\" aria-hidden=\"true\"\u003e\u003cdiv id=\"picker-hours\"\u003e\u003c/div\u003e\u003cdiv id=\"picker-minutes\"\u003e\u003c/div\u003e\u003cdiv id=\"picker-touch\"\u003e\u003cdiv id=\"needle-hour\" tabindex=\"0\"\u003e\u003c/div\u003e\u003cdiv id=\"needle-minute\" tabindex=\"0\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv id=\"footer\"\u003e\u003csinch-segmented-control id=\"ampm\"\u003e\u003csinch-segmented-control-option value=\"am\" text=\"AM\" aria-label=\"AM\"\u003e\u003c/sinch-segmented-control-option\u003e\u003csinch-segmented-control-option value=\"pm\" text=\"PM\" aria-label=\"PM\"\u003e\u003c/sinch-segmented-control-option\u003e\u003c/sinch-segmented-control\u003e\u003c/div\u003e\u003c/div\u003e';\nconst template$3 = document.createElement(\"template\");\ntemplate$3.innerHTML = templateHTML$3;\nconst PICKER_RADIUS = 216 / 2;\nconst MINUTE_DIGIT_SIZE = 30;\nconst HOUR_12_DIGIT_SIZE = 26;\nconst HOUR_24_DIGIT_SIZE = 26;\nconst MINUTE_RADIUS = PICKER_RADIUS - MINUTE_DIGIT_SIZE;\nconst HOUR_12_RADIUS = MINUTE_RADIUS - HOUR_12_DIGIT_SIZE;\nconst HOUR_24_RADIUS = HOUR_12_RADIUS - HOUR_24_DIGIT_SIZE;\nconst NEEDLE_HOUR_12_LENGTH = HOUR_12_RADIUS;\nconst NEEDLE_HOUR_24_LENGTH = HOUR_24_RADIUS;\nconst NEEDLE_MINUTE_LENGTH = MINUTE_RADIUS;\nclass TimePicker extends NectaryElement {\n  #$pickerHours;\n  #$pickerMinutes;\n  #$pickerTouch;\n  #$needleHour;\n  #$needleMinute;\n  #$headerHours;\n  #$headerHoursText;\n  #$headerMinutes;\n  #$headerMinutesText;\n  #$ampm;\n  #$submitButton;\n  #hour = 0;\n  #minute = 0;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$3.content.cloneNode(true));\n    this.#$pickerHours = shadowRoot.querySelector(\"#picker-hours\");\n    this.#$pickerMinutes = shadowRoot.querySelector(\"#picker-minutes\");\n    this.#$pickerTouch = shadowRoot.querySelector(\"#picker\");\n    this.#$needleHour = shadowRoot.querySelector(\"#needle-hour\");\n    this.#$needleMinute = shadowRoot.querySelector(\"#needle-minute\");\n    this.#$headerHours = shadowRoot.querySelector(\"#header-hours\");\n    this.#$headerMinutes = shadowRoot.querySelector(\"#header-minutes\");\n    this.#$headerHoursText = shadowRoot.querySelector(\"#header-hours \u003e span\");\n    this.#$headerMinutesText = shadowRoot.querySelector(\"#header-minutes \u003e span\");\n    this.#$ampm = shadowRoot.querySelector(\"#ampm\");\n    this.#$submitButton = shadowRoot.querySelector(\"#submit\");\n    this.#$needleMinute.style.height = `${NEEDLE_MINUTE_LENGTH}px`;\n    this.#$needleHour.style.height = `${NEEDLE_HOUR_12_LENGTH}px`;\n    const MINUTE_DIGIT_RADIUS = MINUTE_RADIUS + MINUTE_DIGIT_SIZE / 2;\n    const HOUR_12_DIGIT_RADIUS = HOUR_12_RADIUS + HOUR_12_DIGIT_SIZE / 2;\n    const HOUR_24_DIGIT_RADIUS = HOUR_24_RADIUS + HOUR_24_DIGIT_SIZE / 2;\n    const hours12Frag = document.createDocumentFragment();\n    for (let i = 0; i \u003c 12; i++) {\n      const rad = Math.PI / 6 * (i - 3);\n      const el = document.createElement(\"div\");\n      const x = Math.cos(rad) * HOUR_12_DIGIT_RADIUS;\n      const y = Math.sin(rad) * HOUR_12_DIGIT_RADIUS;\n      const hourDisplayValue = stringifyHourFace(i);\n      el.className = \"digit-hour-12\";\n      el.style.transform = `translate(${x}px, ${y}px)`;\n      el.textContent = hourDisplayValue;\n      hours12Frag.appendChild(el);\n    }\n    this.#$pickerHours.appendChild(hours12Frag);\n    const hours24Frag = document.createDocumentFragment();\n    for (let i = 12; i \u003c 24; i++) {\n      const rad = Math.PI / 6 * (i - 3);\n      const el = document.createElement(\"div\");\n      const x = Math.cos(rad) * HOUR_24_DIGIT_RADIUS;\n      const y = Math.sin(rad) * HOUR_24_DIGIT_RADIUS;\n      const hourDisplayValue = stringifyHourFace(i);\n      el.className = \"digit-hour-24\";\n      el.style.transform = `translate(${x}px, ${y}px)`;\n      el.textContent = hourDisplayValue;\n      hours24Frag.appendChild(el);\n    }\n    this.#$pickerHours.appendChild(hours24Frag);\n    const minutesFrag = document.createDocumentFragment();\n    for (let i = 0; i \u003c 60; i += 5) {\n      const rad = Math.PI / 30 * (i - 15);\n      const el = document.createElement(\"div\");\n      const x = Math.cos(rad) * MINUTE_DIGIT_RADIUS;\n      const y = Math.sin(rad) * MINUTE_DIGIT_RADIUS;\n      el.className = \"digit-minute\";\n      el.style.transform = `translate(${x}px, ${y}px)`;\n      el.textContent = stringifyMinute(i);\n      minutesFrag.appendChild(el);\n    }\n    this.#$pickerMinutes.appendChild(minutesFrag);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const options = {\n      signal: this.#controller.signal\n    };\n    this.#$pickerTouch.addEventListener(\"click\", this.#onPickerClick, options);\n    this.#$ampm.addEventListener(\"-change\", this.#onAmPmChange, options);\n    this.#$submitButton.addEventListener(\"click\", this.#onSubmitButtonClick, options);\n    this.#$needleHour.addEventListener(\"keydown\", this.#onHoursKeydown, options);\n    this.#$needleMinute.addEventListener(\"keydown\", this.#onMinutesKeydown, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\"value\", \"ampm\", \"submit-aria-label\"];\n  }\n  attributeChangedCallback(name, prevValue, newVal) {\n    if (isAttrEqual(prevValue, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"value\": {\n        const { hours, minutes } = parseTime(newVal);\n        this.#hour = hours;\n        this.#minute = minutes;\n        this.#render();\n        break;\n      }\n      case \"ampm\": {\n        this.#render();\n        updateBooleanAttribute(this, \"ampm\", isAttrTrue(newVal));\n        break;\n      }\n      case \"submit-aria-label\": {\n        updateAttribute(this.#$submitButton, \"aria-label\", newVal);\n        break;\n      }\n    }\n  }\n  set value(value) {\n    updateAttribute(this, \"value\", value);\n  }\n  get value() {\n    return getAttribute(this, \"value\", \"\");\n  }\n  set ampm(value) {\n    updateBooleanAttribute(this, \"ampm\", value);\n  }\n  get ampm() {\n    return getBooleanAttribute(this, \"ampm\");\n  }\n  set submitAriaLabel(value) {\n    updateAttribute(this, \"submit-aria-label\", value);\n  }\n  get submitAriaLabel() {\n    return getAttribute(this, \"submit-aria-label\", \"\");\n  }\n  get submitButtonRect() {\n    return getRect(this.#$submitButton);\n  }\n  get amButtonRect() {\n    if (!this.ampm) {\n      return null;\n    }\n    const $am = this.#$ampm.querySelector('[value=\"am\"]');\n    return $am != null ? getRect($am) : null;\n  }\n  get pmButtonRect() {\n    if (!this.ampm) {\n      return null;\n    }\n    const $pm = this.#$ampm.querySelector('[value=\"pm\"]');\n    return $pm != null ? getRect($pm) : null;\n  }\n  hourDigitRect(hour) {\n    const $digit = this.#$pickerHours.children[hourToIndex(hour, !this.ampm)];\n    return $digit != null ? getRect($digit) : null;\n  }\n  minuteDigitRect(minute) {\n    const $digit = this.#$pickerMinutes.children[Math.round(minute / 5)];\n    return $digit != null ? getRect($digit) : null;\n  }\n  #getClickDegree(x, y) {\n    const touchRect = this.#$pickerTouch.getBoundingClientRect();\n    const cx = touchRect.width / 2;\n    const cy = touchRect.height / 2;\n    const px = x - touchRect.x;\n    const py = touchRect.height - y + touchRect.y;\n    const dx = px - cx;\n    const dy = py - cy;\n    const len = Math.sqrt(dx * dx + dy * dy);\n    const cosRad = dx / len;\n    const rad = Math.acos(cosRad * (dy \u003c 0 ? -1 : 1));\n    const deg = rad * (180 / Math.PI);\n    let cssDeg = (deg - 90 - 360) % 360 * -1;\n    if (dy \u003c 0) {\n      cssDeg += 180;\n    }\n    const rowIndex = len \u003e MINUTE_RADIUS ? 0 : len \u003e HOUR_12_RADIUS ? 1 : 2;\n    return [cssDeg, rowIndex];\n  }\n  #onPickerClick = (e) =\u003e {\n    const [cssDeg, rowIndex] = this.#getClickDegree(e.x, e.y);\n    const isHourRowClick = rowIndex \u003e 0;\n    const isHour24RowClick = rowIndex \u003e 1;\n    if (isHourRowClick) {\n      const digitIndex = Math.round(cssDeg / 30) % 12;\n      const is24 = getBooleanAttribute(this, \"ampm\") === false;\n      if (is24) {\n        if (isHour24RowClick) {\n          this.#hour = digitIndex === 0 ? 0 : digitIndex + 12;\n        } else {\n          this.#hour = digitIndex === 0 ? 12 : digitIndex;\n        }\n      } else {\n        this.#hour = digitIndex + (this.#$ampm.value === \"pm\" ? 12 : 0);\n      }\n      this.#$headerHours.focus();\n    } else {\n      this.#minute = Math.round(cssDeg / 6) % 60;\n      this.#$headerMinutes.focus();\n    }\n    this.#render();\n  };\n  #render() {\n    const is24 = getBooleanAttribute(this, \"ampm\") === false;\n    this.#selectHour(is24);\n    this.#selectMinute();\n    this.#$headerHoursText.textContent = stringifyHour(this.#hour, is24);\n    this.#$headerMinutesText.textContent = stringifyMinute(this.#minute);\n    updateAttribute(this.#$headerHours, \"aria-valuenow\", this.#hour);\n    updateAttribute(this.#$headerHours, \"aria-valuetext\", this.#hour);\n    updateAttribute(this.#$headerMinutes, \"aria-valuenow\", this.#minute);\n    updateAttribute(this.#$headerMinutes, \"aria-valuetext\", this.#minute);\n  }\n  #selectHour(is24) {\n    const $hours = this.#$pickerHours.children;\n    const hourDigitIndex = this.#hour % 12;\n    const selectedIndex = hourToIndex(this.#hour, is24);\n    const currentCssDeg = getNeedleRotationDeg(this.#$needleHour);\n    const hourCssDeg = getShortestCssDeg(currentCssDeg, hourDigitIndex * 30);\n    for (let i = 0; i \u003c $hours.length; i++) {\n      setClass($hours[i], \"selected\", i === selectedIndex);\n    }\n    this.#$needleHour.style.transform = `rotate(${hourCssDeg}deg)`;\n    if (is24) {\n      if (this.#hour \u003e 0 \u0026\u0026 this.#hour \u003c= 12) {\n        this.#$needleHour.style.height = `${NEEDLE_HOUR_12_LENGTH}px`;\n      } else {\n        this.#$needleHour.style.height = `${NEEDLE_HOUR_24_LENGTH}px`;\n      }\n    } else {\n      this.#$needleHour.style.height = `${NEEDLE_HOUR_12_LENGTH}px`;\n    }\n    this.#$ampm.setAttribute(\"value\", this.#hour \u003e= 0 \u0026\u0026 this.#hour \u003c 12 ? \"am\" : \"pm\");\n  }\n  #selectMinute() {\n    const $minutes = this.#$pickerMinutes.children;\n    const isNeedleSelected = this.#minute % 5 === 0;\n    const selectedIndex = this.#minute / 5;\n    const currentCssDeg = getNeedleRotationDeg(this.#$needleMinute);\n    const minuteCssDeg = getShortestCssDeg(currentCssDeg, this.#minute * 6);\n    for (let i = 0; i \u003c $minutes.length; i++) {\n      setClass($minutes[i], \"selected\", selectedIndex === i);\n    }\n    setClass(this.#$needleMinute, \"selected\", isNeedleSelected);\n    this.#$needleMinute.style.transform = `rotate(${minuteCssDeg}deg)`;\n  }\n  #onAmPmChange = (e) =\u003e {\n    const value = e.detail;\n    switch (value) {\n      case \"am\": {\n        if (this.#hour \u003e= 12) {\n          this.#hour -= 12;\n          this.#render();\n        }\n        break;\n      }\n      case \"pm\": {\n        if (this.#hour \u003c 12) {\n          this.#hour += 12;\n          this.#render();\n        }\n        break;\n      }\n    }\n  };\n  #onSubmitButtonClick = () =\u003e {\n    const value = stringifyTime(this.#hour, this.#minute);\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", {\n        detail: value\n      })\n    );\n  };\n  #onHoursKeydown = (e) =\u003e {\n    switch (e.key) {\n      case \"ArrowUp\": {\n        e.preventDefault();\n        this.#hour = (this.#hour + 1) % 24;\n        this.#render();\n        break;\n      }\n      case \"ArrowDown\": {\n        e.preventDefault();\n        this.#hour = (this.#hour + 23) % 24;\n        this.#render();\n        break;\n      }\n    }\n  };\n  #onMinutesKeydown = (e) =\u003e {\n    switch (e.key) {\n      case \"ArrowUp\": {\n        e.preventDefault();\n        this.#minute = (this.#minute + 1) % 60;\n        this.#render();\n        break;\n      }\n      case \"ArrowDown\": {\n        e.preventDefault();\n        this.#minute = (this.#minute + 59) % 60;\n        this.#render();\n        break;\n      }\n    }\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-time-picker\", TimePicker);\nconst originValues = [\"bottom-right\", \"top-right\"];\nconst templateHTML$2 = '\u003cstyle\u003e:host{display:block}#items{display:block;width:0;height:0;visibility:hidden;overflow:hidden}#list{display:flex;flex-direction:column;position:fixed;z-index:1;bottom:0;right:16px}:host([origin=top-right]) #list{flex-direction:column-reverse;bottom:unset;top:16px}.item-wrapper{height:0;opacity:0;position:relative}.item-wrapper[data-deleting]::after{content:\"\";position:absolute;top:0;left:0;bottom:0;right:0}\u003c/style\u003e\u003cslot id=\"items\"\u003e\u003c/slot\u003e\u003cdiv id=\"list\"\u003e\u003c/div\u003e';\nconst DURATION_ADD = 250;\nconst DURATION_REMOVE = 250;\nconst ITEMS_GAP = 16;\nconst template$2 = document.createElement(\"template\");\ntemplate$2.innerHTML = templateHTML$2;\nclass ToastManager extends NectaryElement {\n  #$slot;\n  #$list;\n  #map = /* @__PURE__ */ new WeakMap();\n  #shouldReduceMotion;\n  #animations = /* @__PURE__ */ new Set();\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$2.content.cloneNode(true));\n    this.#$slot = shadowRoot.querySelector(\"slot\");\n    this.#$list = shadowRoot.querySelector(\"#list\");\n    this.#shouldReduceMotion = shouldReduceMotion();\n  }\n  connectedCallback() {\n    this.#$slot.addEventListener(\"slotchange\", this.#onSlotChange);\n  }\n  disconnectedCallback() {\n    this.#$slot.removeEventListener(\"slotchange\", this.#onSlotChange);\n    this.#clear();\n  }\n  get origin() {\n    return getLiteralAttribute(this, originValues, \"origin\", \"bottom-right\");\n  }\n  set origin(value) {\n    updateLiteralAttribute(this, originValues, \"origin\", value);\n  }\n  get containerRect() {\n    return getRect(this.#$list);\n  }\n  nthActionRect(nth) {\n    const item = this.#$list.children[nth]?.querySelector(\"[slot=action]\");\n    return item != null ? getRect(item) : null;\n  }\n  nthCloseRect(nth) {\n    const item = this.#$list.children[nth]?.querySelector(\"[slot=close]\");\n    return item != null ? getRect(item) : null;\n  }\n  #onAnimateAdd(item, index, height) {\n    const duration = this.#shouldReduceMotion ? 0 : DURATION_ADD;\n    const addAnim = item.animate(\n      {\n        height: [\"0\", `${height + ITEMS_GAP}px`],\n        opacity: [0, 1]\n      },\n      {\n        delay: index * duration,\n        duration,\n        iterations: 1,\n        fill: \"forwards\"\n      }\n    );\n    this.#storeAnimation(addAnim);\n  }\n  #onAnimateRemove(item, index) {\n    const rect = item.getBoundingClientRect();\n    const duration = this.#shouldReduceMotion ? 0 : DURATION_REMOVE;\n    const indexInQueue = item.hasAttribute(\"data-delete-now\") ? 0 : index;\n    const heightAnim = item.animate(\n      {\n        height: [`${rect.height}px`, \"0\"]\n      },\n      {\n        delay: duration + indexInQueue * duration,\n        duration,\n        iterations: 1,\n        fill: \"forwards\"\n      }\n    );\n    const opacityAnim = item.animate(\n      {\n        opacity: [1, 0]\n      },\n      {\n        delay: indexInQueue * duration,\n        duration,\n        iterations: 1,\n        fill: \"forwards\"\n      }\n    );\n    item.setAttribute(\"data-deleting\", \"\");\n    this.#storeAnimation(heightAnim, () =\u003e item.remove());\n    this.#storeAnimation(opacityAnim);\n  }\n  #onSlotChange = () =\u003e {\n    const slotItems = this.#$slot.assignedElements();\n    const listItems = Array.from(this.#$list.children);\n    let removeIndex = 0;\n    for (const item of listItems) {\n      if (item.hasAttribute(\"data-deleting\")) {\n        ++removeIndex;\n        continue;\n      }\n      const orig = this.#map.get(item);\n      if (orig != null \u0026\u0026 slotItems.includes(orig)) {\n        continue;\n      }\n      this.#map.delete(item);\n      if (orig != null) {\n        this.#map.delete(orig);\n      }\n      this.#unsubscribeChildren(item);\n      this.#onAnimateRemove(item, removeIndex);\n      ++removeIndex;\n    }\n    let addIndex = 0;\n    for (const item of slotItems) {\n      if (this.#map.has(item)) {\n        continue;\n      }\n      const cloned = cloneNode(item, true);\n      const rect = item.getBoundingClientRect();\n      const wrapper = document.createElement(\"div\");\n      wrapper.className = \"item-wrapper\";\n      wrapper.appendChild(cloned);\n      this.#$list.appendChild(wrapper);\n      this.#map.set(item, wrapper);\n      this.#map.set(wrapper, item);\n      this.#subscribeChildren(cloned);\n      this.#onAnimateAdd(wrapper, addIndex, rect.height);\n      addIndex++;\n    }\n  };\n  #storeAnimation(anim, cb) {\n    const onAnimEnd = () =\u003e {\n      this.#animations.delete(anim);\n      cb?.();\n      anim.removeEventListener(\"finish\", onAnimEnd);\n      anim.removeEventListener(\"remove\", onAnimEnd);\n      anim.removeEventListener(\"cancel\", onAnimEnd);\n    };\n    anim.addEventListener(\"finish\", onAnimEnd);\n    anim.addEventListener(\"remove\", onAnimEnd);\n    anim.addEventListener(\"cancel\", onAnimEnd);\n    this.#animations.add(anim);\n  }\n  #clear() {\n    const listItems = Array.from(this.#$list.children);\n    for (const item of listItems) {\n      this.#map.delete(item);\n      this.#unsubscribeChildren(item);\n      item.remove();\n    }\n    for (const anim of this.#animations) {\n      anim.cancel();\n    }\n  }\n  #subscribeChildren(item) {\n    item.querySelector(\"[slot=close]\")?.addEventListener(\"-click\", this.#onCloneCloseClick);\n    item.querySelector(\"[slot=action]\")?.addEventListener(\"-click\", this.#onCloneActionClick);\n  }\n  #unsubscribeChildren(item) {\n    item.querySelector(\"[slot=close]\")?.removeEventListener(\"-click\", this.#onCloneCloseClick);\n    item.querySelector(\"[slot=action]\")?.removeEventListener(\"-click\", this.#onCloneActionClick);\n  }\n  #onCloneCloseClick = (e) =\u003e {\n    const item = e.target.parentElement?.parentElement;\n    if (item != null) {\n      item.setAttribute(\"data-delete-now\", \"\");\n      this.#map.get(item)?.querySelector(\"[slot=close]\")?.dispatchEvent(new CustomEvent(\"-click\"));\n    }\n  };\n  #onCloneActionClick = (e) =\u003e {\n    const item = e.target.parentElement?.parentElement;\n    if (item != null) {\n      this.#map.get(item)?.querySelector(\"[slot=action]\")?.dispatchEvent(new CustomEvent(\"-click\"));\n    }\n  };\n}\ndefineCustomElement(\"sinch-toast-manager\", ToastManager);\nconst typeValues = [\"info\", \"success\", \"warn\", \"error\"];\nconst templateHTML$1 = '\u003cstyle\u003e:host{display:block}#wrapper{display:flex;flex-direction:row;align-items:center;gap:8px;width:328px;max-width:90vw;padding:16px;box-sizing:border-box;border-radius:var(--sinch-comp-toast-shape-radius);box-shadow:var(--sinch-comp-toast-shadow)}:host([type=success]) #wrapper{background-color:var(--sinch-comp-toast-color-success-default-background)}:host([type=warn]) #wrapper{background-color:var(--sinch-comp-toast-color-warning-default-background)}:host([type=error]) #wrapper{background-color:var(--sinch-comp-toast-color-error-default-background)}:host([type=info]) #wrapper{background-color:var(--sinch-comp-toast-color-info-default-background)}#text{padding:4px 0 4px 4px;flex:1;min-width:0;word-wrap:break-word;--sinch-comp-text-font:var(--sinch-comp-toast-font-body)}:host([type=success]) #text{--sinch-global-color-text:var(--sinch-comp-toast-color-success-default-text)}:host([type=warn]) #text{--sinch-global-color-text:var(--sinch-comp-toast-color-warning-default-text)}:host([type=error]) #text{--sinch-global-color-text:var(--sinch-comp-toast-color-error-default-text)}:host([type=info]) #text{--sinch-global-color-text:var(--sinch-comp-toast-color-info-default-text)}#icon{align-self:flex-start;margin:4px 0}#icon-error,#icon-info,#icon-success,#icon-warn{display:none}#icon-success{--sinch-global-color-icon:var(--sinch-comp-toast-color-success-default-icon)}#icon-warn{--sinch-global-color-icon:var(--sinch-comp-toast-color-warning-default-icon)}#icon-error{--sinch-global-color-icon:var(--sinch-comp-toast-color-error-default-icon)}#icon-info{--sinch-global-color-icon:var(--sinch-comp-toast-color-info-default-icon)}:host([type=error]) #icon-error,:host([type=info]) #icon-info,:host([type=success]) #icon-success,:host([type=warn]) #icon-warn{display:block}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003csinch-icon icons-version=\"2\" name=\"circle-info\" id=\"icon-info\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"circle-check\" id=\"icon-success\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"triangle-exclamation\" id=\"icon-warn\"\u003e\u003c/sinch-icon\u003e\u003csinch-icon icons-version=\"2\" name=\"octagon-exclamation\" id=\"icon-error\"\u003e\u003c/sinch-icon\u003e\u003csinch-rich-text id=\"text\" size=\"m\"\u003e\u003c/sinch-rich-text\u003e\u003cslot name=\"action\"\u003e\u003c/slot\u003e\u003cslot name=\"close\"\u003e\u003c/slot\u003e\u003c/div\u003e';\nconst TIMEOUT = 5e3;\nconst template$1 = document.createElement(\"template\");\ntemplate$1.innerHTML = templateHTML$1;\nclass Toast extends NectaryElement {\n  #$text;\n  #tid = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template$1.content.cloneNode(true));\n    this.#$text = shadowRoot.querySelector(\"#text\");\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"aria-atomic\", \"true\");\n    this.setAttribute(\"aria-live\", \"polite\");\n    this.addEventListener(\"-timeout\", this.#onTimeoutReactHandler);\n    this.#updateTimeout();\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"-timeout\", this.#onTimeoutReactHandler);\n    this.#clearTimeout();\n  }\n  static get observedAttributes() {\n    return [\"text\", \"persistent\"];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    switch (name) {\n      case \"text\": {\n        updateAttribute(this.#$text, name, newVal);\n        break;\n      }\n      case \"persistent\": {\n        this.#updateTimeout();\n        break;\n      }\n    }\n  }\n  get type() {\n    return getLiteralAttribute(this, typeValues, \"type\");\n  }\n  set type(value) {\n    updateLiteralAttribute(this, typeValues, \"type\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\", \"\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get persistent() {\n    return getBooleanAttribute(this, \"persistent\");\n  }\n  set persistent(isPersistent) {\n    updateBooleanAttribute(this, \"persistent\", isPersistent);\n  }\n  #updateTimeout() {\n    if (this.persistent) {\n      this.#clearTimeout();\n      return;\n    }\n    if (this.#tid === null) {\n      this.#tid = window.setTimeout(this.#onTimeout, TIMEOUT);\n    }\n  }\n  #onTimeout = () =\u003e {\n    this.dispatchEvent(new CustomEvent(\"-timeout\"));\n  };\n  #clearTimeout() {\n    if (this.#tid !== null) {\n      window.clearTimeout(this.#tid);\n      this.#tid = null;\n    }\n  }\n  #onTimeoutReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-timeout\")?.(e);\n    getReactEventHandler(this, \"onTimeout\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-toast\", Toast);\nconst templateHTML = '\u003cstyle\u003e:host{display:inline-block;vertical-align:middle;outline:0}#wrapper{position:relative;display:flex;flex-direction:row;gap:8px;width:100%;height:var(--sinch-local-size);cursor:pointer;user-select:none;--sinch-local-size:20px}:host([small]) #wrapper{--sinch-local-size:16px}:host([disabled]) #wrapper{cursor:initial}#knob-container{position:relative;width:40px;height:var(--sinch-local-size);border-radius:calc(var(--sinch-local-size) * .5);background-color:var(--sinch-comp-toggle-color-default-background-initial);pointer-events:none;transition:background-color .15s ease-in-out}:host([small]) #knob-container{width:32px;height:var(--sinch-local-size)}:host([checked]) #knob-container{background-color:var(--sinch-comp-toggle-color-checked-background-initial)}:host([disabled]) #knob-container{background-color:var(--sinch-comp-toggle-color-disabled-background-initial)}:host([checked][disabled]) #knob-container{background-color:var(--sinch-comp-toggle-color-checked-disabled-background-initial)}#knob{position:relative;width:16px;height:16px;left:2px;top:2px;border-radius:50%;background-color:var(--sinch-comp-toggle-color-default-knob-background-initial);box-shadow:var(--sinch-comp-toggle-shadow-knob-default);transform:translateX(0);transition:transform .15s ease-in-out;will-change:transform}:host([small]) #knob{width:12px;height:12px}:host([disabled]) #knob-container\u003e#knob{box-shadow:var(--sinch-comp-toggle-shadow-knob-disabled)}:host([checked]) #knob-container\u003e#knob{transform:translateX(20px)}:host([small][checked]) #knob-container\u003e#knob{transform:translateX(16px)}#knob::after,#knob::before{font:var(--sinch-comp-toggle-font-size-m-inside-text);color:var(--sinch-comp-toggle-color-default-text-inside-initial);text-transform:uppercase;position:absolute;top:0;padding:0 1px;opacity:0;transition:opacity .15s ease-in-out;user-select:none}#knob::before{content:\"on\";right:100%}#knob::after{content:\"off\";left:100%}:host([labeled]:not([small]):not([checked])) #knob::after{opacity:1}:host([labeled]:not([small])[checked]) #knob::before{opacity:1}@media (prefers-reduced-motion){#knob,#knob-container,#knob::after,#knob::before{transition:none}}#outline{display:none;position:absolute;left:-3px;top:-3px;right:-3px;bottom:-3px;border:2px solid var(--sinch-comp-toggle-color-default-outline-focus);border-radius:17px;pointer-events:none}:host(:focus-visible) #outline{display:block}#label{flex:1;min-width:0;align-self:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font:var(--sinch-comp-toggle-font-size-m-label);color:var(--sinch-comp-toggle-color-default-label-initial)}#label:empty{display:none}:host([small]) #label{font:var(--sinch-comp-toggle-font-size-s-label)}:host([disabled]) #label{color:var(--sinch-comp-toggle-color-disabled-label-initial)}\u003c/style\u003e\u003cdiv id=\"wrapper\"\u003e\u003cdiv id=\"knob-container\"\u003e\u003cdiv id=\"outline\"\u003e\u003c/div\u003e\u003cdiv id=\"knob\"\u003e\u003c/div\u003e\u003c/div\u003e\u003cspan id=\"label\"\u003e\u003c/span\u003e\u003c/div\u003e';\nconst template = document.createElement(\"template\");\ntemplate.innerHTML = templateHTML;\nclass Toggle extends NectaryElement {\n  #$label;\n  #controller = null;\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow();\n    shadowRoot.appendChild(template.content.cloneNode(true));\n    this.#$label = shadowRoot.querySelector(\"#label\");\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const options = { signal };\n    this.setAttribute(\"role\", \"checkbox\");\n    this.addEventListener(\"click\", this.#onClick, options);\n    this.addEventListener(\"keydown\", this.#onKeydown, options);\n    this.addEventListener(\"focus\", this.#onFocus, options);\n    this.addEventListener(\"blur\", this.#onBlur, options);\n    this.addEventListener(\"-change\", this.#onChangeReactHandler, options);\n    this.addEventListener(\"-focus\", this.#onFocusReactHandler, options);\n    this.addEventListener(\"-blur\", this.#onBlurReactHandler, options);\n    this.#updateTabIndex();\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#controller = null;\n  }\n  static get observedAttributes() {\n    return [\n      \"checked\",\n      \"disabled\",\n      \"text\",\n      \"labeled\",\n      \"small\"\n    ];\n  }\n  attributeChangedCallback(name, oldVal, newVal) {\n    if (isAttrEqual(oldVal, newVal)) {\n      return;\n    }\n    switch (name) {\n      case \"text\": {\n        this.#$label.textContent = newVal;\n        break;\n      }\n      case \"checked\": {\n        const isChecked = isAttrTrue(newVal);\n        updateExplicitBooleanAttribute(this, \"aria-checked\", isChecked);\n        updateBooleanAttribute(this, name, isChecked);\n        break;\n      }\n      case \"disabled\": {\n        const isDisabled = isAttrTrue(newVal);\n        this.#updateTabIndex();\n        updateExplicitBooleanAttribute(this, \"aria-disabled\", isDisabled);\n        updateBooleanAttribute(this, name, isDisabled);\n        break;\n      }\n      case \"small\":\n      case \"labeled\": {\n        updateBooleanAttribute(this, name, isAttrTrue(newVal));\n        break;\n      }\n    }\n  }\n  set checked(isChecked) {\n    updateBooleanAttribute(this, \"checked\", isChecked);\n  }\n  get checked() {\n    return getBooleanAttribute(this, \"checked\");\n  }\n  set small(isSmall) {\n    updateBooleanAttribute(this, \"small\", isSmall);\n  }\n  get small() {\n    return getBooleanAttribute(this, \"small\");\n  }\n  set labeled(isLabeled) {\n    updateBooleanAttribute(this, \"labeled\", isLabeled);\n  }\n  get labeled() {\n    return getBooleanAttribute(this, \"labeled\");\n  }\n  set disabled(isDisabled) {\n    updateBooleanAttribute(this, \"disabled\", isDisabled);\n  }\n  get disabled() {\n    return getBooleanAttribute(this, \"disabled\");\n  }\n  set text(value) {\n    updateAttribute(this, \"text\", value);\n  }\n  get text() {\n    return getAttribute(this, \"text\");\n  }\n  get focusable() {\n    return true;\n  }\n  #onClick = () =\u003e {\n    if (this.disabled) {\n      return;\n    }\n    this.dispatchEvent(\n      new CustomEvent(\"-change\", { detail: !this.checked })\n    );\n  };\n  #onKeydown = (e) =\u003e {\n    switch (e.code) {\n      case \"Space\":\n      case \"Enter\": {\n        e.preventDefault();\n        this.click();\n      }\n    }\n  };\n  #updateTabIndex() {\n    this.tabIndex = this.disabled ? -1 : 0;\n  }\n  #onFocus = () =\u003e {\n    this.dispatchEvent(\n      new CustomEvent(\"-focus\")\n    );\n  };\n  #onBlur = () =\u003e {\n    this.dispatchEvent(\n      new CustomEvent(\"-blur\")\n    );\n  };\n  #onChangeReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-change\")?.(e);\n    getReactEventHandler(this, \"onChange\")?.(e);\n  };\n  #onFocusReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-focus\")?.(e);\n  };\n  #onBlurReactHandler = (e) =\u003e {\n    getReactEventHandler(this, \"on-blur\")?.(e);\n  };\n}\ndefineCustomElement(\"sinch-toggle\", Toggle);\nexport {\n  Accordion,\n  AccordionItem,\n  ActionMenu,\n  ActionMenuOption,\n  Alert,\n  Avatar,\n  Badge,\n  Button,\n  ButtonGroup,\n  ButtonGroupItem,\n  CardContainer,\n  CardV2,\n  CardV2Title,\n  Checkbox,\n  Chip,\n  CodeTag,\n  ColorMenu,\n  ColorMenuOption,\n  ColorSwatch,\n  DatePicker,\n  Dialog,\n  Emoji,\n  EmojiPicker,\n  Field,\n  FileDrop,\n  FilePicker,\n  FileStatus,\n  Flag,\n  Grid,\n  GridItem,\n  HelpTooltip,\n  Icon,\n  InlineAlert,\n  Input,\n  Link,\n  List,\n  ListItem,\n  Pagination,\n  PersistentOverlay,\n  Pop,\n  Popover,\n  Progress,\n  ProgressStepper,\n  ProgressStepperItem,\n  Radio,\n  RadioOption,\n  RichText,\n  RichTextarea,\n  SegmentCollapse,\n  SegmentedControl,\n  SegmentedControlOption,\n  SegmentedIconControl,\n  SegmentedIconControlOption,\n  SelectButton,\n  SelectMenu,\n  SelectMenuOption,\n  Skeleton,\n  SkeletonItem,\n  Spinner,\n  StopEvents,\n  Table,\n  TableBody,\n  TableCell,\n  TableHead,\n  TableHeadCell,\n  TableRow,\n  Tabs,\n  TabsIconOption,\n  TabsOption,\n  Tag,\n  Text,\n  Textarea,\n  TimePicker,\n  Title,\n  Toast,\n  ToastManager,\n  Toggle,\n  Tooltip\n};\n"],"version":3}
