Sid Gifari File Manager
🏠 Root
/
home
/
genremedia08
/
musicjukebox.overlookedtracks.com
/
public
/
build
/
assets
/
Editing: play-arrow-filled-8e87b0ae.js.map
{"version":3,"file":"play-arrow-filled-8e87b0ae.js","sources":["../../../common/resources/client/icons/material/KeyboardArrowLeft.tsx","../../../common/resources/client/icons/material/KeyboardArrowRight.tsx","../../../common/resources/client/utils/hooks/is-tablet-media-query.ts","../../../common/resources/client/ui/images/avatar.tsx","../../../common/resources/client/utils/keybinds/is-ctrl-key-pressed.ts","../../../common/resources/client/ui/tables/navigate-grid.ts","../../../common/resources/client/ui/tables/table-context.ts","../../../common/resources/client/ui/tables/style/use-table-cell-style.ts","../../../common/resources/client/ui/tables/table-cell.tsx","../../../common/resources/client/ui/interactions/use-pointer-events.ts","../../../common/resources/client/utils/keybinds/is-ctrl-or-shift-pressed.ts","../../../common/resources/client/ui/tables/style/use-table-row-style.ts","../../../common/resources/client/ui/tables/table-row.tsx","../../../common/resources/client/ui/tables/checkbox-column-config.tsx","../../../common/resources/client/icons/material/ArrowDownward.tsx","../../../common/resources/client/ui/tables/header-cell.tsx","../../../common/resources/client/ui/tables/table-header-row.tsx","../../../common/resources/client/ui/tables/table.tsx","../../../common/resources/client/ui/forms/input-field/chip-field/chip-list.tsx","../../../common/resources/client/i18n/formatted-number.tsx","../../../common/resources/client/icons/material/Add.tsx","../../../common/resources/client/ui/forms/toggle/switch.tsx","../../../node_modules/@internationalized/string/dist/import.mjs","../../../node_modules/@react-stately/color/dist/import.mjs","../../../common/resources/client/ui/interactions/dnd/drag-state.ts","../../../common/resources/client/ui/interactions/interactable-event.ts","../../../common/resources/client/ui/interactions/active-interaction.ts","../../../common/resources/client/ui/interactions/utils/dom-rect-to-obj.ts","../../../common/resources/client/ui/interactions/dnd/update-rects.ts","../../../common/resources/client/ui/interactions/dnd/use-draggable.ts","../../../common/resources/client/ui/interactions/dnd/read-files-from-data-transfer.ts","../../../common/resources/client/utils/array/async-iterable-to-array.ts","../../../common/resources/client/ui/interactions/dnd/use-droppable.ts","../../../common/resources/client/utils/array/move-item-in-array.ts","../../../common/resources/client/utils/array/move-item-in-new-array.ts","../../../common/resources/client/ui/interactions/dnd/use-sortable.ts","../../../node_modules/dot-object/index.js","../../../common/resources/client/ui/themes/utils/theme-value-to-hex.ts","../../../common/resources/client/ui/tabs/tabs-context.tsx","../../../common/resources/client/ui/tabs/tab-line.tsx","../../../common/resources/client/ui/tabs/tab-list.tsx","../../../common/resources/client/ui/tabs/tab.tsx","../../../common/resources/client/ui/tabs/tab-panels.tsx","../../../common/resources/client/ui/tabs/tabs.tsx","../../../common/resources/client/ui/interactions/dnd/drag-preview.tsx","../../../resources/client/web-player/artists/artist.ts","../../../resources/client/web-player/albums/album.ts","../../../resources/client/web-player/genres/genre.ts","../../../resources/client/web-player/albums/album-image/default-album-image.png","../../../resources/client/web-player/tracks/track-image/track-default-image.png","../../../resources/client/web-player/tracks/track-image/track-image.tsx","../../../common/resources/client/i18n/formatted-duration.tsx","../../../resources/client/web-player/tracks/track-link.tsx","../../../resources/client/web-player/tracks/waveform/generate-waveform-data.ts","../../../resources/client/web-player/albums/assign-album-to-tracks.ts","../../../resources/client/web-player/tracks/requests/use-track.ts","../../../resources/client/web-player/tracks/hooks/use-track-permissions.ts","../../../resources/client/web-player/albums/album-image/album-image.tsx","../../../resources/client/web-player/albums/album-link.tsx","../../../resources/client/web-player/albums/requests/use-album.ts","../../../resources/client/web-player/albums/use-album-permissions.ts","../../../resources/client/web-player/backstage/use-primary-artist-for-current-user.ts","../../../resources/client/web-player/artists/artist-links.tsx","../../../common/resources/client/utils/urls/share-link-socially.ts","../../../common/resources/client/icons/social/tumblr.tsx","../../../common/resources/client/icons/material/Share.tsx","../../../resources/client/web-player/sharing/share-media-buttons.tsx","../../../common/resources/client/ui/images/user-avatar.tsx","../../../common/resources/client/utils/array/sort-array-of-objects.ts","../../../common/resources/client/ui/tables/use-sortable-table-data.ts","../../../resources/client/web-player/albums/requests/use-delete-album.ts","../../../resources/client/admin/artist-datatable-page/artist-form/profile-links-form.tsx","../../../resources/client/web-player/artists/requests/use-artist.ts","../../../resources/client/web-player/artists/use-artist-permissions.ts","../../../resources/client/web-player/tracks/play-arrow-filled.tsx"],"sourcesContent":["import {createSvgIcon} from '../create-svg-icon';\n\nexport const KeyboardArrowLeftIcon = createSvgIcon(\n <path d=\"M15.41 16.59 10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\" />\n, 'KeyboardArrowLeftOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const KeyboardArrowRightIcon = createSvgIcon(\n <path d=\"M8.59 16.59 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" />\n, 'KeyboardArrowRightOutlined');\n","import {useMediaQuery, UseMediaQueryOptions} from './use-media-query';\n\nexport function useIsTabletMediaQuery(options?: UseMediaQueryOptions) {\n return useMediaQuery('(max-width: 1024px)', options);\n}\n","import clsx from 'clsx';\nimport React, {\n ComponentProps,\n ComponentPropsWithoutRef,\n forwardRef,\n} from 'react';\nimport {Link} from 'react-router-dom';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {AvatarPlaceholderIcon} from '@common/auth/ui/account-settings/avatar/avatar-placeholder-icon';\n\ntype Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface AvatarProps extends ComponentPropsWithoutRef<any> {\n className?: string;\n src?: string;\n label?: string;\n circle?: boolean;\n size?: Size;\n link?: string;\n fallback?: 'initials' | 'generic';\n}\nexport const Avatar = forwardRef<HTMLImageElement, AvatarProps>(\n (\n {\n className,\n circle,\n size = 'md',\n src,\n link,\n label,\n fallback = 'generic',\n ...domProps\n },\n ref\n ) => {\n let renderedAvatar = src ? (\n <img\n ref={ref}\n src={src}\n alt={label}\n className=\"block object-cover w-full h-full\"\n />\n ) : (\n <div className=\"bg-alt dark:bg-chip w-full h-full\">\n <AvatarPlaceholderIcon\n viewBox=\"0 0 48 48\"\n className=\"w-full h-full text-muted\"\n />\n </div>\n );\n\n if (label) {\n renderedAvatar = <Tooltip label={label}>{renderedAvatar}</Tooltip>;\n }\n\n const wrapperProps: ComponentProps<any> = {\n ...domProps,\n className: clsx(\n className,\n 'relative block overflow-hidden select-none flex-shrink-0',\n getSizeClassName(size),\n circle ? 'rounded-full' : 'rounded'\n ),\n };\n\n return link ? (\n <Link {...wrapperProps} to={link}>\n {renderedAvatar}\n </Link>\n ) : (\n <div {...wrapperProps}>{renderedAvatar}</div>\n );\n }\n);\n\nfunction getSizeClassName(size: Size) {\n switch (size) {\n case 'xs':\n return 'w-18 h-18';\n case 'sm':\n return 'w-24 h-24';\n case 'md':\n return 'w-32 h-32';\n case 'lg':\n return 'w-40 h-40';\n case 'xl':\n return 'w-60 h-60';\n // allow overriding with custom classNames\n default:\n return size;\n }\n}\n","import {isMac} from '@react-aria/utils';\n\ninterface Event {\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n}\n\nexport function isCtrlKeyPressed(e: Event) {\n if (isMac()) {\n return e.metaKey;\n }\n\n return e.ctrlKey;\n}\n","import React, {KeyboardEventHandler} from 'react';\nimport {getFocusableTreeWalker} from '@react-aria/focus';\nimport {focusWithoutScrolling} from '@react-aria/utils';\nimport {isCtrlKeyPressed} from '../../utils/keybinds/is-ctrl-key-pressed';\n\ninterface Props {\n cellCount: number;\n rowCount: number;\n}\nexport function useGridNavigation(props: Props) {\n const {cellCount, rowCount} = props;\n const onKeyDown: KeyboardEventHandler<HTMLElement> = e => {\n switch (e.key) {\n case 'ArrowLeft':\n focusSiblingCell(e, {cell: {op: 'decrement'}}, props);\n break;\n case 'ArrowRight':\n focusSiblingCell(e, {cell: {op: 'increment'}}, props);\n break;\n case 'ArrowUp':\n focusSiblingCell(e, {row: {op: 'decrement'}}, props);\n break;\n case 'ArrowDown':\n focusSiblingCell(e, {row: {op: 'increment'}}, props);\n break;\n case 'PageUp':\n focusSiblingCell(e, {row: {op: 'decrement', count: 5}}, props);\n break;\n case 'PageDown':\n focusSiblingCell(e, {row: {op: 'increment', count: 5}}, props);\n break;\n case 'Tab':\n focusFirstElementAfterGrid(e);\n break;\n case 'Home':\n if (isCtrlKeyPressed(e)) {\n // move to first cell in first row\n focusSiblingCell(\n e,\n {\n row: {op: 'decrement', count: rowCount},\n cell: {op: 'decrement', count: cellCount},\n },\n props\n );\n } else {\n // move to first cell in current row\n focusSiblingCell(\n e,\n {cell: {op: 'decrement', count: cellCount}},\n props\n );\n }\n break;\n case 'End':\n if (isCtrlKeyPressed(e)) {\n // move to last cell in last row\n focusSiblingCell(\n e,\n {\n row: {op: 'increment', count: rowCount},\n cell: {op: 'increment', count: cellCount},\n },\n props\n );\n } else {\n // move to last cell in current row\n focusSiblingCell(\n e,\n {cell: {op: 'increment', count: cellCount}},\n props\n );\n }\n break;\n }\n };\n\n return {onKeyDown};\n}\n\ninterface Operations {\n cell?: {\n op: 'increment' | 'decrement';\n count?: number;\n };\n row?: {\n op: 'increment' | 'decrement';\n count?: number;\n };\n}\nfunction focusSiblingCell(\n e: React.KeyboardEvent,\n operations: Operations,\n {cellCount, rowCount}: Props\n) {\n if (document.activeElement?.tagName === 'input') return;\n e.preventDefault();\n const grid = e.currentTarget as HTMLElement;\n\n // focused element might be inside the cell and not the cell itself\n const currentCell = (e.target as HTMLElement).closest('[aria-colindex]');\n if (!currentCell || !grid) return;\n\n const row = currentCell.closest('[aria-rowindex]');\n if (!row) return;\n\n // grab row and cell index from aria attributes\n let rowIndex = parseInt(row.getAttribute('aria-rowindex') as string);\n let cellIndex = parseInt(currentCell.getAttribute('aria-colindex') as string);\n if (Number.isNaN(rowIndex) || Number.isNaN(cellIndex)) return;\n\n // adjust row index for next cell selector\n const rowOpCount = operations.row?.count ?? 1;\n if (operations.row?.op === 'increment') {\n rowIndex = Math.min(rowCount, rowIndex + rowOpCount);\n } else if (operations.row?.op === 'decrement') {\n rowIndex = Math.max(1, rowIndex - rowOpCount);\n }\n\n // adjust cell index for next cell selector\n const cellOpCount = operations.cell?.count ?? 1;\n if (operations.cell?.op === 'increment') {\n cellIndex = Math.min(cellCount, cellIndex + cellOpCount);\n } else if (operations.cell?.op === 'decrement') {\n cellIndex = Math.max(1, cellIndex - cellOpCount);\n }\n\n // find the next cell that should be focused\n const nextCell = grid.querySelector(\n `[aria-rowindex=\"${rowIndex}\"] [aria-colindex=\"${cellIndex}\"]`\n ) as HTMLElement | undefined;\n if (!nextCell) return;\n\n // find any focusable elements inside the cell\n const walker = getFocusableTreeWalker(nextCell);\n const nextFocusableElement = (walker.nextNode() || nextCell) as HTMLElement;\n\n // adjust tab index on current and next cells and focus either next cell or first focusable element inside that cell\n currentCell.setAttribute('tabindex', '-1');\n nextFocusableElement.setAttribute('tabindex', '0');\n nextFocusableElement.focus();\n}\n\n// grid is treated as a single tab stop, focus first element after grid, instead of moving focus withing grid on tab press\nfunction focusFirstElementAfterGrid(e: React.KeyboardEvent) {\n const grid = e.currentTarget as HTMLElement;\n if (e.shiftKey) {\n grid.focus();\n } else {\n const walker = getFocusableTreeWalker(grid, {tabbable: true});\n let next: HTMLElement;\n let last: HTMLElement;\n do {\n last = walker.lastChild() as HTMLElement;\n if (last) {\n next = last;\n }\n } while (last);\n\n // @ts-ignore\n if (next && !next.contains(document.activeElement)) {\n focusWithoutScrolling(next);\n }\n }\n}\n","import {createContext} from 'react';\nimport type {SortDescriptor} from './types/sort-descriptor';\nimport type {TableProps} from './table';\nimport type {ColumnConfig} from '../../datatable/column-config';\nimport type {TableDataItem} from './types/table-data-item';\n\nexport type TableSelectionStyle = 'checkbox' | 'highlight';\n\nexport interface TableContextValue<T extends TableDataItem = TableDataItem> {\n isCollapsedMode: boolean;\n selectedRows: (string | number)[];\n onSelectionChange: (keys: (string | number)[]) => void;\n sortDescriptor?: SortDescriptor;\n onSortChange?: (descriptor: SortDescriptor) => any;\n enableSelection?: boolean;\n enableSorting?: boolean;\n selectionStyle: TableSelectionStyle;\n data: T[];\n meta?: any;\n columns: ColumnConfig<T>[];\n toggleRow: (item: T) => void;\n selectRow: (item: T | null, merge?: boolean) => void;\n hideBorder: boolean;\n hideHeaderRow: boolean;\n collapseOnMobile: boolean;\n onAction: TableProps<T>['onAction'];\n selectRowOnContextMenu: TableProps<T>['selectRowOnContextMenu'];\n cellHeight: string | undefined;\n}\nexport const TableContext = createContext<TableContextValue>(null!);\n","import clsx from 'clsx';\nimport {useContext} from 'react';\nimport {TableContext} from '@common/ui/tables/table-context';\n\ninterface Props {\n index: number;\n isHeader: boolean;\n}\nexport function useTableCellStyle({index, isHeader}: Props) {\n const {columns, cellHeight = 'h-46'} = useContext(TableContext);\n const column = columns[index];\n\n const userPadding = column?.padding;\n\n let justify = 'justify-start';\n if (column?.align === 'center') {\n justify = 'justify-center';\n } else if (column?.align === 'end') {\n justify = 'justify-end';\n }\n\n return clsx(\n 'flex items-center overflow-hidden whitespace-nowrap overflow-ellipsis outline-none focus-visible:outline focus-visible:outline-offset-2',\n isHeader ? 'h-46' : cellHeight,\n column?.width ?? 'flex-1',\n column?.maxWidth,\n column?.minWidth,\n justify,\n userPadding,\n column?.className\n );\n}\n","import {useContext, useMemo} from 'react';\nimport {TableContext} from './table-context';\nimport {TableDataItem} from './types/table-data-item';\nimport {RowContext} from '@common/datatable/column-config';\nimport {useTableCellStyle} from '@common/ui/tables/style/use-table-cell-style';\n\ninterface TableCellProps {\n rowIsHovered: boolean;\n rowIndex: number;\n index: number;\n item: TableDataItem;\n id?: string;\n}\nexport function TableCell({\n rowIndex,\n rowIsHovered,\n index,\n item,\n id,\n}: TableCellProps) {\n const {columns} = useContext(TableContext);\n const column = columns[index];\n\n const rowContext: RowContext = useMemo(() => {\n return {\n index: rowIndex,\n isHovered: rowIsHovered,\n isPlaceholder: item.isPlaceholder,\n };\n }, [rowIndex, rowIsHovered, item.isPlaceholder]);\n\n const style = useTableCellStyle({\n index: index,\n isHeader: false,\n });\n\n return (\n <div\n tabIndex={-1}\n role=\"gridcell\"\n aria-colindex={index + 1}\n id={id}\n className={style}\n >\n <div className=\"overflow-x-hidden overflow-ellipsis min-w-0 w-full\">\n {column.body(item, rowContext)}\n </div>\n </div>\n );\n}\n","import React, {HTMLAttributes, useRef} from 'react';\nimport {createEventHandler} from '../../utils/dom/create-event-handler';\nimport {useGlobalListeners} from '@react-aria/utils';\n\ninterface PointerState {\n lastPosition: {x: number; y: number};\n id?: number;\n started: boolean;\n el?: HTMLElement;\n originalTouchAction?: string;\n originalUserSelect?: string;\n longPressTimer?: any;\n longPressTriggered?: boolean;\n}\n\ninterface UsePointerEventsReturn {\n domProps: HTMLAttributes<HTMLElement>;\n}\n\nexport interface UsePointerEventsProps {\n onMoveStart?: (e: PointerEvent, el: HTMLElement) => false | void;\n onMove?: (e: PointerEvent, deltaX: number, deltaY: number) => void;\n onMoveEnd?: (e: PointerEvent) => void;\n onPointerDown?: (e: React.PointerEvent) => void | false;\n onPointerUp?: (e: PointerEvent, el: HTMLElement) => void;\n onPress?: (e: PointerEvent, el: HTMLElement) => void;\n onLongPress?: (e: PointerEvent | React.PointerEvent, el: HTMLElement) => void;\n preventDefault?: boolean;\n stopPropagation?: boolean;\n minimumMovement?: number;\n}\nexport function usePointerEvents({\n onMoveStart,\n onMove,\n onMoveEnd,\n minimumMovement = 0,\n preventDefault,\n stopPropagation = true,\n onPress,\n onLongPress,\n ...props\n}: UsePointerEventsProps): UsePointerEventsReturn {\n const stateRef = useRef<PointerState>({\n lastPosition: {x: 0, y: 0},\n started: false,\n longPressTriggered: false,\n });\n const state = stateRef.current;\n\n const {addGlobalListener, removeGlobalListener} = useGlobalListeners();\n\n const start = (e: PointerEvent) => {\n if (!state.el) return;\n const result = onMoveStart?.(e, state.el);\n\n // allow user to cancel interaction\n if (result === false) return;\n\n state.originalTouchAction = state.el.style.touchAction;\n state.el.style.touchAction = 'none';\n state.originalUserSelect = document.documentElement.style.userSelect;\n document.documentElement.style.userSelect = 'none';\n state.started = true;\n };\n\n const onPointerDown = (e: React.PointerEvent) => {\n if (e.button === 0 && state.id == null) {\n state.started = false;\n\n const result = props.onPointerDown?.(e);\n if (result === false) return;\n\n if (stopPropagation) {\n e.stopPropagation();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n state.id = e.pointerId;\n state.el = e.currentTarget as HTMLElement;\n state.lastPosition = {x: e.clientX, y: e.clientY};\n\n // use global listeners, so we don't have to capture pointer,\n // which would prevent click events on child nodes\n\n if (onLongPress) {\n state.longPressTimer = setTimeout(() => {\n onLongPress(e, state.el!);\n state.longPressTriggered = true;\n }, 400);\n }\n\n if (onMoveStart || onMove) {\n addGlobalListener(window, 'pointermove', onPointerMove, false);\n }\n addGlobalListener(window, 'pointerup', onPointerUp, false);\n addGlobalListener(window, 'pointercancel', onPointerUp, false);\n }\n };\n\n const onPointerMove = (e: PointerEvent) => {\n if (e.pointerId === state.id) {\n const deltaX = e.clientX - state.lastPosition.x;\n const deltaY = e.clientY - state.lastPosition.y;\n\n if (\n (Math.abs(deltaX) >= minimumMovement ||\n Math.abs(deltaY) >= minimumMovement) &&\n !state.started\n ) {\n start(e);\n }\n\n if (state.started) {\n onMove?.(e, deltaX, deltaY);\n state.lastPosition = {x: e.clientX, y: e.clientY};\n }\n }\n };\n\n const onPointerUp = (e: PointerEvent) => {\n if (e.pointerId === state.id) {\n // cancel long press timer, if exists\n if (state.longPressTimer) {\n clearTimeout(state.longPressTimer);\n }\n\n const longPressTriggered = state.longPressTriggered;\n state.longPressTriggered = false;\n\n // only call onMoveEnd if we actually started moving\n if (state.started) {\n onMoveEnd?.(e);\n }\n\n if (state.el) {\n // handle press only if event was not cancelled (via touch scroll on mobile for example)\n if (e.type !== 'pointercancel') {\n props.onPointerUp?.(e, state.el);\n\n // only call onPress if pointer did not leave onPointerDown element\n if (e.target && state.el.contains(e.target as HTMLElement)) {\n // trigger either onPress or onLongPress\n if (longPressTriggered) {\n onLongPress?.(e, state.el);\n } else {\n onPress?.(e, state.el);\n }\n }\n }\n\n document.documentElement.style.userSelect =\n state.originalUserSelect || '';\n state.el.style.touchAction = state.originalTouchAction || '';\n }\n state.id = undefined;\n state.started = false;\n removeGlobalListener(window, 'pointermove', onPointerMove, false);\n removeGlobalListener(window, 'pointerup', onPointerUp, false);\n removeGlobalListener(window, 'pointercancel', onPointerUp, false);\n }\n };\n\n return {\n domProps: {\n onPointerDown: createEventHandler(onPointerDown),\n },\n };\n}\n","import {isCtrlKeyPressed} from './is-ctrl-key-pressed';\n\ninterface Event {\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n}\n\nexport function isCtrlOrShiftPressed(e: Event) {\n return e.shiftKey || isCtrlKeyPressed(e);\n}\n","import clsx from 'clsx';\nimport {useContext} from 'react';\nimport {TableContext} from '@common/ui/tables/table-context';\nimport {useIsDarkMode} from '@common/ui/themes/use-is-dark-mode';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\n\ninterface Props {\n index: number;\n isSelected: boolean;\n isHeader?: boolean;\n}\nexport function useTableRowStyle({index, isSelected, isHeader}: Props) {\n const isDarkMode = useIsDarkMode();\n const isMobile = useIsMobileMediaQuery();\n const {hideBorder, enableSelection, collapseOnMobile} =\n useContext(TableContext);\n const isFirst = index === 0;\n return clsx(\n 'flex gap-x-16 break-inside-avoid outline-none border border-transparent',\n isMobile && collapseOnMobile && hideBorder\n ? 'mb-8 pl-8 pr-0 rounded'\n : 'px-16',\n !hideBorder && 'border-b-divider',\n !hideBorder && isFirst && 'border-t-divider',\n isSelected &&\n !isDarkMode &&\n 'bg-primary/selected hover:bg-primary/focus focus-visible:bg-primary/focus',\n isSelected &&\n isDarkMode &&\n 'bg-selected hover:bg-focus focus-visible:bg-focus',\n !isSelected &&\n !isHeader &&\n enableSelection &&\n 'focus-visible:bg-focus hover:bg-hover'\n );\n}\n","import React, {\n ComponentPropsWithoutRef,\n JSXElementConstructor,\n KeyboardEventHandler,\n MouseEventHandler,\n useContext,\n useRef,\n useState,\n} from 'react';\nimport {TableContext} from './table-context';\nimport {TableCell} from './table-cell';\nimport {TableDataItem} from './types/table-data-item';\nimport {createEventHandler} from '../../utils/dom/create-event-handler';\nimport {usePointerEvents} from '../interactions/use-pointer-events';\nimport {isCtrlOrShiftPressed} from '../../utils/keybinds/is-ctrl-or-shift-pressed';\nimport {useTableRowStyle} from '@common/ui/tables/style/use-table-row-style';\nimport clsx from 'clsx';\n\nconst interactableElements = ['button', 'a', 'input', 'select', 'textarea'];\n\nexport interface RowElementProps<T = TableDataItem>\n extends ComponentPropsWithoutRef<'tr'> {\n item: T & {isPlaceholder?: boolean};\n}\n\ninterface TableRowProps {\n item: TableDataItem;\n index: number;\n renderAs?: JSXElementConstructor<RowElementProps>;\n className?: string;\n style?: React.CSSProperties;\n}\nexport function TableRow({\n item,\n index,\n renderAs,\n className,\n style,\n}: TableRowProps) {\n const {\n selectedRows,\n columns,\n toggleRow,\n selectRow,\n onAction,\n selectRowOnContextMenu,\n enableSelection,\n selectionStyle,\n hideHeaderRow,\n } = useContext(TableContext);\n\n const isTouchDevice = useRef(false);\n const isSelected = selectedRows.includes(item.id);\n const [isHovered, setIsHovered] = useState(false);\n\n const clickedOnInteractable = (e: React.MouseEvent | PointerEvent) => {\n return (e.target as HTMLElement).closest(interactableElements.join(','));\n };\n\n const doubleClickHandler: MouseEventHandler<HTMLDivElement> = e => {\n if (\n selectionStyle === 'highlight' &&\n onAction &&\n !isTouchDevice.current &&\n !clickedOnInteractable(e)\n ) {\n e.preventDefault();\n e.stopPropagation();\n onAction(item, index);\n }\n };\n\n const anyRowsSelected = !!selectedRows.length;\n\n const handleRowTap = (e: PointerEvent) => {\n if (clickedOnInteractable(e)) return;\n if (selectionStyle === 'checkbox') {\n if (enableSelection && (anyRowsSelected || !onAction)) {\n toggleRow(item);\n } else if (onAction) {\n onAction(item, index);\n }\n } else if (selectionStyle === 'highlight') {\n if (isTouchDevice.current) {\n if (enableSelection && anyRowsSelected) {\n toggleRow(item);\n } else {\n onAction?.(item, index);\n }\n } else if (enableSelection) {\n selectRow(item, isCtrlOrShiftPressed(e));\n }\n }\n };\n\n const {domProps} = usePointerEvents({\n onPointerDown: e => {\n isTouchDevice.current = e.pointerType === 'touch';\n },\n onPress: handleRowTap,\n onLongPress: enableSelection\n ? () => {\n if (isTouchDevice.current) {\n toggleRow(item);\n }\n }\n : undefined,\n });\n\n const keyboardHandler: KeyboardEventHandler = e => {\n if (enableSelection && e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n if (selectionStyle === 'checkbox') {\n toggleRow(item);\n } else {\n selectRow(item);\n }\n } else if (e.key === 'Enter' && !selectedRows.length && onAction) {\n e.preventDefault();\n e.stopPropagation();\n onAction(item, index);\n }\n };\n\n const contextMenuHandler: MouseEventHandler = e => {\n if (selectRowOnContextMenu && enableSelection) {\n if (!selectedRows.includes(item.id)) {\n selectRow(item);\n }\n }\n // prevent context menu on mobile\n if (isTouchDevice.current) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const styleClassName = useTableRowStyle({index, isSelected});\n\n const RowElement = renderAs || 'div';\n return (\n <RowElement\n role=\"row\"\n aria-rowindex={index + 1 + (hideHeaderRow ? 0 : 1)}\n aria-selected={isSelected}\n tabIndex={-1}\n className={clsx(className, styleClassName)}\n item={RowElement === 'div' ? (undefined as any) : item}\n onDoubleClick={createEventHandler(doubleClickHandler)}\n onKeyDown={createEventHandler(keyboardHandler)}\n onContextMenu={createEventHandler(contextMenuHandler)}\n onPointerEnter={createEventHandler(() => setIsHovered(true))}\n onPointerLeave={createEventHandler(() => setIsHovered(false))}\n style={style}\n {...domProps}\n >\n {columns.map((column, cellIndex) => (\n <TableCell\n rowIndex={index}\n rowIsHovered={isHovered}\n index={cellIndex}\n item={item}\n key={`${item.id}-${column.key}`}\n />\n ))}\n </RowElement>\n );\n}\n","import {ColumnConfig} from '@common/datatable/column-config';\nimport {TableDataItem} from '@common/ui/tables/types/table-data-item';\nimport {Skeleton} from '@common/ui/skeleton/skeleton';\nimport React, {useContext} from 'react';\nimport {Checkbox} from '@common/ui/forms/toggle/checkbox';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {TableContext} from '@common/ui/tables/table-context';\n\nexport const CheckboxColumnConfig: ColumnConfig<TableDataItem> = {\n key: 'checkbox',\n header: () => <SelectAllCheckbox />,\n align: 'center',\n width: 'w-24 flex-shrink-0',\n body: (item, row) => {\n if (row.isPlaceholder) {\n return <Skeleton size=\"w-24 h-24\" variant=\"rect\" />;\n }\n return <SelectRowCheckbox item={item} />;\n },\n};\n\ninterface SelectRowCheckboxProps {\n item: TableDataItem;\n}\nfunction SelectRowCheckbox({item}: SelectRowCheckboxProps) {\n const {selectedRows, toggleRow} = useContext(TableContext);\n return (\n <Checkbox\n checked={selectedRows.includes(item.id)}\n onChange={() => toggleRow(item)}\n />\n );\n}\n\nfunction SelectAllCheckbox() {\n const {trans} = useTrans();\n\n const {data, selectedRows, onSelectionChange} = useContext(TableContext);\n const allRowsSelected = !!data.length && data.length === selectedRows.length;\n const someRowsSelected = !allRowsSelected && !!selectedRows.length;\n\n return (\n <Checkbox\n aria-label={trans({message: 'Select all'})}\n isIndeterminate={someRowsSelected}\n checked={allRowsSelected}\n onChange={() => {\n if (allRowsSelected) {\n onSelectionChange([]);\n } else {\n onSelectionChange(data.map(d => d.id));\n }\n }}\n />\n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ArrowDownwardIcon = createSvgIcon(\n <path d=\"m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z\" />\n, 'ArrowDownwardOutlined');\n","import {useContext, useState} from 'react';\nimport clsx from 'clsx';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {TableContext} from './table-context';\nimport {SortDescriptor} from './types/sort-descriptor';\nimport {ArrowDownwardIcon} from '../../icons/material/ArrowDownward';\nimport {useTableCellStyle} from '@common/ui/tables/style/use-table-cell-style';\n\ninterface HeaderCellProps {\n index: number;\n}\nexport function HeaderCell({index}: HeaderCellProps) {\n const {columns, sortDescriptor, onSortChange, enableSorting} =\n useContext(TableContext);\n const column = columns[index];\n\n const style = useTableCellStyle({\n index: index,\n isHeader: true,\n });\n\n const [isHovered, setIsHovered] = useState(false);\n\n const sortingKey = column.sortingKey || column.key;\n const allowSorting = column.allowsSorting && enableSorting;\n const {orderBy, orderDir} = sortDescriptor || {};\n\n const sortActive = allowSorting && orderBy === sortingKey;\n\n let ariaSort: 'ascending' | 'descending' | 'none' | undefined;\n if (sortActive && orderDir === 'asc') {\n ariaSort = 'ascending';\n } else if (sortActive && orderDir === 'desc') {\n ariaSort = 'descending';\n } else if (allowSorting) {\n ariaSort = 'none';\n }\n\n const toggleSorting = () => {\n if (!allowSorting) return;\n\n let newSort: SortDescriptor;\n\n // if this col was sorted desc, go to asc\n if (sortActive && orderDir === 'desc') {\n newSort = {orderDir: 'asc', orderBy: sortingKey};\n\n // if this col was sorted asc, clear sort\n } else if (sortActive && orderDir === 'asc') {\n newSort = {orderBy: undefined, orderDir: undefined};\n\n // if sort was on another col, or no sort was applied yet, start from desc\n } else {\n newSort = {orderDir: 'desc', orderBy: sortingKey};\n }\n\n onSortChange?.(newSort);\n };\n\n const sortVisible = sortActive || isHovered;\n const sortVariants = {\n visible: {opacity: 1, y: 0},\n hidden: {opacity: 0, y: '-25%'},\n };\n\n return (\n <div\n role=\"columnheader\"\n tabIndex={-1}\n aria-colindex={index + 1}\n aria-sort={ariaSort}\n className={clsx(\n style,\n 'text-muted font-medium text-xs',\n allowSorting && 'cursor-pointer'\n )}\n onMouseEnter={() => {\n setIsHovered(true);\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n }}\n onKeyDown={e => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n toggleSorting();\n }\n }}\n onClick={toggleSorting}\n >\n {column.hideHeader ? (\n <div className=\"sr-only\">{column.header()}</div>\n ) : (\n column.header()\n )}\n <AnimatePresence>\n {allowSorting && (\n <m.span\n variants={sortVariants}\n animate={sortVisible ? 'visible' : 'hidden'}\n initial={false}\n transition={{type: 'tween'}}\n key=\"sort-icon\"\n className=\"inline-block ml-6 -mt-2\"\n data-testid=\"table-sort-button\"\n aria-hidden={!sortVisible}\n >\n <ArrowDownwardIcon\n size=\"xs\"\n className={clsx(\n 'text-muted',\n orderDir === 'asc' &&\n orderBy === sortingKey &&\n 'rotate-180 transition-transform'\n )}\n />\n </m.span>\n )}\n </AnimatePresence>\n </div>\n );\n}\n","import {HeaderCell} from '@common/ui/tables/header-cell';\nimport React, {useContext} from 'react';\nimport {TableContext} from '@common/ui/tables/table-context';\n\nexport function TableHeaderRow() {\n const {columns} = useContext(TableContext);\n return (\n <div\n role=\"row\"\n aria-rowindex={1}\n tabIndex={-1}\n className=\"flex gap-x-16 px-16\"\n >\n {columns.map((column, columnIndex) => (\n <HeaderCell index={columnIndex} key={column.key} />\n ))}\n </div>\n );\n}\n","import React, {\n cloneElement,\n ComponentPropsWithoutRef,\n Fragment,\n JSXElementConstructor,\n MutableRefObject,\n ReactElement,\n useCallback,\n useContext,\n useMemo,\n} from 'react';\nimport {useControlledState} from '@react-stately/utils';\nimport {SortDescriptor} from './types/sort-descriptor';\nimport {useGridNavigation} from './navigate-grid';\nimport {RowElementProps, TableRow} from './table-row';\nimport {\n TableContext,\n TableContextValue,\n TableSelectionStyle,\n} from './table-context';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {TableDataItem} from './types/table-data-item';\nimport clsx from 'clsx';\nimport {useInteractOutside} from '@react-aria/interactions';\nimport {mergeProps, useObjectRef} from '@react-aria/utils';\nimport {isCtrlKeyPressed} from '@common/utils/keybinds/is-ctrl-key-pressed';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\nimport {CheckboxColumnConfig} from '@common/ui/tables/checkbox-column-config';\nimport {TableHeaderRow} from '@common/ui/tables/table-header-row';\n\nexport interface TableProps<T extends TableDataItem>\n extends ComponentPropsWithoutRef<'table'> {\n className?: string;\n columns: ColumnConfig<T>[];\n hideHeaderRow?: boolean;\n data: T[];\n meta?: any;\n tableRef?: MutableRefObject<HTMLTableElement>;\n selectedRows?: (number | string)[];\n defaultSelectedRows?: (number | string)[];\n onSelectionChange?: (keys: (number | string)[]) => void;\n sortDescriptor?: SortDescriptor;\n onSortChange?: (descriptor: SortDescriptor) => any;\n enableSorting?: boolean;\n onDelete?: (items: T[]) => void;\n enableSelection?: boolean;\n selectionStyle?: TableSelectionStyle;\n ariaLabelledBy?: string;\n onAction?: (item: T, index: number) => void;\n selectRowOnContextMenu?: boolean;\n renderRowAs?: JSXElementConstructor<RowElementProps<T>>;\n tableBody?: ReactElement<TableBodyProps>;\n hideBorder?: boolean;\n closeOnInteractOutside?: boolean;\n collapseOnMobile?: boolean;\n cellHeight?: string;\n}\nexport function Table<T extends TableDataItem>({\n className,\n columns: userColumns,\n collapseOnMobile = true,\n hideHeaderRow = false,\n hideBorder = false,\n data,\n selectedRows: propsSelectedRows,\n defaultSelectedRows: propsDefaultSelectedRows,\n onSelectionChange: propsOnSelectionChange,\n sortDescriptor: propsSortDescriptor,\n onSortChange: propsOnSortChange,\n enableSorting = true,\n onDelete,\n enableSelection = true,\n selectionStyle = 'checkbox',\n ariaLabelledBy,\n selectRowOnContextMenu,\n onAction,\n renderRowAs,\n tableBody,\n meta,\n tableRef: propsTableRef,\n closeOnInteractOutside = false,\n cellHeight,\n ...domProps\n}: TableProps<T>) {\n const isMobile = useIsMobileMediaQuery();\n const isCollapsedMode = !!isMobile && collapseOnMobile;\n if (isCollapsedMode) {\n hideHeaderRow = true;\n hideBorder = true;\n }\n\n const [selectedRows, onSelectionChange] = useControlledState(\n propsSelectedRows,\n propsDefaultSelectedRows || [],\n propsOnSelectionChange\n );\n\n const [sortDescriptor, onSortChange] = useControlledState(\n propsSortDescriptor,\n undefined,\n propsOnSortChange\n );\n\n const toggleRow = useCallback(\n (item: TableDataItem) => {\n const newValues = [...selectedRows];\n if (!newValues.includes(item.id)) {\n newValues.push(item.id);\n } else {\n const index = newValues.indexOf(item.id);\n newValues.splice(index, 1);\n }\n onSelectionChange(newValues);\n },\n [selectedRows, onSelectionChange]\n );\n\n const selectRow = useCallback(\n // allow deselecting all rows by passing in null\n (item: TableDataItem | null, merge?: boolean) => {\n let newValues: (string | number)[] = [];\n if (item) {\n newValues = merge\n ? [...selectedRows?.filter(id => id !== item.id), item.id]\n : [item.id];\n }\n onSelectionChange(newValues);\n },\n [selectedRows, onSelectionChange]\n );\n\n // add checkbox columns to config, if selection is enabled\n const columns = useMemo(() => {\n const filteredColumns = userColumns.filter(c => {\n const visibleInMode = c.visibleInMode || 'regular';\n if (visibleInMode === 'all') {\n return true;\n }\n if (visibleInMode === 'compact' && isCollapsedMode) {\n return true;\n }\n if (visibleInMode === 'regular' && !isCollapsedMode) {\n return true;\n }\n });\n const showCheckboxCell =\n enableSelection && selectionStyle !== 'highlight' && !isMobile;\n if (showCheckboxCell) {\n filteredColumns.unshift(CheckboxColumnConfig);\n }\n return filteredColumns;\n }, [isMobile, userColumns, enableSelection, selectionStyle, isCollapsedMode]);\n\n const contextValue: TableContextValue<T> = {\n isCollapsedMode,\n cellHeight,\n hideBorder,\n hideHeaderRow,\n selectedRows,\n onSelectionChange,\n enableSorting,\n enableSelection,\n selectionStyle,\n data,\n columns,\n sortDescriptor,\n onSortChange,\n toggleRow,\n selectRow,\n onAction,\n selectRowOnContextMenu,\n meta,\n collapseOnMobile,\n };\n\n const navProps = useGridNavigation({\n cellCount: enableSelection ? columns.length + 1 : columns.length,\n rowCount: data.length + 1,\n });\n\n const tableBodyProps: TableBodyProps = {\n renderRowAs: renderRowAs as any,\n };\n\n if (!tableBody) {\n tableBody = <BasicTableBody {...tableBodyProps} />;\n } else {\n tableBody = cloneElement(tableBody, tableBodyProps);\n }\n\n // deselect rows when clicking outside the table\n const tableRef = useObjectRef(propsTableRef);\n useInteractOutside({\n ref: tableRef,\n onInteractOutside: e => {\n if (\n closeOnInteractOutside &&\n enableSelection &&\n selectedRows?.length &&\n // don't deselect if clicking on a dialog (for example is table row has a context menu)\n !(e.target as HTMLElement).closest('[role=\"dialog\"]')\n ) {\n onSelectionChange([]);\n }\n },\n });\n\n return (\n <TableContext.Provider value={contextValue as any}>\n <div\n {...mergeProps(domProps, navProps, {\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n if (selectedRows?.length) {\n onSelectionChange([]);\n }\n } else if (e.key === 'Delete') {\n e.preventDefault();\n e.stopPropagation();\n if (selectedRows?.length) {\n onDelete?.(\n data.filter(item => selectedRows?.includes(item.id))\n );\n }\n } else if (isCtrlKeyPressed(e) && e.key === 'a') {\n e.preventDefault();\n e.stopPropagation();\n if (enableSelection) {\n onSelectionChange(data.map(item => item.id));\n }\n }\n },\n })}\n role=\"grid\"\n tabIndex={0}\n aria-rowcount={data.length + 1}\n aria-colcount={columns.length + 1}\n ref={tableRef}\n aria-multiselectable={enableSelection ? true : undefined}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n className,\n 'select-none isolate outline-none text-sm focus-visible:ring-2'\n )}\n >\n {!hideHeaderRow && <TableHeaderRow />}\n {tableBody}\n </div>\n </TableContext.Provider>\n );\n}\n\nexport interface TableBodyProps {\n renderRowAs?: TableProps<TableDataItem>['renderRowAs'];\n}\nfunction BasicTableBody({renderRowAs}: TableBodyProps) {\n const {data} = useContext(TableContext);\n return (\n <Fragment>\n {data.map((item, rowIndex) => (\n <TableRow\n item={item}\n index={rowIndex}\n key={item.id}\n renderAs={renderRowAs}\n />\n ))}\n </Fragment>\n );\n}\n","import React, {Children, cloneElement, isValidElement, ReactElement} from 'react';\nimport clsx from 'clsx';\nimport type {ChipProps} from './chip';\n\ninterface ChipListProps {\n className?: string;\n children?: ReactElement | ReactElement[];\n size?: ChipProps['size'];\n radius?: ChipProps['radius'];\n color?: ChipProps['color'];\n selectable?: ChipProps['selectable'];\n}\nexport function ChipList({\n className,\n children,\n size,\n color,\n radius,\n selectable,\n}: ChipListProps) {\n return (\n <div className={clsx(className, 'flex items-center gap-8 flex-wrap')}>\n {Children.map(children, chip => {\n if (isValidElement<ChipProps>(chip)) {\n return cloneElement<ChipProps>(chip, {\n size,\n color,\n selectable,\n radius,\n });\n }\n })}\n </div>\n );\n}\n","import {Fragment, memo} from 'react';\nimport {useNumberFormatter} from './use-number-formatter';\nimport {NumberFormatOptions} from '@internationalized/number';\nimport {shallowEqual} from '../utils/shallow-equal';\n\ninterface FormattedNumberProps extends NumberFormatOptions {\n value: number;\n}\nexport const FormattedNumber = memo(\n ({value, ...options}: FormattedNumberProps) => {\n const formatter = useNumberFormatter(options);\n\n if (isNaN(value)) {\n value = 0;\n }\n\n return <Fragment>{formatter.format(value)}</Fragment>;\n },\n shallowEqual\n);\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const AddIcon = createSvgIcon(\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n, 'AddOutlined');\n","import React, {ComponentPropsWithoutRef, ReactNode, useId} from 'react';\nimport clsx from 'clsx';\nimport {useController} from 'react-hook-form';\nimport {mergeProps, useObjectRef} from '@react-aria/utils';\nimport {InputSize} from '../input-field/input-size';\nimport {getInputFieldClassNames} from '../input-field/get-input-field-class-names';\nimport {AutoFocusProps, useAutoFocus} from '../../focus/use-auto-focus';\n\ninterface SwitchProps\n extends AutoFocusProps,\n Omit<ComponentPropsWithoutRef<'input'>, 'size'> {\n size?: InputSize;\n className?: string;\n description?: ReactNode;\n invalid?: boolean;\n errorMessage?: string;\n}\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\n (props, ref) => {\n const {\n children,\n size = 'sm',\n description,\n className,\n invalid,\n autoFocus,\n errorMessage,\n ...domProps\n } = props;\n\n const inputRef = useObjectRef(ref);\n useAutoFocus({autoFocus}, inputRef);\n\n const style = getSizeClassName(size);\n const fieldClassNames = getInputFieldClassNames(props);\n\n const descriptionId = useId();\n\n return (\n <div className={clsx(className, 'isolate')}>\n <label className=\"flex items-center select-none\">\n <input\n {...domProps}\n type=\"checkbox\"\n role=\"switch\"\n aria-invalid={invalid || undefined}\n aria-describedby={description ? descriptionId : undefined}\n ref={inputRef}\n aria-checked={domProps.checked}\n className={clsx(\n style,\n !invalid &&\n 'checked:bg-primary dark:checked:bg-primary-dark checked:border-primary dark:checked:border-primary-dark',\n invalid && 'checked:bg-danger checked:border-danger',\n 'outline-none cursor-pointer bg-chip border-chip border checked:bg-primary checked:border-primary p-0 overflow-hidden relative rounded-3xl appearance-none transition-colors flex-shrink-0 flex items-center outline-none',\n 'before:z-10 before:border before:rounded-3xl before:block before:bg-white before:transition-transform before:translate-x-2',\n 'checked:before:border-white',\n 'focus-visible:ring',\n props.disabled && 'opacity-80 cursor-not-allowed'\n )}\n />\n {children && (\n <span\n className={clsx(\n fieldClassNames.size.font,\n 'ml-12',\n invalid && 'text-danger',\n props.disabled && 'text-disabled'\n )}\n >\n {children}\n </span>\n )}\n </label>\n {description && !errorMessage && (\n <div id={descriptionId} className={fieldClassNames.description}>\n {description}\n </div>\n )}\n {errorMessage && (\n <div id={descriptionId} className={fieldClassNames.error}>\n {errorMessage}\n </div>\n )}\n </div>\n );\n }\n);\n\ninterface FormSwitchProps extends SwitchProps {\n name: string;\n}\nexport function FormSwitch(props: FormSwitchProps) {\n const {\n field: {onChange, onBlur, value = false, ref},\n fieldState: {invalid, error},\n } = useController({\n name: props.name,\n });\n\n const formProps: Partial<SwitchProps> = {\n onChange: e => {\n if (e.target.value && e.target.value !== 'on') {\n onChange(e.target.checked ? e.target.value : false);\n } else {\n onChange(e);\n }\n },\n onBlur,\n checked: !!value,\n invalid,\n errorMessage: error?.message,\n name: props.name,\n };\n\n return <Switch ref={ref} {...mergeProps(props, formProps)} />;\n}\n\nfunction getSizeClassName(size: InputSize): string {\n switch (size) {\n case 'xl':\n return 'w-68 h-36 before:w-28 before:h-28 checked:before:translate-x-36';\n case 'lg':\n return 'w-56 h-30 before:w-22 before:h-22 checked:before:translate-x-30';\n case 'md':\n return 'w-46 h-24 before:w-18 before:h-18 checked:before:translate-x-24';\n case 'xs':\n return 'w-30 h-16 before:w-12 before:h-12 checked:before:translate-x-16';\n default:\n return 'w-38 h-20 before:w-14 before:h-14 checked:before:translate-x-20';\n }\n}\n","/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $5b160d28a433310d$export$c17fa47878dc55b6 {\n /** Returns a localized string for the given key and locale. */ getStringForLocale(key, locale) {\n let strings = this.strings[locale];\n if (!strings) {\n strings = $5b160d28a433310d$var$getStringsForLocale(locale, this.strings, this.defaultLocale);\n this.strings[locale] = strings;\n }\n let string = strings[key];\n if (!string) throw new Error(`Could not find intl message ${key} in ${locale} locale`);\n return string;\n }\n constructor(messages, defaultLocale = \"en-US\"){\n // Clone messages so we don't modify the original object.\n this.strings = {\n ...messages\n };\n this.defaultLocale = defaultLocale;\n }\n}\nfunction $5b160d28a433310d$var$getStringsForLocale(locale, strings, defaultLocale = \"en-US\") {\n // If there is an exact match, use it.\n if (strings[locale]) return strings[locale];\n // Attempt to find the closest match by language.\n // For example, if the locale is fr-CA (French Canadian), but there is only\n // an fr-FR (France) set of strings, use that.\n // This could be replaced with Intl.LocaleMatcher once it is supported.\n // https://github.com/tc39/proposal-intl-localematcher\n let language = $5b160d28a433310d$var$getLanguage(locale);\n if (strings[language]) return strings[language];\n for(let key in strings){\n if (key.startsWith(language + \"-\")) return strings[key];\n }\n // Nothing close, use english.\n return strings[defaultLocale];\n}\nfunction $5b160d28a433310d$var$getLanguage(locale) {\n // @ts-ignore\n if (Intl.Locale) // @ts-ignore\n return new Intl.Locale(locale).language;\n return locale.split(\"-\")[0];\n}\n\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $6db58dc88e78b024$var$pluralRulesCache = new Map();\nconst $6db58dc88e78b024$var$numberFormatCache = new Map();\nclass $6db58dc88e78b024$export$2f817fcdc4b89ae0 {\n /** Formats a localized string for the given key with the provided variables. */ format(key, variables) {\n let message = this.strings.getStringForLocale(key, this.locale);\n return typeof message === \"function\" ? message(variables, this) : message;\n }\n plural(count, options, type = \"cardinal\") {\n let opt = options[\"=\" + count];\n if (opt) return typeof opt === \"function\" ? opt() : opt;\n let key = this.locale + \":\" + type;\n let pluralRules = $6db58dc88e78b024$var$pluralRulesCache.get(key);\n if (!pluralRules) {\n pluralRules = new Intl.PluralRules(this.locale, {\n type: type\n });\n $6db58dc88e78b024$var$pluralRulesCache.set(key, pluralRules);\n }\n let selected = pluralRules.select(count);\n opt = options[selected] || options.other;\n return typeof opt === \"function\" ? opt() : opt;\n }\n number(value) {\n let numberFormat = $6db58dc88e78b024$var$numberFormatCache.get(this.locale);\n if (!numberFormat) {\n numberFormat = new Intl.NumberFormat(this.locale);\n $6db58dc88e78b024$var$numberFormatCache.set(this.locale, numberFormat);\n }\n return numberFormat.format(value);\n }\n select(options, value) {\n let opt = options[value] || options.other;\n return typeof opt === \"function\" ? opt() : opt;\n }\n constructor(locale, strings){\n this.locale = locale;\n this.strings = strings;\n }\n}\n\n\n\n\nexport {$5b160d28a433310d$export$c17fa47878dc55b6 as LocalizedStringDictionary, $6db58dc88e78b024$export$2f817fcdc4b89ae0 as LocalizedStringFormatter};\n//# sourceMappingURL=module.js.map\n","import $cBgAy$swchelperssrc_define_propertymjs from \"@swc/helpers/src/_define_property.mjs\";\nimport {clamp as $cBgAy$clamp, toFixedNumber as $cBgAy$toFixedNumber, useControlledState as $cBgAy$useControlledState, snapValueToStep as $cBgAy$snapValueToStep} from \"@react-stately/utils\";\nimport {LocalizedStringDictionary as $cBgAy$LocalizedStringDictionary} from \"@internationalized/string\";\nimport {NumberFormatter as $cBgAy$NumberFormatter} from \"@internationalized/number\";\nimport {useRef as $cBgAy$useRef, useMemo as $cBgAy$useMemo, useState as $cBgAy$useState} from \"react\";\nimport {useSliderState as $cBgAy$useSliderState} from \"@react-stately/slider\";\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nvar $7a451c0c6841e6b9$exports = {};\nvar $2d805fd52bb48883$exports = {};\n$2d805fd52bb48883$exports = {\n \"alpha\": `ألفا`,\n \"blue\": `أزرق`,\n \"brightness\": `السطوع`,\n \"green\": `أخضر`,\n \"hue\": `درجة اللون`,\n \"lightness\": `الإضاءة`,\n \"red\": `أحمر`,\n \"saturation\": `التشبع`\n};\n\n\nvar $6c28468dc1df643c$exports = {};\n$6c28468dc1df643c$exports = {\n \"alpha\": `Алфа`,\n \"blue\": `Синьо`,\n \"brightness\": `Яркост`,\n \"green\": `Зелено`,\n \"hue\": `Оттенък`,\n \"lightness\": `Лекота`,\n \"red\": `Червено`,\n \"saturation\": `Наситеност`\n};\n\n\nvar $807554f8230db0ed$exports = {};\n$807554f8230db0ed$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Modrá`,\n \"brightness\": `Jas`,\n \"green\": `Zelená`,\n \"hue\": `Odstín`,\n \"lightness\": `Světlost`,\n \"red\": `Červená`,\n \"saturation\": `Sytost`\n};\n\n\nvar $7097f64386f1761c$exports = {};\n$7097f64386f1761c$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Blå`,\n \"brightness\": `Lysstyrke`,\n \"green\": `Grøn`,\n \"hue\": `Tone`,\n \"lightness\": `Lyshed`,\n \"red\": `Rød`,\n \"saturation\": `Farvemætning`\n};\n\n\nvar $bdd847d8beb08799$exports = {};\n$bdd847d8beb08799$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `Blau`,\n \"brightness\": `Helligkeit`,\n \"green\": `Grün`,\n \"hue\": `Farbton`,\n \"lightness\": `Leuchtkraft`,\n \"red\": `Rot`,\n \"saturation\": `Sättigung`\n};\n\n\nvar $a53e00b683950971$exports = {};\n$a53e00b683950971$exports = {\n \"alpha\": `Άλφα`,\n \"blue\": `Μπλε`,\n \"brightness\": `Φωτεινότητα`,\n \"green\": `Πράσινο`,\n \"hue\": `Τόνος`,\n \"lightness\": `Φωτεινότητα`,\n \"red\": `Κόκκινο`,\n \"saturation\": `Κορεσμός`\n};\n\n\nvar $21cdd87e84f28d89$exports = {};\n$21cdd87e84f28d89$exports = {\n \"hue\": `Hue`,\n \"saturation\": `Saturation`,\n \"lightness\": `Lightness`,\n \"brightness\": `Brightness`,\n \"red\": `Red`,\n \"green\": `Green`,\n \"blue\": `Blue`,\n \"alpha\": `Alpha`\n};\n\n\nvar $92fee9698e4d675a$exports = {};\n$92fee9698e4d675a$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `Azul`,\n \"brightness\": `Brillo`,\n \"green\": `Verde`,\n \"hue\": `Tono`,\n \"lightness\": `Luminosidad`,\n \"red\": `Rojo`,\n \"saturation\": `Saturación`\n};\n\n\nvar $7ea012e91a5ad3ee$exports = {};\n$7ea012e91a5ad3ee$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Sinine`,\n \"brightness\": `Heledus`,\n \"green\": `Roheline`,\n \"hue\": `Värv`,\n \"lightness\": `Valgus`,\n \"red\": `Punane`,\n \"saturation\": `Küllastus`\n};\n\n\nvar $8460c13bb2d75345$exports = {};\n$8460c13bb2d75345$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `Sininen`,\n \"brightness\": `Kirkkaus`,\n \"green\": `Vihreä`,\n \"hue\": `Sävy`,\n \"lightness\": `Valomäärä`,\n \"red\": `Punainen`,\n \"saturation\": `Värikylläisyys`\n};\n\n\nvar $2a2d5dc14e680587$exports = {};\n$2a2d5dc14e680587$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `Bleu`,\n \"brightness\": `Luminosité`,\n \"green\": `Vert`,\n \"hue\": `Teinte`,\n \"lightness\": `Luminosité`,\n \"red\": `Rouge`,\n \"saturation\": `Saturation`\n};\n\n\nvar $9a3f292371bb0589$exports = {};\n$9a3f292371bb0589$exports = {\n \"alpha\": `אלפא`,\n \"blue\": `כחול`,\n \"brightness\": `בהירות`,\n \"green\": `ירוק`,\n \"hue\": `גוון`,\n \"lightness\": `כמות אור`,\n \"red\": `אדום`,\n \"saturation\": `רוויה`\n};\n\n\nvar $4742231a685fa068$exports = {};\n$4742231a685fa068$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Plava`,\n \"brightness\": `Svjetlina`,\n \"green\": `Zelena`,\n \"hue\": `Nijansa`,\n \"lightness\": `Osvijetljenost`,\n \"red\": `Crvena`,\n \"saturation\": `Zasićenost`\n};\n\n\nvar $05e247fd2960981e$exports = {};\n$05e247fd2960981e$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Kék`,\n \"brightness\": `Fényesség`,\n \"green\": `Zöld`,\n \"hue\": `Színárnyalat`,\n \"lightness\": `Világosság`,\n \"red\": `Piros`,\n \"saturation\": `Telítettség`\n};\n\n\nvar $a67524a79ccbe190$exports = {};\n$a67524a79ccbe190$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Blu`,\n \"brightness\": `Luminosità`,\n \"green\": `Verde`,\n \"hue\": `Tonalità`,\n \"lightness\": `Luminosità`,\n \"red\": `Rosso`,\n \"saturation\": `Saturazione`\n};\n\n\nvar $a9eefe9d6c8cb7d5$exports = {};\n$a9eefe9d6c8cb7d5$exports = {\n \"alpha\": `アルファ`,\n \"blue\": `青`,\n \"brightness\": `明るさ`,\n \"green\": `緑`,\n \"hue\": `色相`,\n \"lightness\": `明度`,\n \"red\": `赤`,\n \"saturation\": `彩度`\n};\n\n\nvar $4a6b836d4f1bfaba$exports = {};\n$4a6b836d4f1bfaba$exports = {\n \"alpha\": `알파`,\n \"blue\": `파랑`,\n \"brightness\": `명도`,\n \"green\": `초록`,\n \"hue\": `색조`,\n \"lightness\": `밝기`,\n \"red\": `빨강`,\n \"saturation\": `채도`\n};\n\n\nvar $c950e4b1c482abde$exports = {};\n$c950e4b1c482abde$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Mėlyna`,\n \"brightness\": `Ryškumas`,\n \"green\": `Žalia`,\n \"hue\": `Atspalvis`,\n \"lightness\": `Šviesumas`,\n \"red\": `Raudona`,\n \"saturation\": `Įsotinimas`\n};\n\n\nvar $d10d6b60dc50b438$exports = {};\n$d10d6b60dc50b438$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Zila`,\n \"brightness\": `Spilgtums`,\n \"green\": `Zaļa`,\n \"hue\": `Nokrāsa`,\n \"lightness\": `Gaišums`,\n \"red\": `Sarkana`,\n \"saturation\": `Piesātinājums`\n};\n\n\nvar $371a732b2494f452$exports = {};\n$371a732b2494f452$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Blå`,\n \"brightness\": `Lysstyrke`,\n \"green\": `Grønn`,\n \"hue\": `Fargetone`,\n \"lightness\": `Lyshet`,\n \"red\": `Rød`,\n \"saturation\": `Metning`\n};\n\n\nvar $6d042cae6243464b$exports = {};\n$6d042cae6243464b$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Blauw`,\n \"brightness\": `Helderheid`,\n \"green\": `Groen`,\n \"hue\": `Kleurtoon`,\n \"lightness\": `Lichtsterkte`,\n \"red\": `Rood`,\n \"saturation\": `Verzadiging`\n};\n\n\nvar $d9ab5c2611e0bcd3$exports = {};\n$d9ab5c2611e0bcd3$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Niebieski`,\n \"brightness\": `Jasność`,\n \"green\": `Zielony`,\n \"hue\": `Odcień`,\n \"lightness\": `Jaskrawość`,\n \"red\": `Czerwony`,\n \"saturation\": `Nasycenie`\n};\n\n\nvar $73f77c9902e29ca6$exports = {};\n$73f77c9902e29ca6$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Azul`,\n \"brightness\": `Brilho`,\n \"green\": `Verde`,\n \"hue\": `Matiz`,\n \"lightness\": `Luminosidade`,\n \"red\": `Vermelho`,\n \"saturation\": `Saturação`\n};\n\n\nvar $4f461eb266a95c10$exports = {};\n$4f461eb266a95c10$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Azul`,\n \"brightness\": `Luminosidade`,\n \"green\": `Verde`,\n \"hue\": `Tonalidade`,\n \"lightness\": `Claridade`,\n \"red\": `Vermelho`,\n \"saturation\": `Saturação`\n};\n\n\nvar $dc46bea2f2597899$exports = {};\n$dc46bea2f2597899$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Albastru`,\n \"brightness\": `Luminozitate`,\n \"green\": `Verde`,\n \"hue\": `Nuanță`,\n \"lightness\": `Luminozitate`,\n \"red\": `Roșu`,\n \"saturation\": `Saturație`\n};\n\n\nvar $622bbd6719cc95af$exports = {};\n$622bbd6719cc95af$exports = {\n \"alpha\": `Альфа`,\n \"blue\": `Синий`,\n \"brightness\": `Яркость`,\n \"green\": `Зеленый`,\n \"hue\": `Оттенок`,\n \"lightness\": `Освещенность`,\n \"red\": `Красный`,\n \"saturation\": `Насыщенность`\n};\n\n\nvar $4da03c1ecd9a9c7d$exports = {};\n$4da03c1ecd9a9c7d$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Modrá`,\n \"brightness\": `Jas`,\n \"green\": `Zelená`,\n \"hue\": `Odtieň`,\n \"lightness\": `Svetlosť`,\n \"red\": `Červená`,\n \"saturation\": `Sýtosť`\n};\n\n\nvar $edb6b2fe456ed4e8$exports = {};\n$edb6b2fe456ed4e8$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Modra`,\n \"brightness\": `Svetlost`,\n \"green\": `Zelena`,\n \"hue\": `Barva`,\n \"lightness\": `Lahkost`,\n \"red\": `Rdeča`,\n \"saturation\": `Nasičenost`\n};\n\n\nvar $264cd81c52b30815$exports = {};\n$264cd81c52b30815$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Plava`,\n \"brightness\": `Osvetljenost`,\n \"green\": `Zelena`,\n \"hue\": `Nijansa`,\n \"lightness\": `Osvetljenje`,\n \"red\": `Crvena`,\n \"saturation\": `Zasićenje`\n};\n\n\nvar $6f80afde0270dda7$exports = {};\n$6f80afde0270dda7$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Blått`,\n \"brightness\": `Ljusstyrka`,\n \"green\": `Grönt`,\n \"hue\": `Nyans`,\n \"lightness\": `Ljushet`,\n \"red\": `Rött`,\n \"saturation\": `Mättnad`\n};\n\n\nvar $23a92651c6957668$exports = {};\n$23a92651c6957668$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Mavi`,\n \"brightness\": `Parlaklık`,\n \"green\": `Yeşil`,\n \"hue\": `Ton`,\n \"lightness\": `Canlılık`,\n \"red\": `Kırmızı`,\n \"saturation\": `Doygunluk`\n};\n\n\nvar $0f9b1074d04f4954$exports = {};\n$0f9b1074d04f4954$exports = {\n \"alpha\": `Альфа`,\n \"blue\": `Синій`,\n \"brightness\": `Яскравість`,\n \"green\": `Зелений`,\n \"hue\": `Тон`,\n \"lightness\": `Освітленість`,\n \"red\": `Червоний`,\n \"saturation\": `Насиченість`\n};\n\n\nvar $a9cedf75b94e4916$exports = {};\n$a9cedf75b94e4916$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `蓝色`,\n \"brightness\": `亮度`,\n \"green\": `绿色`,\n \"hue\": `色相`,\n \"lightness\": `明亮度`,\n \"red\": `红色`,\n \"saturation\": `饱和度`\n};\n\n\nvar $37cff576474bc8d4$exports = {};\n$37cff576474bc8d4$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `藍色`,\n \"brightness\": `亮度`,\n \"green\": `綠色`,\n \"hue\": `色相`,\n \"lightness\": `明亮`,\n \"red\": `紅色`,\n \"saturation\": `飽和度`\n};\n\n\n$7a451c0c6841e6b9$exports = {\n \"ar-AE\": $2d805fd52bb48883$exports,\n \"bg-BG\": $6c28468dc1df643c$exports,\n \"cs-CZ\": $807554f8230db0ed$exports,\n \"da-DK\": $7097f64386f1761c$exports,\n \"de-DE\": $bdd847d8beb08799$exports,\n \"el-GR\": $a53e00b683950971$exports,\n \"en-US\": $21cdd87e84f28d89$exports,\n \"es-ES\": $92fee9698e4d675a$exports,\n \"et-EE\": $7ea012e91a5ad3ee$exports,\n \"fi-FI\": $8460c13bb2d75345$exports,\n \"fr-FR\": $2a2d5dc14e680587$exports,\n \"he-IL\": $9a3f292371bb0589$exports,\n \"hr-HR\": $4742231a685fa068$exports,\n \"hu-HU\": $05e247fd2960981e$exports,\n \"it-IT\": $a67524a79ccbe190$exports,\n \"ja-JP\": $a9eefe9d6c8cb7d5$exports,\n \"ko-KR\": $4a6b836d4f1bfaba$exports,\n \"lt-LT\": $c950e4b1c482abde$exports,\n \"lv-LV\": $d10d6b60dc50b438$exports,\n \"nb-NO\": $371a732b2494f452$exports,\n \"nl-NL\": $6d042cae6243464b$exports,\n \"pl-PL\": $d9ab5c2611e0bcd3$exports,\n \"pt-BR\": $73f77c9902e29ca6$exports,\n \"pt-PT\": $4f461eb266a95c10$exports,\n \"ro-RO\": $dc46bea2f2597899$exports,\n \"ru-RU\": $622bbd6719cc95af$exports,\n \"sk-SK\": $4da03c1ecd9a9c7d$exports,\n \"sl-SI\": $edb6b2fe456ed4e8$exports,\n \"sr-SP\": $264cd81c52b30815$exports,\n \"sv-SE\": $6f80afde0270dda7$exports,\n \"tr-TR\": $23a92651c6957668$exports,\n \"uk-UA\": $0f9b1074d04f4954$exports,\n \"zh-CN\": $a9cedf75b94e4916$exports,\n \"zh-TW\": $37cff576474bc8d4$exports\n};\n\n\n\n\nconst $799cddbef784668f$var$strings = new (0, $cBgAy$LocalizedStringDictionary)((0, (/*@__PURE__*/$parcel$interopDefault($7a451c0c6841e6b9$exports))));\nfunction $799cddbef784668f$export$6e865ea70d7724f(value) {\n let res = $799cddbef784668f$var$RGBColor.parse(value) || $799cddbef784668f$var$HSBColor.parse(value) || $799cddbef784668f$var$HSLColor.parse(value);\n if (res) return res;\n throw new Error(\"Invalid color value: \" + value);\n}\nfunction $799cddbef784668f$export$4cde5df63f53f473(v) {\n if (typeof v === \"string\") return $799cddbef784668f$export$6e865ea70d7724f(v);\n else return v;\n}\nclass $799cddbef784668f$var$Color {\n toHexInt() {\n return this.toFormat(\"rgb\").toHexInt();\n }\n getChannelValue(channel) {\n if (channel in this) return this[channel];\n throw new Error(\"Unsupported color channel: \" + channel);\n }\n withChannelValue(channel, value) {\n if (channel in this) {\n let x = this.clone();\n x[channel] = value;\n return x;\n }\n throw new Error(\"Unsupported color channel: \" + channel);\n }\n getChannelName(channel, locale) {\n return $799cddbef784668f$var$strings.getStringForLocale(channel, locale);\n }\n getColorSpaceAxes(xyChannels) {\n let { xChannel: xChannel , yChannel: yChannel } = xyChannels;\n let xCh = xChannel || this.getColorChannels().find((c)=>c !== yChannel);\n let yCh = yChannel || this.getColorChannels().find((c)=>c !== xCh);\n let zCh = this.getColorChannels().find((c)=>c !== xCh && c !== yCh);\n return {\n xChannel: xCh,\n yChannel: yCh,\n zChannel: zCh\n };\n }\n}\nclass $799cddbef784668f$var$RGBColor extends $799cddbef784668f$var$Color {\n static parse(value) {\n let colors = [];\n // matching #rgb, #rgba, #rrggbb, #rrggbbaa\n if (/^#[\\da-f]+$/i.test(value) && [\n 4,\n 5,\n 7,\n 9\n ].includes(value.length)) {\n const values = (value.length < 6 ? value.replace(/[^#]/gi, \"$&$&\") : value).slice(1).split(\"\");\n while(values.length > 0)colors.push(parseInt(values.splice(0, 2).join(\"\"), 16));\n colors[3] = colors[3] !== undefined ? colors[3] / 255 : undefined;\n }\n // matching rgb(rrr, ggg, bbb), rgba(rrr, ggg, bbb, 0.a)\n const match = value.match(/^rgba?\\((.*)\\)$/);\n if (match === null || match === void 0 ? void 0 : match[1]) {\n colors = match[1].split(\",\").map((value)=>Number(value.trim()));\n colors = colors.map((num, i)=>(0, $cBgAy$clamp)(num, 0, i < 3 ? 255 : 1));\n }\n var _colors_;\n return colors.length < 3 ? undefined : new $799cddbef784668f$var$RGBColor(colors[0], colors[1], colors[2], (_colors_ = colors[3]) !== null && _colors_ !== void 0 ? _colors_ : 1);\n }\n toString(format) {\n switch(format){\n case \"hex\":\n return \"#\" + (this.red.toString(16).padStart(2, \"0\") + this.green.toString(16).padStart(2, \"0\") + this.blue.toString(16).padStart(2, \"0\")).toUpperCase();\n case \"hexa\":\n return \"#\" + (this.red.toString(16).padStart(2, \"0\") + this.green.toString(16).padStart(2, \"0\") + this.blue.toString(16).padStart(2, \"0\") + Math.round(this.alpha * 255).toString(16).padStart(2, \"0\")).toUpperCase();\n case \"rgb\":\n return `rgb(${this.red}, ${this.green}, ${this.blue})`;\n case \"css\":\n case \"rgba\":\n return `rgba(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`;\n default:\n return this.toFormat(format).toString(format);\n }\n }\n toFormat(format) {\n switch(format){\n case \"hex\":\n case \"hexa\":\n case \"rgb\":\n case \"rgba\":\n return this;\n case \"hsb\":\n case \"hsba\":\n return this.toHSB();\n case \"hsl\":\n case \"hsla\":\n return this.toHSL();\n default:\n throw new Error(\"Unsupported color conversion: rgb -> \" + format);\n }\n }\n toHexInt() {\n return this.red << 16 | this.green << 8 | this.blue;\n }\n /**\n * Converts an RGB color value to HSB.\n * Conversion formula adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB.\n * @returns An HSBColor object.\n */ toHSB() {\n const red = this.red / 255;\n const green = this.green / 255;\n const blue = this.blue / 255;\n const min = Math.min(red, green, blue);\n const brightness = Math.max(red, green, blue);\n const chroma = brightness - min;\n const saturation = brightness === 0 ? 0 : chroma / brightness;\n let hue = 0; // achromatic\n if (chroma !== 0) {\n switch(brightness){\n case red:\n hue = (green - blue) / chroma + (green < blue ? 6 : 0);\n break;\n case green:\n hue = (blue - red) / chroma + 2;\n break;\n case blue:\n hue = (red - green) / chroma + 4;\n break;\n }\n hue /= 6;\n }\n return new $799cddbef784668f$var$HSBColor((0, $cBgAy$toFixedNumber)(hue * 360, 2), (0, $cBgAy$toFixedNumber)(saturation * 100, 2), (0, $cBgAy$toFixedNumber)(brightness * 100, 2), this.alpha);\n }\n /**\n * Converts an RGB color value to HSL.\n * Conversion formula adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB.\n * @returns An HSLColor object.\n */ toHSL() {\n const red = this.red / 255;\n const green = this.green / 255;\n const blue = this.blue / 255;\n const min = Math.min(red, green, blue);\n const max = Math.max(red, green, blue);\n const lightness = (max + min) / 2;\n const chroma = max - min;\n let hue;\n let saturation;\n if (chroma === 0) hue = saturation = 0; // achromatic\n else {\n saturation = chroma / (lightness < .5 ? max + min : 2 - max - min);\n switch(max){\n case red:\n hue = (green - blue) / chroma + (green < blue ? 6 : 0);\n break;\n case green:\n hue = (blue - red) / chroma + 2;\n break;\n case blue:\n hue = (red - green) / chroma + 4;\n break;\n }\n hue /= 6;\n }\n return new $799cddbef784668f$var$HSLColor((0, $cBgAy$toFixedNumber)(hue * 360, 2), (0, $cBgAy$toFixedNumber)(saturation * 100, 2), (0, $cBgAy$toFixedNumber)(lightness * 100, 2), this.alpha);\n }\n clone() {\n return new $799cddbef784668f$var$RGBColor(this.red, this.green, this.blue, this.alpha);\n }\n getChannelRange(channel) {\n switch(channel){\n case \"red\":\n case \"green\":\n case \"blue\":\n return {\n minValue: 0x0,\n maxValue: 0xFF,\n step: 0x1,\n pageSize: 0x11\n };\n case \"alpha\":\n return {\n minValue: 0,\n maxValue: 1,\n step: 0.01,\n pageSize: 0.1\n };\n default:\n throw new Error(\"Unknown color channel: \" + channel);\n }\n }\n formatChannelValue(channel, locale) {\n let options;\n let value = this.getChannelValue(channel);\n switch(channel){\n case \"red\":\n case \"green\":\n case \"blue\":\n options = {\n style: \"decimal\"\n };\n break;\n case \"alpha\":\n options = {\n style: \"percent\"\n };\n break;\n default:\n throw new Error(\"Unknown color channel: \" + channel);\n }\n return new (0, $cBgAy$NumberFormatter)(locale, options).format(value);\n }\n getColorSpace() {\n return \"rgb\";\n }\n getColorChannels() {\n return $799cddbef784668f$var$RGBColor.colorChannels;\n }\n constructor(red, green, blue, alpha){\n super();\n this.red = red;\n this.green = green;\n this.blue = blue;\n this.alpha = alpha;\n }\n}\n(0, $cBgAy$swchelperssrc_define_propertymjs)($799cddbef784668f$var$RGBColor, \"colorChannels\", [\n \"red\",\n \"green\",\n \"blue\"\n]);\n// X = <negative/positive number with/without decimal places>\n// before/after a comma, 0 or more whitespaces are allowed\n// - hsb(X, X%, X%)\n// - hsba(X, X%, X%, X)\nconst $799cddbef784668f$var$HSB_REGEX = /hsb\\(([-+]?\\d+(?:.\\d+)?\\s*,\\s*[-+]?\\d+(?:.\\d+)?%\\s*,\\s*[-+]?\\d+(?:.\\d+)?%)\\)|hsba\\(([-+]?\\d+(?:.\\d+)?\\s*,\\s*[-+]?\\d+(?:.\\d+)?%\\s*,\\s*[-+]?\\d+(?:.\\d+)?%\\s*,\\s*[-+]?\\d(.\\d+)?)\\)/;\nclass $799cddbef784668f$var$HSBColor extends $799cddbef784668f$var$Color {\n static parse(value) {\n let m;\n if (m = value.match($799cddbef784668f$var$HSB_REGEX)) {\n var _m_;\n const [h, s, b, a] = ((_m_ = m[1]) !== null && _m_ !== void 0 ? _m_ : m[2]).split(\",\").map((n)=>Number(n.trim().replace(\"%\", \"\")));\n return new $799cddbef784668f$var$HSBColor($799cddbef784668f$var$mod(h, 360), (0, $cBgAy$clamp)(s, 0, 100), (0, $cBgAy$clamp)(b, 0, 100), (0, $cBgAy$clamp)(a !== null && a !== void 0 ? a : 1, 0, 1));\n }\n }\n toString(format) {\n switch(format){\n case \"css\":\n return this.toHSL().toString(\"css\");\n case \"hex\":\n return this.toRGB().toString(\"hex\");\n case \"hexa\":\n return this.toRGB().toString(\"hexa\");\n case \"hsb\":\n return `hsb(${this.hue}, ${(0, $cBgAy$toFixedNumber)(this.saturation, 2)}%, ${(0, $cBgAy$toFixedNumber)(this.brightness, 2)}%)`;\n case \"hsba\":\n return `hsba(${this.hue}, ${(0, $cBgAy$toFixedNumber)(this.saturation, 2)}%, ${(0, $cBgAy$toFixedNumber)(this.brightness, 2)}%, ${this.alpha})`;\n default:\n return this.toFormat(format).toString(format);\n }\n }\n toFormat(format) {\n switch(format){\n case \"hsb\":\n case \"hsba\":\n return this;\n case \"hsl\":\n case \"hsla\":\n return this.toHSL();\n case \"rgb\":\n case \"rgba\":\n return this.toRGB();\n default:\n throw new Error(\"Unsupported color conversion: hsb -> \" + format);\n }\n }\n /**\n * Converts a HSB color to HSL.\n * Conversion formula adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_HSL.\n * @returns An HSLColor object.\n */ toHSL() {\n let saturation = this.saturation / 100;\n let brightness = this.brightness / 100;\n let lightness = brightness * (1 - saturation / 2);\n saturation = lightness === 0 || lightness === 1 ? 0 : (brightness - lightness) / Math.min(lightness, 1 - lightness);\n return new $799cddbef784668f$var$HSLColor((0, $cBgAy$toFixedNumber)(this.hue, 2), (0, $cBgAy$toFixedNumber)(saturation * 100, 2), (0, $cBgAy$toFixedNumber)(lightness * 100, 2), this.alpha);\n }\n /**\n * Converts a HSV color value to RGB.\n * Conversion formula adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB_alternative.\n * @returns An RGBColor object.\n */ toRGB() {\n let hue = this.hue;\n let saturation = this.saturation / 100;\n let brightness = this.brightness / 100;\n let fn = (n, k = (n + hue / 60) % 6)=>brightness - saturation * brightness * Math.max(Math.min(k, 4 - k, 1), 0);\n return new $799cddbef784668f$var$RGBColor(Math.round(fn(5) * 255), Math.round(fn(3) * 255), Math.round(fn(1) * 255), this.alpha);\n }\n clone() {\n return new $799cddbef784668f$var$HSBColor(this.hue, this.saturation, this.brightness, this.alpha);\n }\n getChannelRange(channel) {\n switch(channel){\n case \"hue\":\n return {\n minValue: 0,\n maxValue: 360,\n step: 1,\n pageSize: 15\n };\n case \"saturation\":\n case \"brightness\":\n return {\n minValue: 0,\n maxValue: 100,\n step: 1,\n pageSize: 10\n };\n case \"alpha\":\n return {\n minValue: 0,\n maxValue: 1,\n step: 0.01,\n pageSize: 0.1\n };\n default:\n throw new Error(\"Unknown color channel: \" + channel);\n }\n }\n formatChannelValue(channel, locale) {\n let options;\n let value = this.getChannelValue(channel);\n switch(channel){\n case \"hue\":\n options = {\n style: \"unit\",\n unit: \"degree\",\n unitDisplay: \"narrow\"\n };\n break;\n case \"saturation\":\n case \"brightness\":\n options = {\n style: \"percent\"\n };\n value /= 100;\n break;\n case \"alpha\":\n options = {\n style: \"percent\"\n };\n break;\n default:\n throw new Error(\"Unknown color channel: \" + channel);\n }\n return new (0, $cBgAy$NumberFormatter)(locale, options).format(value);\n }\n getColorSpace() {\n return \"hsb\";\n }\n getColorChannels() {\n return $799cddbef784668f$var$HSBColor.colorChannels;\n }\n constructor(hue, saturation, brightness, alpha){\n super();\n this.hue = hue;\n this.saturation = saturation;\n this.brightness = brightness;\n this.alpha = alpha;\n }\n}\n(0, $cBgAy$swchelperssrc_define_propertymjs)($799cddbef784668f$var$HSBColor, \"colorChannels\", [\n \"hue\",\n \"saturation\",\n \"brightness\"\n]);\n// X = <negative/positive number with/without decimal places>\n// before/after a comma, 0 or more whitespaces are allowed\n// - hsl(X, X%, X%)\n// - hsla(X, X%, X%, X)\nconst $799cddbef784668f$var$HSL_REGEX = /hsl\\(([-+]?\\d+(?:.\\d+)?\\s*,\\s*[-+]?\\d+(?:.\\d+)?%\\s*,\\s*[-+]?\\d+(?:.\\d+)?%)\\)|hsla\\(([-+]?\\d+(?:.\\d+)?\\s*,\\s*[-+]?\\d+(?:.\\d+)?%\\s*,\\s*[-+]?\\d+(?:.\\d+)?%\\s*,\\s*[-+]?\\d(.\\d+)?)\\)/;\nfunction $799cddbef784668f$var$mod(n, m) {\n return (n % m + m) % m;\n}\nclass $799cddbef784668f$var$HSLColor extends $799cddbef784668f$var$Color {\n static parse(value) {\n let m;\n if (m = value.match($799cddbef784668f$var$HSL_REGEX)) {\n var _m_;\n const [h, s, l, a] = ((_m_ = m[1]) !== null && _m_ !== void 0 ? _m_ : m[2]).split(\",\").map((n)=>Number(n.trim().replace(\"%\", \"\")));\n return new $799cddbef784668f$var$HSLColor($799cddbef784668f$var$mod(h, 360), (0, $cBgAy$clamp)(s, 0, 100), (0, $cBgAy$clamp)(l, 0, 100), (0, $cBgAy$clamp)(a !== null && a !== void 0 ? a : 1, 0, 1));\n }\n }\n toString(format) {\n switch(format){\n case \"hex\":\n return this.toRGB().toString(\"hex\");\n case \"hexa\":\n return this.toRGB().toString(\"hexa\");\n case \"hsl\":\n return `hsl(${this.hue}, ${(0, $cBgAy$toFixedNumber)(this.saturation, 2)}%, ${(0, $cBgAy$toFixedNumber)(this.lightness, 2)}%)`;\n case \"css\":\n case \"hsla\":\n return `hsla(${this.hue}, ${(0, $cBgAy$toFixedNumber)(this.saturation, 2)}%, ${(0, $cBgAy$toFixedNumber)(this.lightness, 2)}%, ${this.alpha})`;\n default:\n return this.toFormat(format).toString(format);\n }\n }\n toFormat(format) {\n switch(format){\n case \"hsl\":\n case \"hsla\":\n return this;\n case \"hsb\":\n case \"hsba\":\n return this.toHSB();\n case \"rgb\":\n case \"rgba\":\n return this.toRGB();\n default:\n throw new Error(\"Unsupported color conversion: hsl -> \" + format);\n }\n }\n /**\n * Converts a HSL color to HSB.\n * Conversion formula adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_HSV.\n * @returns An HSBColor object.\n */ toHSB() {\n let saturation = this.saturation / 100;\n let lightness = this.lightness / 100;\n let brightness = lightness + saturation * Math.min(lightness, 1 - lightness);\n saturation = brightness === 0 ? 0 : 2 * (1 - lightness / brightness);\n return new $799cddbef784668f$var$HSBColor((0, $cBgAy$toFixedNumber)(this.hue, 2), (0, $cBgAy$toFixedNumber)(saturation * 100, 2), (0, $cBgAy$toFixedNumber)(brightness * 100, 2), this.alpha);\n }\n /**\n * Converts a HSL color to RGB.\n * Conversion formula adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative.\n * @returns An RGBColor object.\n */ toRGB() {\n let hue = this.hue;\n let saturation = this.saturation / 100;\n let lightness = this.lightness / 100;\n let a = saturation * Math.min(lightness, 1 - lightness);\n let fn = (n, k = (n + hue / 30) % 12)=>lightness - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return new $799cddbef784668f$var$RGBColor(Math.round(fn(0) * 255), Math.round(fn(8) * 255), Math.round(fn(4) * 255), this.alpha);\n }\n clone() {\n return new $799cddbef784668f$var$HSLColor(this.hue, this.saturation, this.lightness, this.alpha);\n }\n getChannelRange(channel) {\n switch(channel){\n case \"hue\":\n return {\n minValue: 0,\n maxValue: 360,\n step: 1,\n pageSize: 15\n };\n case \"saturation\":\n case \"lightness\":\n return {\n minValue: 0,\n maxValue: 100,\n step: 1,\n pageSize: 10\n };\n case \"alpha\":\n return {\n minValue: 0,\n maxValue: 1,\n step: 0.01,\n pageSize: 0.1\n };\n default:\n throw new Error(\"Unknown color channel: \" + channel);\n }\n }\n formatChannelValue(channel, locale) {\n let options;\n let value = this.getChannelValue(channel);\n switch(channel){\n case \"hue\":\n options = {\n style: \"unit\",\n unit: \"degree\",\n unitDisplay: \"narrow\"\n };\n break;\n case \"saturation\":\n case \"lightness\":\n options = {\n style: \"percent\"\n };\n value /= 100;\n break;\n case \"alpha\":\n options = {\n style: \"percent\"\n };\n break;\n default:\n throw new Error(\"Unknown color channel: \" + channel);\n }\n return new (0, $cBgAy$NumberFormatter)(locale, options).format(value);\n }\n getColorSpace() {\n return \"hsl\";\n }\n getColorChannels() {\n return $799cddbef784668f$var$HSLColor.colorChannels;\n }\n constructor(hue, saturation, lightness, alpha){\n super();\n this.hue = hue;\n this.saturation = saturation;\n this.lightness = lightness;\n this.alpha = alpha;\n }\n}\n(0, $cBgAy$swchelperssrc_define_propertymjs)($799cddbef784668f$var$HSLColor, \"colorChannels\", [\n \"hue\",\n \"saturation\",\n \"lightness\"\n]);\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $6e14a98a7f67141d$var$DEFAULT_COLOR = (0, $799cddbef784668f$export$6e865ea70d7724f)(\"#ffffff\");\nfunction $6e14a98a7f67141d$export$6df7f0e2cabc7eef(props) {\n let { value: value , defaultValue: defaultValue , xChannel: xChannel , yChannel: yChannel , onChange: onChange , onChangeEnd: onChangeEnd } = props;\n if (!value && !defaultValue) defaultValue = $6e14a98a7f67141d$var$DEFAULT_COLOR;\n let [color, setColor] = (0, $cBgAy$useControlledState)(value && (0, $799cddbef784668f$export$4cde5df63f53f473)(value), defaultValue && (0, $799cddbef784668f$export$4cde5df63f53f473)(defaultValue), onChange);\n let valueRef = (0, $cBgAy$useRef)(color);\n valueRef.current = color;\n let channels = (0, $cBgAy$useMemo)(()=>valueRef.current.getColorSpaceAxes({\n xChannel: xChannel,\n yChannel: yChannel\n }), [\n xChannel,\n yChannel\n ]);\n let xChannelRange = color.getChannelRange(channels.xChannel);\n let yChannelRange = color.getChannelRange(channels.yChannel);\n let { minValue: minValueX , maxValue: maxValueX , step: stepX , pageSize: pageSizeX } = xChannelRange;\n let { minValue: minValueY , maxValue: maxValueY , step: stepY , pageSize: pageSizeY } = yChannelRange;\n let [isDragging, setDragging] = (0, $cBgAy$useState)(false);\n let isDraggingRef = (0, $cBgAy$useRef)(false).current;\n let xValue = color.getChannelValue(channels.xChannel);\n let yValue = color.getChannelValue(channels.yChannel);\n let setXValue = (v)=>{\n if (v === xValue) return;\n valueRef.current = color.withChannelValue(channels.xChannel, v);\n setColor(valueRef.current);\n };\n let setYValue = (v)=>{\n if (v === yValue) return;\n valueRef.current = color.withChannelValue(channels.yChannel, v);\n setColor(valueRef.current);\n };\n return {\n channels: channels,\n xChannelStep: stepX,\n yChannelStep: stepY,\n xChannelPageStep: pageSizeX,\n yChannelPageStep: pageSizeY,\n value: color,\n setValue (value) {\n let c = (0, $799cddbef784668f$export$4cde5df63f53f473)(value);\n valueRef.current = c;\n setColor(c);\n },\n xValue: xValue,\n setXValue: setXValue,\n yValue: yValue,\n setYValue: setYValue,\n setColorFromPoint (x, y) {\n let newXValue = minValueX + (0, $cBgAy$clamp)(x, 0, 1) * (maxValueX - minValueX);\n let newYValue = minValueY + (1 - (0, $cBgAy$clamp)(y, 0, 1)) * (maxValueY - minValueY);\n let newColor;\n if (newXValue !== xValue) {\n // Round new value to multiple of step, clamp value between min and max\n newXValue = (0, $cBgAy$snapValueToStep)(newXValue, minValueX, maxValueX, stepX);\n newColor = color.withChannelValue(channels.xChannel, newXValue);\n }\n if (newYValue !== yValue) {\n // Round new value to multiple of step, clamp value between min and max\n newYValue = (0, $cBgAy$snapValueToStep)(newYValue, minValueY, maxValueY, stepY);\n newColor = (newColor || color).withChannelValue(channels.yChannel, newYValue);\n }\n if (newColor) setColor(newColor);\n },\n getThumbPosition () {\n let x = (xValue - minValueX) / (maxValueX - minValueX);\n let y = 1 - (yValue - minValueY) / (maxValueY - minValueY);\n return {\n x: x,\n y: y\n };\n },\n incrementX (stepSize) {\n setXValue(xValue + stepSize > maxValueX ? maxValueX : (0, $cBgAy$snapValueToStep)(xValue + stepSize, minValueX, maxValueX, stepX));\n },\n incrementY (stepSize) {\n setYValue(yValue + stepSize > maxValueY ? maxValueY : (0, $cBgAy$snapValueToStep)(yValue + stepSize, minValueY, maxValueY, stepY));\n },\n decrementX (stepSize) {\n setXValue((0, $cBgAy$snapValueToStep)(xValue - stepSize, minValueX, maxValueX, stepX));\n },\n decrementY (stepSize) {\n setYValue((0, $cBgAy$snapValueToStep)(yValue - stepSize, minValueY, maxValueY, stepY));\n },\n setDragging (isDragging) {\n let wasDragging = isDraggingRef;\n isDraggingRef = isDragging;\n if (onChangeEnd && !isDragging && wasDragging) onChangeEnd(valueRef.current);\n setDragging(isDragging);\n },\n isDragging: isDragging,\n getDisplayColor () {\n return color.withChannelValue(\"alpha\", 1);\n }\n };\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $25a25ac0d1624665$export$57bc203e1c9c6d44(props) {\n let { channel: channel , value: value , defaultValue: defaultValue , onChange: onChange , locale: locale , ...otherProps } = props;\n if (value == null && defaultValue == null) throw new Error(\"useColorSliderState requires a value or defaultValue\");\n let [color, setColor] = (0, $cBgAy$useControlledState)(value && (0, $799cddbef784668f$export$4cde5df63f53f473)(value), defaultValue && (0, $799cddbef784668f$export$4cde5df63f53f473)(defaultValue), onChange);\n let sliderState = (0, $cBgAy$useSliderState)({\n ...color.getChannelRange(channel),\n ...otherProps,\n // Unused except in getThumbValueLabel, which is overridden below. null to appease TypeScript.\n numberFormatter: null,\n value: color.getChannelValue(channel),\n onChange (v) {\n setColor(color.withChannelValue(channel, v));\n },\n onChangeEnd (v) {\n // onChange will have already been called with the right value, this is just to trigger onChangeEnd\n if (props.onChangeEnd) props.onChangeEnd(color.withChannelValue(channel, v));\n }\n });\n let { step: step , pageSize: pageSize } = color.getChannelRange(channel);\n return {\n ...sliderState,\n value: color,\n setValue (value) {\n setColor((0, $799cddbef784668f$export$4cde5df63f53f473)(value));\n },\n getDisplayColor () {\n switch(channel){\n case \"hue\":\n return (0, $799cddbef784668f$export$6e865ea70d7724f)(`hsl(${color.getChannelValue(\"hue\")}, 100%, 50%)`);\n case \"lightness\":\n case \"brightness\":\n case \"saturation\":\n case \"red\":\n case \"green\":\n case \"blue\":\n return color.withChannelValue(\"alpha\", 1);\n case \"alpha\":\n return color;\n default:\n throw new Error(\"Unknown color channel: \" + channel);\n }\n },\n getThumbValueLabel () {\n return color.formatChannelValue(channel, locale);\n },\n step: step,\n pageSize: pageSize\n };\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $ee4262c74a467b07$var$DEFAULT_COLOR = (0, $799cddbef784668f$export$6e865ea70d7724f)(\"hsl(0, 100%, 50%)\");\nfunction $ee4262c74a467b07$var$roundToStep(value, step) {\n return Math.round(value / step) * step;\n}\nfunction $ee4262c74a467b07$var$mod(n, m) {\n return (n % m + m) % m;\n}\nfunction $ee4262c74a467b07$var$roundDown(v) {\n let r = Math.floor(v);\n if (r === v) return v - 1;\n else return r;\n}\nfunction $ee4262c74a467b07$var$degToRad(deg) {\n return deg * Math.PI / 180;\n}\nfunction $ee4262c74a467b07$var$radToDeg(rad) {\n return rad * 180 / Math.PI;\n}\n// 0deg = 3 o'clock. increases clockwise\nfunction $ee4262c74a467b07$var$angleToCartesian(angle, radius) {\n let rad = $ee4262c74a467b07$var$degToRad(360 - angle + 90);\n let x = Math.sin(rad) * radius;\n let y = Math.cos(rad) * radius;\n return {\n x: x,\n y: y\n };\n}\nfunction $ee4262c74a467b07$var$cartesianToAngle(x, y, radius) {\n let deg = $ee4262c74a467b07$var$radToDeg(Math.atan2(y / radius, x / radius));\n return (deg + 360) % 360;\n}\nfunction $ee4262c74a467b07$export$f4301076d9336137(props) {\n let { defaultValue: defaultValue , onChange: onChange , onChangeEnd: onChangeEnd } = props;\n if (!props.value && !defaultValue) defaultValue = $ee4262c74a467b07$var$DEFAULT_COLOR;\n let [value, setValue] = (0, $cBgAy$useControlledState)((0, $799cddbef784668f$export$4cde5df63f53f473)(props.value), (0, $799cddbef784668f$export$4cde5df63f53f473)(defaultValue), onChange);\n let valueRef = (0, $cBgAy$useRef)(value);\n valueRef.current = value;\n let channelRange = value.getChannelRange(\"hue\");\n let { minValue: minValueX , maxValue: maxValueX , step: step , pageSize: pageStep } = channelRange;\n let [isDragging, setDragging] = (0, $cBgAy$useState)(false);\n let isDraggingRef = (0, $cBgAy$useRef)(false).current;\n let hue = value.getChannelValue(\"hue\");\n function setHue(v) {\n if (v > 360) // Make sure you can always get back to 0.\n v = 0;\n v = $ee4262c74a467b07$var$roundToStep($ee4262c74a467b07$var$mod(v, 360), step);\n if (hue !== v) {\n let color = value.withChannelValue(\"hue\", v);\n valueRef.current = color;\n setValue(color);\n }\n }\n return {\n value: value,\n step: step,\n pageStep: pageStep,\n setValue (v) {\n let color = (0, $799cddbef784668f$export$4cde5df63f53f473)(v);\n valueRef.current = color;\n setValue(color);\n },\n hue: hue,\n setHue: setHue,\n setHueFromPoint (x, y, radius) {\n setHue($ee4262c74a467b07$var$cartesianToAngle(x, y, radius));\n },\n getThumbPosition (radius) {\n return $ee4262c74a467b07$var$angleToCartesian(value.getChannelValue(\"hue\"), radius);\n },\n increment (stepSize = 1) {\n let s = Math.max(stepSize, step);\n let newValue = hue + s;\n if (newValue >= maxValueX) // Make sure you can always get back to 0.\n newValue = minValueX;\n setHue($ee4262c74a467b07$var$roundToStep($ee4262c74a467b07$var$mod(newValue, 360), s));\n },\n decrement (stepSize = 1) {\n let s = Math.max(stepSize, step);\n if (hue === 0) // We can't just subtract step because this might be the case:\n // |(previous step) - 0| < step size\n setHue($ee4262c74a467b07$var$roundDown(360 / s) * s);\n else setHue($ee4262c74a467b07$var$roundToStep($ee4262c74a467b07$var$mod(hue - s, 360), s));\n },\n setDragging (isDragging) {\n let wasDragging = isDraggingRef;\n isDraggingRef = isDragging;\n if (onChangeEnd && !isDragging && wasDragging) onChangeEnd(valueRef.current);\n setDragging(isDragging);\n },\n isDragging: isDragging,\n getDisplayColor () {\n return value.toFormat(\"hsl\").withChannelValue(\"saturation\", 100).withChannelValue(\"lightness\", 50).withChannelValue(\"alpha\", 1);\n }\n };\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $aa90ad8b2b1d015f$export$5aadd9c0606af5c2(value) {\n return (0, $cBgAy$useMemo)(()=>{\n if (typeof value === \"string\") try {\n return (0, $799cddbef784668f$export$6e865ea70d7724f)(value);\n } catch (err) {\n return undefined;\n }\n return value;\n }, [\n value\n ]);\n}\n\n\n\n\nconst $b335ada08155d9c0$var$MIN_COLOR = (0, $799cddbef784668f$export$6e865ea70d7724f)(\"#000000\");\nconst $b335ada08155d9c0$var$MAX_COLOR = (0, $799cddbef784668f$export$6e865ea70d7724f)(\"#FFFFFF\");\nconst $b335ada08155d9c0$var$MIN_COLOR_INT = $b335ada08155d9c0$var$MIN_COLOR.toHexInt();\nconst $b335ada08155d9c0$var$MAX_COLOR_INT = $b335ada08155d9c0$var$MAX_COLOR.toHexInt();\nfunction $b335ada08155d9c0$export$d52a01683abdfcd6(props) {\n let { value: value , defaultValue: defaultValue , onChange: onChange } = props;\n let { step: step } = $b335ada08155d9c0$var$MIN_COLOR.getChannelRange(\"red\");\n let initialValue = (0, $aa90ad8b2b1d015f$export$5aadd9c0606af5c2)(value);\n let initialDefaultValue = (0, $aa90ad8b2b1d015f$export$5aadd9c0606af5c2)(defaultValue);\n let [colorValue, setColorValue] = (0, $cBgAy$useControlledState)(initialValue, initialDefaultValue, onChange);\n let [inputValue, setInputValue] = (0, $cBgAy$useState)(()=>(value || defaultValue) && colorValue ? colorValue.toString(\"hex\") : \"\");\n let safelySetColorValue = (newColor)=>{\n if (!colorValue || !newColor) {\n setColorValue(newColor);\n return;\n }\n if (newColor.toHexInt() !== colorValue.toHexInt()) {\n setColorValue(newColor);\n return;\n }\n };\n let prevValue = (0, $cBgAy$useRef)(colorValue);\n if (prevValue.current !== colorValue) {\n setInputValue(colorValue ? colorValue.toString(\"hex\") : \"\");\n prevValue.current = colorValue;\n }\n let parsedValue = (0, $cBgAy$useMemo)(()=>{\n let color;\n try {\n color = (0, $799cddbef784668f$export$6e865ea70d7724f)(inputValue.startsWith(\"#\") ? inputValue : `#${inputValue}`);\n } catch (err) {\n color = null;\n }\n return color;\n }, [\n inputValue\n ]);\n let parsed = (0, $cBgAy$useRef)(null);\n parsed.current = parsedValue;\n let commit = ()=>{\n // Set to empty state if input value is empty\n if (!inputValue.length) {\n safelySetColorValue(null);\n setInputValue(value === undefined ? \"\" : colorValue.toString(\"hex\"));\n return;\n }\n // if it failed to parse, then reset input to formatted version of current number\n if (parsed.current == null) {\n setInputValue(colorValue ? colorValue.toString(\"hex\") : \"\");\n return;\n }\n safelySetColorValue(parsed.current);\n // in a controlled state, the numberValue won't change, so we won't go back to our old input without help\n let newColorValue = \"\";\n if (colorValue) newColorValue = colorValue.toString(\"hex\");\n setInputValue(newColorValue);\n };\n let increment = ()=>{\n let newValue = $b335ada08155d9c0$var$addColorValue(parsed.current, step);\n // if we've arrived at the same value that was previously in the state, the\n // input value should be updated to match\n // ex type 4, press increment, highlight the number in the input, type 4 again, press increment\n // you'd be at 5, then incrementing to 5 again, so no re-render would happen and 4 would be left in the input\n if (newValue === colorValue) setInputValue(newValue.toString(\"hex\"));\n safelySetColorValue(newValue);\n };\n let decrement = ()=>{\n let newValue = $b335ada08155d9c0$var$addColorValue(parsed.current, -step);\n // if we've arrived at the same value that was previously in the state, the\n // input value should be updated to match\n // ex type 4, press increment, highlight the number in the input, type 4 again, press increment\n // you'd be at 5, then incrementing to 5 again, so no re-render would happen and 4 would be left in the input\n if (newValue === colorValue) setInputValue(newValue.toString(\"hex\"));\n safelySetColorValue(newValue);\n };\n let incrementToMax = ()=>safelySetColorValue($b335ada08155d9c0$var$MAX_COLOR);\n let decrementToMin = ()=>safelySetColorValue($b335ada08155d9c0$var$MIN_COLOR);\n let validate = (value)=>{\n var _value_match;\n return value === \"\" || !!((_value_match = value.match(/^#?[0-9a-f]{0,6}$/i)) === null || _value_match === void 0 ? void 0 : _value_match[0]);\n };\n return {\n validate: validate,\n colorValue: colorValue,\n inputValue: inputValue,\n setInputValue: setInputValue,\n commit: commit,\n increment: increment,\n incrementToMax: incrementToMax,\n decrement: decrement,\n decrementToMin: decrementToMin\n };\n}\nfunction $b335ada08155d9c0$var$addColorValue(color, step) {\n let newColor = color ? color : $b335ada08155d9c0$var$MIN_COLOR;\n let colorInt = newColor.toHexInt();\n let clampInt = Math.min(Math.max(colorInt + step, $b335ada08155d9c0$var$MIN_COLOR_INT), $b335ada08155d9c0$var$MAX_COLOR_INT);\n if (clampInt !== colorInt) {\n let newColorString = `#${clampInt.toString(16).padStart(6, \"0\").toUpperCase()}`;\n newColor = (0, $799cddbef784668f$export$6e865ea70d7724f)(newColorString);\n }\n return newColor;\n}\n\n\n\n\nexport {$799cddbef784668f$export$6e865ea70d7724f as parseColor, $6e14a98a7f67141d$export$6df7f0e2cabc7eef as useColorAreaState, $25a25ac0d1624665$export$57bc203e1c9c6d44 as useColorSliderState, $ee4262c74a467b07$export$f4301076d9336137 as useColorWheelState, $b335ada08155d9c0$export$d52a01683abdfcd6 as useColorFieldState};\n//# sourceMappingURL=module.js.map\n","import {DragMonitor} from './use-drag-monitor';\nimport {ConnectedDraggable, DraggableId} from './use-draggable';\nimport {ConnectedDroppable} from './use-droppable';\n\nexport type DragSessionStatus =\n | 'dropSuccess'\n | 'dropFail'\n | 'dragging'\n | 'inactive';\n\nexport interface DragSession {\n dragTargetId?: DraggableId;\n status: DragSessionStatus;\n}\n\nexport const draggables = new Map<DraggableId, ConnectedDraggable>();\nexport const droppables = new Map<DraggableId, ConnectedDroppable>();\nexport const dragMonitors = new Map<DraggableId, DragMonitor>();\nexport const dragSession: DragSession = {\n status: 'inactive',\n};\n","import React from 'react';\n\ntype NativeEvent =\n | React.PointerEvent\n | PointerEvent\n | React.DragEvent<HTMLElement>\n | DragEvent;\n\nexport interface InteractableEvent {\n x: number;\n y: number;\n deltaX: number;\n deltaY: number;\n rect: InteractableRect;\n nativeEvent: NativeEvent;\n}\n\nexport interface InteractableRect {\n left: number;\n top: number;\n width: number;\n height: number;\n angle?: number;\n}\n\nexport function interactableEvent({\n e,\n rect,\n deltaX,\n deltaY,\n}: {\n e: NativeEvent;\n rect: InteractableRect;\n deltaX?: number;\n deltaY?: number;\n}): InteractableEvent {\n return {\n rect,\n x: e.clientX,\n y: e.clientY,\n deltaX: deltaX ?? 0,\n deltaY: deltaY ?? 0,\n nativeEvent: e,\n };\n}\n","type InteractionName = null | 'resize' | 'rotate' | 'drag' | 'move';\n\nexport let activeInteraction: InteractionName = null;\n\nexport function setActiveInteraction(name: InteractionName) {\n activeInteraction = name;\n}\n","import {InteractableRect} from '../interactable-event';\n\nexport function domRectToObj(rect: DOMRect): InteractableRect {\n return {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n}\n","// use intersection observer instead of getBoundingClientRect for better performance as this will be called in onPointerMove event\nimport {InteractableRect} from '../interactable-event';\nimport {ConnectedMouseSelectable} from './mouse-selection/use-mouse-selectable';\nimport {DraggableId} from './use-draggable';\nimport {ConnectedDroppable} from './use-droppable';\n\nexport function updateRects(\n targets: Map<DraggableId, ConnectedDroppable | ConnectedMouseSelectable>\n) {\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const {width, height, left, top} = entry.boundingClientRect;\n const [id, target] =\n [...targets].find(\n ([, target]) => target.ref.current === entry.target\n ) || [];\n if (id == null || target == null) return;\n\n const rect: InteractableRect = {\n width,\n height,\n left,\n top,\n };\n targets.set(id, {...target, rect});\n });\n observer.disconnect();\n });\n\n [...targets.values()].forEach(target => {\n if (target.ref.current) {\n observer.observe(target.ref.current);\n }\n });\n}\n","import React, {RefObject, useLayoutEffect, useRef} from 'react';\nimport {draggables, dragMonitors, dragSession, droppables} from './drag-state';\nimport {\n InteractableEvent,\n interactableEvent,\n InteractableRect,\n} from '../interactable-event';\nimport {activeInteraction, setActiveInteraction} from '../active-interaction';\nimport {domRectToObj} from '../utils/dom-rect-to-obj';\nimport {updateRects} from './update-rects';\nimport {useGlobalListeners} from '@react-aria/utils';\nimport {DragMonitor} from './use-drag-monitor';\nimport {NativeFileDraggable} from './use-droppable';\n\ninterface DragState {\n currentRect?: InteractableRect;\n lastPosition: {x: number; y: number};\n clickedEl?: HTMLElement;\n}\n\nexport type DragPreviewRenderer = (\n draggable: ConnectedDraggable,\n callback: (node: HTMLElement) => void\n) => void;\n\nexport type DraggableId = string | number | object;\n\nexport interface ConnectedDraggable<T = any> {\n type: string;\n id: DraggableId;\n getData: () => T;\n ref: RefObject<HTMLElement>;\n}\n\n// Either draggable from within the app, or file dragged in from the desktop\nexport type MixedDraggable = ConnectedDraggable | NativeFileDraggable;\n\ninterface UseDragProps extends ConnectedDraggable {\n disabled?: boolean;\n onDragStart?: (e: InteractableEvent, target: ConnectedDraggable) => void;\n onDragMove?: (e: InteractableEvent, target: ConnectedDraggable) => void;\n onDragEnd?: (e: InteractableEvent, target: ConnectedDraggable) => void;\n preview?: RefObject<DragPreviewRenderer>;\n hidePreview?: boolean;\n}\nexport function useDraggable({\n id,\n disabled,\n ref,\n preview,\n hidePreview,\n ...options\n}: UseDragProps) {\n const dragHandleRef = useRef<HTMLButtonElement>(null);\n const {addGlobalListener, removeAllGlobalListeners} = useGlobalListeners();\n\n const state = useRef<DragState>({\n lastPosition: {x: 0, y: 0},\n }).current;\n\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n useLayoutEffect(() => {\n if (!disabled) {\n draggables.set(id, {\n ...draggables.get(id),\n id,\n ref,\n type: optionsRef.current.type,\n getData: optionsRef.current.getData,\n });\n } else {\n draggables.delete(id);\n }\n return () => {\n draggables.delete(id);\n };\n }, [id, disabled, optionsRef, ref]);\n\n // notify monitors connected to the same drag type as this draggable\n const notifyMonitors = (callback: (m: DragMonitor) => void) => {\n dragMonitors.forEach(monitor => {\n if (monitor.type === draggables.get(id)?.type) {\n callback(monitor);\n }\n });\n };\n\n const onDragStart = (e: React.DragEvent<HTMLElement>) => {\n const draggable = draggables.get(id);\n const el = ref.current;\n const clickedOnHandle =\n !dragHandleRef.current ||\n !state.clickedEl ||\n dragHandleRef.current.contains(state.clickedEl);\n\n // if another interaction is in progress (rotate, resize, drag etc.), bail\n if (activeInteraction || !el || !draggable || !clickedOnHandle) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n updateRects(droppables);\n setActiveInteraction('drag');\n\n // hide default browser ghost image\n if (hidePreview) {\n hideNativeGhostImage(e);\n }\n // this will hide default browser cursor icon, if \"dropEffect\" is not set in dragOver/dragEnter\n e.dataTransfer.effectAllowed = 'move';\n\n state.lastPosition = {x: e.clientX, y: e.clientY};\n state.currentRect = domRectToObj(el.getBoundingClientRect());\n const ie = interactableEvent({rect: state.currentRect!, e});\n\n // If there is a preview option, use it to render a custom preview image that will\n // appear under the pointer while dragging. If not, the element itself is dragged by the browser.\n if (preview?.current) {\n preview.current(draggable, node => {\n e.dataTransfer.setDragImage(node, 0, 0);\n });\n }\n\n dragSession.status = 'dragging';\n dragSession.dragTargetId = id;\n if (ref.current) {\n ref.current.dataset.dragging = 'true';\n }\n\n optionsRef.current.onDragStart?.(ie, draggable);\n\n // wait until next frame so changes made in \"onDragStart\" are reflected in drag monitors\n requestAnimationFrame(() => {\n notifyMonitors(m => m.onDragStart?.(ie, draggable));\n });\n\n // firefox does not provide clientX/clientY in \"onDrag\", need to listen for dragOver on window instead\n addGlobalListener(window, 'dragover', onDragOver, true);\n };\n\n const onDragOver = (e: React.DragEvent<HTMLElement> | DragEvent) => {\n e.preventDefault();\n\n if (!state.currentRect) return;\n\n const deltaX = e.clientX - state.lastPosition.x;\n const deltaY = e.clientY - state.lastPosition.y;\n\n const newRect = {\n ...state.currentRect,\n left: state.currentRect.left + deltaX,\n top: state.currentRect.top + deltaY,\n };\n\n const ie = interactableEvent({rect: newRect, e, deltaX, deltaY});\n\n const target = draggables.get(id);\n if (target) {\n optionsRef.current.onDragMove?.(ie, target);\n notifyMonitors(m => m.onDragMove?.(ie, target));\n }\n\n state.lastPosition = {x: e.clientX, y: e.clientY};\n state.currentRect = newRect;\n };\n\n const onDragEnd = (e: React.DragEvent<HTMLElement>) => {\n removeAllGlobalListeners();\n if (!state.currentRect) return;\n\n setActiveInteraction(null);\n if (emptyImage) {\n emptyImage.remove();\n }\n\n const ie = interactableEvent({rect: state.currentRect, e});\n\n const draggable = draggables.get(id);\n if (draggable) {\n optionsRef.current.onDragEnd?.(ie, draggable);\n notifyMonitors(m => m.onDragEnd?.(ie, draggable, dragSession!.status));\n }\n\n // wait a frame before clearing so monitors have a chance to use drag session status\n requestAnimationFrame(() => {\n dragSession.dragTargetId = undefined;\n dragSession.status = 'inactive';\n if (ref.current) {\n delete ref.current.dataset.dragging;\n }\n });\n };\n\n const draggableProps = {\n draggable: !disabled,\n onDragStart,\n onDragEnd,\n onPointerDown: (e: React.PointerEvent) => {\n state.clickedEl = e.target as HTMLElement;\n },\n };\n\n return {draggableProps, dragHandleRef};\n}\n\nlet emptyImage: HTMLImageElement | undefined;\nfunction hideNativeGhostImage(e: React.DragEvent) {\n if (!emptyImage) {\n emptyImage = new Image();\n // image needs to be in the dom to prevent \"globe\" icon in chrome\n document.body.append(emptyImage);\n emptyImage.src =\n 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n }\n\n e.dataTransfer.setDragImage(emptyImage, 0, 0);\n}\n","import {UploadedFile} from '../../../uploads/uploaded-file';\n\nexport async function* readFilesFromDataTransfer(dataTransfer: DataTransfer) {\n for (const item of dataTransfer.items) {\n if (item.kind === 'file') {\n if (typeof item.webkitGetAsEntry === 'function') {\n const entry: FileSystemEntry | null = item.webkitGetAsEntry();\n if (!entry) continue;\n\n if (entry.isFile) {\n if (entry.name === '.DS_Store') continue;\n yield new UploadedFile(item.getAsFile()!, entry.fullPath);\n } else if (entry.isDirectory) {\n yield* getEntries(entry as FileSystemDirectoryEntry);\n }\n } else {\n const file = item.getAsFile();\n if (!file || file.name === '.DS_Store') continue;\n yield new UploadedFile(file, (item as any).fullPath);\n }\n }\n }\n}\n\nasync function* getEntries(item: FileSystemDirectoryEntry): AsyncIterable<any> {\n const reader = item.createReader();\n\n // We must call readEntries repeatedly because there may be a limit to the\n // number of entries that are returned at once.\n let entries: FileSystemEntry[];\n do {\n entries = await new Promise((resolve, reject) => {\n reader.readEntries(resolve, reject);\n });\n\n for (const entry of entries) {\n if (entry.isFile) {\n if (entry.name === '.DS_Store') continue;\n const file = await getEntryFile(entry as FileSystemFileEntry);\n yield new UploadedFile(file, entry.fullPath);\n } else if (entry.isDirectory) {\n yield* getEntries(entry as FileSystemDirectoryEntry);\n }\n }\n } while (entries.length > 0);\n}\n\nfunction getEntryFile(entry: FileSystemFileEntry): Promise<File> {\n return new Promise((resolve, reject) => entry.file(resolve, reject));\n}\n","export async function asyncIterableToArray<T>(\n iterator: AsyncIterable<T>\n): Promise<T[]> {\n const items: T[] = [];\n for await (const item of iterator) {\n items.push(item);\n }\n return items;\n}\n","import React, {RefObject, useLayoutEffect, useRef} from 'react';\nimport {draggables, dragSession, droppables} from './drag-state';\nimport {readFilesFromDataTransfer} from './read-files-from-data-transfer';\nimport {asyncIterableToArray} from '@common/utils/array/async-iterable-to-array';\nimport {InteractableRect} from '../interactable-event';\nimport {DraggableId, MixedDraggable} from './use-draggable';\nimport {Simulate} from 'react-dom/test-utils';\nimport {UploadedFile} from '@common/uploads/uploaded-file';\n\nexport interface ConnectedDroppable {\n id: DraggableId;\n rect?: InteractableRect;\n disabled?: boolean;\n ref: RefObject<HTMLElement>;\n}\n\n// File dragged in from desktop\nexport interface NativeFileDraggable {\n type: 'nativeFile';\n el: null;\n ref: null;\n getData: () => Promise<UploadedFile[]>;\n}\n\ninterface UseDroppableProps<T extends HTMLElement> {\n id: DraggableId;\n disabled?: boolean;\n types: ('nativeFile' | string)[];\n ref: RefObject<T>;\n // this will fire dragEnter/dragLeave/dragOver events when same element is both draggable and drop target and dragging target over itself. Used for showing line previews before/after element during sort.\n allowDragEventsFromItself?: boolean;\n onDragEnter?: (target: MixedDraggable) => void;\n onDragLeave?: (target: MixedDraggable) => void;\n onDragOver?: (\n target: MixedDraggable,\n e: React.DragEvent<HTMLElement>\n ) => void;\n // Handler that is called after draggable is held over droppable for a period of time.\n // This typically opens the item so that the user can drop within it.\n onDropActivate?: (e: MixedDraggable) => void;\n onDrop?: (target: MixedDraggable) => void | Promise<void> | false;\n acceptsDrop?: (target: MixedDraggable) => boolean;\n}\n\ninterface DroppableState {\n dragOverElements: Set<Element>;\n dropActivateTimer: ReturnType<typeof setTimeout> | undefined;\n}\n\nconst DROP_ACTIVATE_TIMEOUT = 400;\n\nexport function useDroppable<T extends HTMLElement>({\n id,\n disabled,\n ref,\n ...options\n}: UseDroppableProps<T>) {\n const state = useRef<DroppableState>({\n dragOverElements: new Set<Element>(),\n dropActivateTimer: undefined,\n }).current;\n\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n useLayoutEffect(() => {\n droppables.set(id, {\n ...droppables.get(id),\n disabled,\n id,\n ref,\n });\n return () => {\n droppables.delete(id);\n };\n }, [id, optionsRef, disabled, ref]);\n\n // check if drop target accepts drag target\n const canDrop = (draggable: MixedDraggable): boolean => {\n const options = optionsRef.current;\n\n const allowEventsOnSelf =\n options.allowDragEventsFromItself ||\n ref.current !== draggable.ref?.current;\n\n return !!(\n draggable?.type &&\n allowEventsOnSelf &&\n options.types.includes(draggable.type) &&\n (!options.acceptsDrop || options.acceptsDrop(draggable))\n );\n };\n\n const fireDragLeave = (e: React.DragEvent<HTMLElement>) => {\n const draggable = getDraggable(e);\n if (draggable) {\n optionsRef.current.onDragLeave?.(draggable);\n }\n };\n\n const onDragEnter = (e: React.DragEvent<HTMLElement>) => {\n e.stopPropagation();\n\n state.dragOverElements.add(e.target as Element);\n if (state.dragOverElements.size > 1) {\n return;\n }\n\n const draggable = getDraggable(e);\n if (draggable && canDrop(draggable)) {\n optionsRef.current.onDragEnter?.(draggable);\n\n clearTimeout(state.dropActivateTimer);\n if (typeof optionsRef.current.onDropActivate === 'function') {\n state.dropActivateTimer = setTimeout(() => {\n if (draggable) {\n optionsRef.current.onDropActivate?.(draggable);\n }\n }, DROP_ACTIVATE_TIMEOUT);\n }\n }\n };\n\n const onDragLeave = (e: React.DragEvent<HTMLElement>) => {\n e.stopPropagation();\n\n // Track all the targets of dragenter events in a set, and remove them\n // in dragleave. When the set becomes empty, we've left the drop target completely.\n // We must also remove any elements that are no longer in the DOM, because dragleave\n // events will never be fired for these. This can happen, for example, with drop\n // indicators between items, which disappear when the drop target changes.\n state.dragOverElements.delete(e.target as Element);\n for (const element of state.dragOverElements) {\n if (!e.currentTarget.contains(element)) {\n state.dragOverElements.delete(element);\n }\n }\n\n if (state.dragOverElements.size > 0) {\n return;\n }\n\n const draggable = getDraggable(e);\n if (draggable && canDrop(draggable)) {\n fireDragLeave(e);\n clearTimeout(state.dropActivateTimer);\n }\n };\n\n const onDrop = async (e: React.DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n state.dragOverElements.clear();\n\n fireDragLeave(e);\n clearTimeout(state.dropActivateTimer);\n\n const draggable = getDraggable(e);\n if (draggable) {\n optionsRef.current.onDragLeave?.(draggable);\n\n // drop target does not accept this type of droppable\n if (!canDrop(draggable)) {\n if (dragSession.status !== 'inactive') {\n dragSession.status = 'dropFail';\n }\n // drop target accepts this type, but it might still reject the drop in callback\n } else {\n // allow callback to mark drop as failed\n const dropResult = optionsRef.current.onDrop?.(draggable);\n\n // drag session will only be active for draggables within the app, never for files dragged in from desktop\n if (dragSession.status !== 'inactive') {\n dragSession.status =\n dropResult === false ? 'dropFail' : 'dropSuccess';\n }\n }\n }\n };\n\n const droppableProps = {\n onDragOver: (e: React.DragEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n const draggable = getDraggable(e);\n if (draggable && canDrop(draggable)) {\n optionsRef.current.onDragOver?.(draggable, e);\n }\n },\n onDragEnter,\n onDragLeave,\n onDrop,\n };\n\n return {\n droppableProps: disabled ? {} : droppableProps,\n };\n}\n\nfunction getDraggable(\n e: React.DragEvent<HTMLElement>\n): MixedDraggable | undefined {\n if (dragSession.dragTargetId != null) {\n return draggables.get(dragSession.dragTargetId);\n } else if (e.dataTransfer.types.includes('Files')) {\n return {\n type: 'nativeFile',\n el: null,\n ref: null,\n getData: () => {\n return asyncIterableToArray(readFilesFromDataTransfer(e.dataTransfer));\n },\n };\n }\n}\n","import {clamp} from '../number/clamp';\n\nexport function moveItemInArray<T = any>(\n array: T[],\n fromIndex: number,\n toIndex: number\n): T[] {\n const from = clamp(fromIndex, 0, array.length - 1);\n const to = clamp(toIndex, 0, array.length - 1);\n\n if (from === to) {\n return array;\n }\n\n const target = array[from];\n const delta = to < from ? -1 : 1;\n\n for (let i = from; i !== to; i += delta) {\n array[i] = array[i + delta];\n }\n\n array[to] = target;\n\n return array;\n}\n","export function moveItemInNewArray<T>(\n array: T[],\n from: number,\n to: number\n): T[] {\n const newArray = array.slice();\n newArray.splice(\n to < 0 ? newArray.length + to : to,\n 0,\n newArray.splice(from, 1)[0]\n );\n\n return newArray;\n}\n","import {DraggableId, DragPreviewRenderer, useDraggable} from './use-draggable';\nimport {useDroppable} from './use-droppable';\nimport {RefObject, useEffect, useRef} from 'react';\nimport {getScrollParent, mergeProps} from '@react-aria/utils';\nimport {moveItemInArray} from '@common/utils/array/move-item-in-array';\nimport {droppables} from './drag-state';\nimport {moveItemInNewArray} from '@common/utils/array/move-item-in-new-array';\nimport {updateRects} from '@common/ui/interactions/dnd/update-rects';\n\nlet sortSession: null | {\n // items in this list will be moved when user is sorting\n sortables: DraggableId[];\n\n // sortable user started dragging to start this session\n activeSortable: DraggableId;\n activeIndex: number;\n\n // final index sortable was dropped in and should be moved to\n finalIndex: number;\n\n // drop position for displaying line preview\n dropPosition: DropPosition;\n // element that currently has a line preview at the top or bottom\n linePreviewEl?: HTMLElement;\n scrollParent?: Element;\n scrollListener: () => void;\n} = null;\n\nexport type DropPosition = 'before' | 'after' | null;\n\nexport interface UseSortableProps {\n item: DraggableId;\n items: DraggableId[];\n onSortStart?: () => void;\n onSortEnd?: (oldIndex: number, newIndex: number) => void;\n onDragEnd?: () => void;\n onDropPositionChange?: (dropPosition: DropPosition) => void;\n ref: RefObject<HTMLElement>;\n type: string;\n preview?: RefObject<DragPreviewRenderer>;\n previewVariant?: 'line' | 'liveSort';\n disabled?: boolean;\n}\nexport function useSortable({\n item,\n items,\n type,\n ref,\n onSortEnd,\n onSortStart,\n onDragEnd,\n preview,\n disabled,\n onDropPositionChange,\n previewVariant = 'liveSort',\n}: UseSortableProps) {\n const dropPosition = useRef<DropPosition>(null);\n\n // todo: issue with sorting after scrolling menu editor item list\n\n // update sortables and active index, in case we lazy load more items while sorting\n useEffect(() => {\n if (sortSession && sortSession.sortables.length !== items.length) {\n sortSession.sortables = [...items];\n sortSession.activeIndex = items.indexOf(item);\n }\n }, [items, item]);\n\n const {draggableProps, dragHandleRef} = useDraggable({\n id: item,\n ref,\n type,\n preview,\n disabled,\n onDragStart: () => {\n dropPosition.current = null;\n sortSession = {\n sortables: [...items],\n activeSortable: item,\n activeIndex: items.indexOf(item),\n finalIndex: items.indexOf(item),\n dropPosition: null,\n scrollParent: ref.current ? getScrollParent(ref.current) : undefined,\n scrollListener: () => {\n updateRects(droppables);\n },\n };\n\n if (previewVariant === 'liveSort') {\n addSortStyles();\n }\n onSortStart?.();\n sortSession.scrollParent?.addEventListener(\n 'scroll',\n sortSession.scrollListener\n );\n },\n onDragEnd: () => {\n if (!sortSession) return;\n\n if (previewVariant === 'liveSort') {\n removeSortStyles();\n }\n\n sortSession.dropPosition = null;\n onDropPositionChange?.(sortSession.dropPosition);\n if (sortSession.activeIndex !== sortSession.finalIndex) {\n onSortEnd?.(sortSession.activeIndex, sortSession.finalIndex);\n }\n sortSession.scrollParent?.removeEventListener(\n 'scroll',\n sortSession.scrollListener\n );\n clearLinePreview();\n // call \"onDragEnd\" after \"onSortEnd\", so listener has a chance to use sort session data\n onDragEnd?.();\n sortSession = null;\n },\n getData: () => {},\n });\n\n const {droppableProps} = useDroppable({\n id: item,\n ref,\n types: [type],\n disabled,\n allowDragEventsFromItself: true,\n onDragOver: (target, e) => {\n if (!sortSession || previewVariant !== 'line') {\n return;\n }\n\n const previousPosition = sortSession.dropPosition;\n let newPosition: DropPosition = null;\n\n const rect = droppables.get(item)?.rect;\n if (rect) {\n const midY = rect.top + rect.height / 2;\n if (e.clientY <= midY) {\n newPosition = 'before';\n } else if (e.clientY >= midY) {\n newPosition = 'after';\n }\n }\n\n if (newPosition !== previousPosition) {\n const overIndex = sortSession.sortables.indexOf(item);\n sortSession.dropPosition = newPosition;\n onDropPositionChange?.(sortSession.dropPosition);\n\n clearLinePreview();\n if (ref.current) {\n if (sortSession.dropPosition === 'after') {\n addLinePreview(ref.current, 'bottom');\n } else {\n // if it's the first row, add preview to the top border, as there's no previous element\n if (overIndex === 0) {\n addLinePreview(ref.current, 'top');\n // otherwise add preview to the bottom border of the previous row\n } else {\n const droppableId = sortSession.sortables[overIndex - 1];\n const droppable = droppables.get(droppableId);\n if (droppable?.ref.current) {\n addLinePreview(droppable.ref.current, 'bottom');\n }\n }\n }\n }\n\n const itemIndex = items.indexOf(item);\n\n // don't move item at all if hovering over itself\n if (sortSession.activeIndex === itemIndex) {\n sortSession.finalIndex = sortSession.activeIndex;\n return;\n }\n\n // adjust final drop index based on whether we're dropping drag target after or before it's original index\n // this is needed, so we get the same index if target is dropped after current item or before next item\n const dragDirection =\n overIndex > sortSession.activeIndex ? 'after' : 'before';\n if (dragDirection === 'after') {\n sortSession.finalIndex =\n sortSession.dropPosition === 'before' ? itemIndex - 1 : itemIndex;\n } else {\n sortSession.finalIndex =\n sortSession.dropPosition === 'after' ? itemIndex + 1 : itemIndex;\n }\n }\n },\n onDragEnter: () => {\n if (!sortSession || previewVariant === 'line') return;\n\n const overIndex = sortSession.sortables.indexOf(item);\n const oldIndex = sortSession.sortables.indexOf(\n sortSession.activeSortable\n );\n\n moveItemInArray(sortSession.sortables, oldIndex, overIndex);\n const rects = sortSession.sortables.map(s => droppables.get(s)?.rect);\n\n sortSession.sortables.forEach((sortable, index) => {\n if (!sortSession) return;\n\n const newRects = moveItemInNewArray(\n rects,\n overIndex,\n sortSession.activeIndex\n );\n const oldRect = rects[index];\n const newRect = newRects[index];\n const sortableTarget = droppables.get(sortable);\n\n if (sortableTarget?.ref.current && newRect && oldRect) {\n const x = newRect.left - oldRect.left;\n const y = newRect.top - oldRect.top;\n sortableTarget.ref.current.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n }\n });\n\n sortSession.finalIndex = overIndex;\n },\n onDragLeave: () => {\n if (!sortSession || previewVariant !== 'line') {\n return;\n }\n sortSession.dropPosition = null;\n onDropPositionChange?.(sortSession.dropPosition);\n },\n });\n\n return {\n sortableProps: {...mergeProps(draggableProps, droppableProps)},\n dragHandleRef,\n };\n}\n\nconst transition = 'transform 0.2s cubic-bezier(0.2, 0, 0, 1)';\n\nfunction addSortStyles() {\n if (!sortSession) return;\n sortSession.sortables.forEach((sortable, index) => {\n const droppable = droppables.get(sortable);\n if (!droppable?.ref.current) return;\n\n droppable.ref.current.style.transition = transition;\n\n if (sortSession?.activeIndex === index) {\n droppable.ref.current.style.opacity = '0.4';\n }\n });\n}\n\n// clear any styles and transforms applied to sortables during sorting\nfunction removeSortStyles() {\n if (!sortSession) return;\n sortSession.sortables.forEach(sortable => {\n const droppable = droppables.get(sortable);\n if (droppable?.ref.current) {\n droppable.ref.current.style.transform = '';\n droppable.ref.current.style.transition = '';\n droppable.ref.current.style.opacity = '';\n droppable.ref.current.style.zIndex = '';\n }\n });\n}\n\nfunction clearLinePreview() {\n if (sortSession?.linePreviewEl) {\n sortSession.linePreviewEl.style.borderBottomColor = '';\n sortSession.linePreviewEl.style.borderTopColor = '';\n sortSession.linePreviewEl = undefined;\n }\n}\n\nfunction addLinePreview(el: HTMLElement, side: 'top' | 'bottom') {\n const color = 'rgb(var(--be-primary))';\n if (side === 'top') {\n el.style.borderTopColor = color;\n } else {\n el.style.borderBottomColor = color;\n }\n if (sortSession) {\n sortSession.linePreviewEl = el;\n }\n}\n","'use strict'\n\nfunction _process (v, mod) {\n var i\n var r\n\n if (typeof mod === 'function') {\n r = mod(v)\n if (r !== undefined) {\n v = r\n }\n } else if (Array.isArray(mod)) {\n for (i = 0; i < mod.length; i++) {\n r = mod[i](v)\n if (r !== undefined) {\n v = r\n }\n }\n }\n\n return v\n}\n\nfunction parseKey (key, val) {\n // detect negative index notation\n if (key[0] === '-' && Array.isArray(val) && /^-\\d+$/.test(key)) {\n return val.length + parseInt(key, 10)\n }\n return key\n}\n\nfunction isIndex (k) {\n return /^\\d+$/.test(k)\n}\n\nfunction isObject (val) {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nfunction isArrayOrObject (val) {\n return Object(val) === val\n}\n\nfunction isEmptyObject (val) {\n return Object.keys(val).length === 0\n}\n\nvar blacklist = ['__proto__', 'prototype', 'constructor']\nvar blacklistFilter = function (part) { return blacklist.indexOf(part) === -1 }\n\nfunction parsePath (path, sep) {\n if (path.indexOf('[') >= 0) {\n path = path.replace(/\\[/g, sep).replace(/]/g, '')\n }\n\n var parts = path.split(sep)\n\n var check = parts.filter(blacklistFilter)\n\n if (check.length !== parts.length) {\n throw Error('Refusing to update blacklisted property ' + path)\n }\n\n return parts\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction DotObject (separator, override, useArray, useBrackets) {\n if (!(this instanceof DotObject)) {\n return new DotObject(separator, override, useArray, useBrackets)\n }\n\n if (typeof override === 'undefined') override = false\n if (typeof useArray === 'undefined') useArray = true\n if (typeof useBrackets === 'undefined') useBrackets = true\n this.separator = separator || '.'\n this.override = override\n this.useArray = useArray\n this.useBrackets = useBrackets\n this.keepArray = false\n\n // contains touched arrays\n this.cleanup = []\n}\n\nvar dotDefault = new DotObject('.', false, true, true)\nfunction wrap (method) {\n return function () {\n return dotDefault[method].apply(dotDefault, arguments)\n }\n}\n\nDotObject.prototype._fill = function (a, obj, v, mod) {\n var k = a.shift()\n\n if (a.length > 0) {\n obj[k] = obj[k] || (this.useArray && isIndex(a[0]) ? [] : {})\n\n if (!isArrayOrObject(obj[k])) {\n if (this.override) {\n obj[k] = {}\n } else {\n if (!(isArrayOrObject(v) && isEmptyObject(v))) {\n throw new Error(\n 'Trying to redefine `' + k + '` which is a ' + typeof obj[k]\n )\n }\n\n return\n }\n }\n\n this._fill(a, obj[k], v, mod)\n } else {\n if (!this.override && isArrayOrObject(obj[k]) && !isEmptyObject(obj[k])) {\n if (!(isArrayOrObject(v) && isEmptyObject(v))) {\n throw new Error(\"Trying to redefine non-empty obj['\" + k + \"']\")\n }\n\n return\n }\n\n obj[k] = _process(v, mod)\n }\n}\n\n/**\n *\n * Converts an object with dotted-key/value pairs to it's expanded version\n *\n * Optionally transformed by a set of modifiers.\n *\n * Usage:\n *\n * var row = {\n * 'nr': 200,\n * 'doc.name': ' My Document '\n * }\n *\n * var mods = {\n * 'doc.name': [_s.trim, _s.underscored]\n * }\n *\n * dot.object(row, mods)\n *\n * @param {Object} obj\n * @param {Object} mods\n */\nDotObject.prototype.object = function (obj, mods) {\n var self = this\n\n Object.keys(obj).forEach(function (k) {\n var mod = mods === undefined ? null : mods[k]\n // normalize array notation.\n var ok = parsePath(k, self.separator).join(self.separator)\n\n if (ok.indexOf(self.separator) !== -1) {\n self._fill(ok.split(self.separator), obj, obj[k], mod)\n delete obj[k]\n } else {\n obj[k] = _process(obj[k], mod)\n }\n })\n\n return obj\n}\n\n/**\n * @param {String} path dotted path\n * @param {String} v value to be set\n * @param {Object} obj object to be modified\n * @param {Function|Array} mod optional modifier\n */\nDotObject.prototype.str = function (path, v, obj, mod) {\n var ok = parsePath(path, this.separator).join(this.separator)\n\n if (path.indexOf(this.separator) !== -1) {\n this._fill(ok.split(this.separator), obj, v, mod)\n } else {\n obj[path] = _process(v, mod)\n }\n\n return obj\n}\n\n/**\n *\n * Pick a value from an object using dot notation.\n *\n * Optionally remove the value\n *\n * @param {String} path\n * @param {Object} obj\n * @param {Boolean} remove\n */\nDotObject.prototype.pick = function (path, obj, remove, reindexArray) {\n var i\n var keys\n var val\n var key\n var cp\n\n keys = parsePath(path, this.separator)\n for (i = 0; i < keys.length; i++) {\n key = parseKey(keys[i], obj)\n if (obj && typeof obj === 'object' && key in obj) {\n if (i === keys.length - 1) {\n if (remove) {\n val = obj[key]\n if (reindexArray && Array.isArray(obj)) {\n obj.splice(key, 1)\n } else {\n delete obj[key]\n }\n if (Array.isArray(obj)) {\n cp = keys.slice(0, -1).join('.')\n if (this.cleanup.indexOf(cp) === -1) {\n this.cleanup.push(cp)\n }\n }\n return val\n } else {\n return obj[key]\n }\n } else {\n obj = obj[key]\n }\n } else {\n return undefined\n }\n }\n if (remove && Array.isArray(obj)) {\n obj = obj.filter(function (n) {\n return n !== undefined\n })\n }\n return obj\n}\n/**\n *\n * Delete value from an object using dot notation.\n *\n * @param {String} path\n * @param {Object} obj\n * @return {any} The removed value\n */\nDotObject.prototype.delete = function (path, obj) {\n return this.remove(path, obj, true)\n}\n\n/**\n *\n * Remove value from an object using dot notation.\n *\n * Will remove multiple items if path is an array.\n * In this case array indexes will be retained until all\n * removals have been processed.\n *\n * Use dot.delete() to automatically re-index arrays.\n *\n * @param {String|Array<String>} path\n * @param {Object} obj\n * @param {Boolean} reindexArray\n * @return {any} The removed value\n */\nDotObject.prototype.remove = function (path, obj, reindexArray) {\n var i\n\n this.cleanup = []\n if (Array.isArray(path)) {\n for (i = 0; i < path.length; i++) {\n this.pick(path[i], obj, true, reindexArray)\n }\n if (!reindexArray) {\n this._cleanup(obj)\n }\n return obj\n } else {\n return this.pick(path, obj, true, reindexArray)\n }\n}\n\nDotObject.prototype._cleanup = function (obj) {\n var ret\n var i\n var keys\n var root\n if (this.cleanup.length) {\n for (i = 0; i < this.cleanup.length; i++) {\n keys = this.cleanup[i].split('.')\n root = keys.splice(0, -1).join('.')\n ret = root ? this.pick(root, obj) : obj\n ret = ret[keys[0]].filter(function (v) {\n return v !== undefined\n })\n this.set(this.cleanup[i], ret, obj)\n }\n this.cleanup = []\n }\n}\n\n/**\n * Alias method for `dot.remove`\n *\n * Note: this is not an alias for dot.delete()\n *\n * @param {String|Array<String>} path\n * @param {Object} obj\n * @param {Boolean} reindexArray\n * @return {any} The removed value\n */\nDotObject.prototype.del = DotObject.prototype.remove\n\n/**\n *\n * Move a property from one place to the other.\n *\n * If the source path does not exist (undefined)\n * the target property will not be set.\n *\n * @param {String} source\n * @param {String} target\n * @param {Object} obj\n * @param {Function|Array} mods\n * @param {Boolean} merge\n */\nDotObject.prototype.move = function (source, target, obj, mods, merge) {\n if (typeof mods === 'function' || Array.isArray(mods)) {\n this.set(target, _process(this.pick(source, obj, true), mods), obj, merge)\n } else {\n merge = mods\n this.set(target, this.pick(source, obj, true), obj, merge)\n }\n\n return obj\n}\n\n/**\n *\n * Transfer a property from one object to another object.\n *\n * If the source path does not exist (undefined)\n * the property on the other object will not be set.\n *\n * @param {String} source\n * @param {String} target\n * @param {Object} obj1\n * @param {Object} obj2\n * @param {Function|Array} mods\n * @param {Boolean} merge\n */\nDotObject.prototype.transfer = function (\n source,\n target,\n obj1,\n obj2,\n mods,\n merge\n) {\n if (typeof mods === 'function' || Array.isArray(mods)) {\n this.set(\n target,\n _process(this.pick(source, obj1, true), mods),\n obj2,\n merge\n )\n } else {\n merge = mods\n this.set(target, this.pick(source, obj1, true), obj2, merge)\n }\n\n return obj2\n}\n\n/**\n *\n * Copy a property from one object to another object.\n *\n * If the source path does not exist (undefined)\n * the property on the other object will not be set.\n *\n * @param {String} source\n * @param {String} target\n * @param {Object} obj1\n * @param {Object} obj2\n * @param {Function|Array} mods\n * @param {Boolean} merge\n */\nDotObject.prototype.copy = function (source, target, obj1, obj2, mods, merge) {\n if (typeof mods === 'function' || Array.isArray(mods)) {\n this.set(\n target,\n _process(\n // clone what is picked\n JSON.parse(JSON.stringify(this.pick(source, obj1, false))),\n mods\n ),\n obj2,\n merge\n )\n } else {\n merge = mods\n this.set(target, this.pick(source, obj1, false), obj2, merge)\n }\n\n return obj2\n}\n\n/**\n *\n * Set a property on an object using dot notation.\n *\n * @param {String} path\n * @param {any} val\n * @param {Object} obj\n * @param {Boolean} merge\n */\nDotObject.prototype.set = function (path, val, obj, merge) {\n var i\n var k\n var keys\n var key\n\n // Do not operate if the value is undefined.\n if (typeof val === 'undefined') {\n return obj\n }\n keys = parsePath(path, this.separator)\n\n for (i = 0; i < keys.length; i++) {\n key = keys[i]\n if (i === keys.length - 1) {\n if (merge && isObject(val) && isObject(obj[key])) {\n for (k in val) {\n if (hasOwnProperty.call(val, k)) {\n obj[key][k] = val[k]\n }\n }\n } else if (merge && Array.isArray(obj[key]) && Array.isArray(val)) {\n for (var j = 0; j < val.length; j++) {\n obj[keys[i]].push(val[j])\n }\n } else {\n obj[key] = val\n }\n } else if (\n // force the value to be an object\n !hasOwnProperty.call(obj, key) ||\n (!isObject(obj[key]) && !Array.isArray(obj[key]))\n ) {\n // initialize as array if next key is numeric\n if (/^\\d+$/.test(keys[i + 1])) {\n obj[key] = []\n } else {\n obj[key] = {}\n }\n }\n obj = obj[key]\n }\n return obj\n}\n\n/**\n *\n * Transform an object\n *\n * Usage:\n *\n * var obj = {\n * \"id\": 1,\n * \"some\": {\n * \"thing\": \"else\"\n * }\n * }\n *\n * var transform = {\n * \"id\": \"nr\",\n * \"some.thing\": \"name\"\n * }\n *\n * var tgt = dot.transform(transform, obj)\n *\n * @param {Object} recipe Transform recipe\n * @param {Object} obj Object to be transformed\n * @param {Array} mods modifiers for the target\n */\nDotObject.prototype.transform = function (recipe, obj, tgt) {\n obj = obj || {}\n tgt = tgt || {}\n Object.keys(recipe).forEach(\n function (key) {\n this.set(recipe[key], this.pick(key, obj), tgt)\n }.bind(this)\n )\n return tgt\n}\n\n/**\n *\n * Convert object to dotted-key/value pair\n *\n * Usage:\n *\n * var tgt = dot.dot(obj)\n *\n * or\n *\n * var tgt = {}\n * dot.dot(obj, tgt)\n *\n * @param {Object} obj source object\n * @param {Object} tgt target object\n * @param {Array} path path array (internal)\n */\nDotObject.prototype.dot = function (obj, tgt, path) {\n tgt = tgt || {}\n path = path || []\n var isArray = Array.isArray(obj)\n\n Object.keys(obj).forEach(\n function (key) {\n var index = isArray && this.useBrackets ? '[' + key + ']' : key\n if (\n isArrayOrObject(obj[key]) &&\n ((isObject(obj[key]) && !isEmptyObject(obj[key])) ||\n (Array.isArray(obj[key]) && !this.keepArray && obj[key].length !== 0))\n ) {\n if (isArray && this.useBrackets) {\n var previousKey = path[path.length - 1] || ''\n return this.dot(\n obj[key],\n tgt,\n path.slice(0, -1).concat(previousKey + index)\n )\n } else {\n return this.dot(obj[key], tgt, path.concat(index))\n }\n } else {\n if (isArray && this.useBrackets) {\n tgt[path.join(this.separator).concat('[' + key + ']')] = obj[key]\n } else {\n tgt[path.concat(index).join(this.separator)] = obj[key]\n }\n }\n }.bind(this)\n )\n return tgt\n}\n\nDotObject.pick = wrap('pick')\nDotObject.move = wrap('move')\nDotObject.transfer = wrap('transfer')\nDotObject.transform = wrap('transform')\nDotObject.copy = wrap('copy')\nDotObject.object = wrap('object')\nDotObject.str = wrap('str')\nDotObject.set = wrap('set')\nDotObject.delete = wrap('delete')\nDotObject.del = DotObject.remove = wrap('remove')\nDotObject.dot = wrap('dot');\n['override', 'overwrite'].forEach(function (prop) {\n Object.defineProperty(DotObject, prop, {\n get: function () {\n return dotDefault.override\n },\n set: function (val) {\n dotDefault.override = !!val\n }\n })\n});\n['useArray', 'keepArray', 'useBrackets'].forEach(function (prop) {\n Object.defineProperty(DotObject, prop, {\n get: function () {\n return dotDefault[prop]\n },\n set: function (val) {\n dotDefault[prop] = val\n }\n })\n})\n\nDotObject._process = _process\n\nmodule.exports = DotObject\n","import {parseColor} from '@react-stately/color';\n\nexport function themeValueToHex(value: string): string {\n try {\n return parseColor(`rgb(${value.split(' ').join(',')})`).toString('hex');\n } catch (e) {\n return value;\n }\n}\n","import React, {RefObject} from 'react';\n\nexport interface TabsContext {\n selectedTab: number;\n setSelectedTab: (newTab: number) => void;\n tabsRef: RefObject<HTMLElement[]>;\n size: 'sm' | 'md';\n isLazy?: boolean;\n id: string;\n}\n\nexport const TabContext = React.createContext<TabsContext>(null!);\n","import React, {useContext, useState} from 'react';\nimport {useLayoutEffect} from '@react-aria/utils';\nimport clsx from 'clsx';\nimport {TabContext} from './tabs-context';\n\ninterface TabLineStyle {\n width?: string;\n transform?: string;\n className?: string;\n}\n\nexport function TabLine() {\n const {tabsRef, selectedTab} = useContext(TabContext);\n const [style, setStyle] = useState<TabLineStyle>({\n width: undefined,\n transform: undefined,\n className: undefined,\n });\n\n useLayoutEffect(() => {\n if (selectedTab != null && tabsRef.current) {\n const el = tabsRef.current[selectedTab];\n if (!el) return;\n\n setStyle(prevState => {\n return {\n width: `${el.offsetWidth}px`,\n transform: `translateX(${el.offsetLeft}px)`,\n // disable initial transition for tabline\n className: prevState.width === undefined ? '' : 'transition-all',\n };\n });\n }\n }, [setStyle, selectedTab, tabsRef]);\n\n return (\n <div\n className={clsx(\n 'absolute bottom-0 left-0 h-2 bg-primary',\n style.className\n )}\n role=\"presentation\"\n style={{width: style.width, transform: style.transform}}\n />\n );\n}\n","import React, {Children, cloneElement, isValidElement, ReactNode} from 'react';\nimport clsx from 'clsx';\nimport {FocusScope} from '@react-aria/focus';\nimport {TabProps} from './tab';\nimport {TabLine} from './tab-line';\n\nexport interface TabListProps {\n children: ReactNode;\n // center tabs within tablist\n center?: boolean;\n // expand tabs to fill in tablist space fully. By default, tabs are only as wide as their content.\n expand?: boolean;\n className?: string;\n}\nexport function TabList({children, center, expand, className}: TabListProps) {\n const childrenArray = Children.toArray(children);\n\n return (\n <FocusScope>\n <div\n className={clsx(\n // hide scrollbar completely on mobile, show compact one on desktop\n 'flex relative max-w-full overflow-auto border-b max-sm:hidden-scrollbar md:compact-scrollbar',\n className\n )}\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n >\n {childrenArray.map((child, index) => {\n if (isValidElement<TabProps>(child)) {\n return cloneElement<TabProps>(child, {\n index,\n className: clsx(\n child.props.className,\n expand && 'flex-auto',\n center && index === 0 && 'ml-auto',\n center && index === childrenArray.length - 1 && 'mr-auto'\n ),\n });\n }\n return null;\n })}\n <TabLine />\n </div>\n </FocusScope>\n );\n}\n","import React, {JSXElementConstructor, ReactNode, useContext} from 'react';\nimport clsx from 'clsx';\nimport {useFocusManager} from '@react-aria/focus';\nimport {TabContext} from './tabs-context';\nimport {LinkProps} from 'react-router-dom';\n\nexport interface TabProps {\n className?: string;\n index?: number;\n children: ReactNode;\n isDisabled?: boolean;\n padding?: string;\n elementType?: 'button' | 'a' | JSXElementConstructor<any>;\n to?: LinkProps['to'];\n relative?: LinkProps['relative'];\n replace?: LinkProps['replace'];\n width?: string;\n}\nexport function Tab({\n index,\n className,\n isDisabled,\n children,\n padding: paddingProp,\n elementType = 'button',\n to,\n relative,\n width = 'min-w-min',\n}: TabProps) {\n const {\n selectedTab,\n setSelectedTab,\n tabsRef,\n size = 'md',\n id,\n } = useContext(TabContext);\n const isSelected = index === selectedTab;\n const focusManager = useFocusManager();\n const padding = paddingProp || (size === 'sm' ? 'px-12' : 'px-18');\n\n const mergedClassname = clsx(\n 'tracking-wide overflow-hidden capitalize text-sm flex items-center justify-center outline-none transition-colors',\n 'focus-visible:ring focus-visible:ring-2 ring-inset rounded whitespace-nowrap cursor-pointer',\n width,\n textColor({isDisabled, isSelected}),\n className,\n size === 'md' && `${padding} h-48`,\n size === 'sm' && `${padding} h-32`,\n isDisabled && 'pointer-events-none'\n );\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (e.key) {\n case 'ArrowLeft':\n focusManager.focusPrevious();\n break;\n case 'ArrowRight':\n focusManager.focusNext();\n break;\n case 'Home':\n focusManager.focusFirst();\n break;\n case 'End':\n focusManager.focusLast();\n break;\n }\n };\n\n const tabIndex = isSelected ? 0 : -1;\n const Element = elementType;\n\n return (\n <Element\n disabled={isDisabled}\n id={`${id}-${index}-tab`}\n aria-controls={`${id}-${index}-tabpanel`}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n tabIndex={isDisabled ? undefined : tabIndex}\n onKeyDown={onKeyDown}\n onClick={() => {\n setSelectedTab(index!);\n }}\n to={to}\n relative={relative}\n className={mergedClassname}\n ref={(el: HTMLElement) => {\n if (tabsRef.current && el) {\n tabsRef.current[index!] = el;\n }\n }}\n >\n {children}\n </Element>\n );\n}\n\ninterface TextColorProps {\n isDisabled?: boolean;\n isSelected: boolean;\n}\nfunction textColor({isDisabled, isSelected}: TextColorProps): string {\n if (isDisabled) {\n return 'text-disabled cursor-default';\n }\n if (isSelected) {\n return 'text-primary';\n }\n return 'text-muted hover:text-main';\n}\n","import React, {\n Children,\n cloneElement,\n ComponentPropsWithoutRef,\n isValidElement,\n ReactElement,\n ReactNode,\n useContext,\n useRef,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport {useLayoutEffect} from '@react-aria/utils';\nimport {getFocusableTreeWalker} from '@react-aria/focus';\nimport {TabContext} from './tabs-context';\n\nexport interface TabPanelsProps {\n children: ReactNode;\n className?: string;\n}\nexport function TabPanels({children, className}: TabPanelsProps) {\n const {selectedTab, isLazy} = useContext(TabContext);\n\n // filter out falsy values, in case of conditional rendering\n const panelArray = Children.toArray(children).filter(p => !!p);\n\n let rendered: ReactNode;\n if (isLazy) {\n const el = panelArray[selectedTab] as ReactElement;\n rendered = isValidElement(el)\n ? cloneElement<TabPanelProps>(panelArray[selectedTab] as ReactElement, {\n index: selectedTab,\n })\n : null;\n } else {\n rendered = panelArray.map((panel, index) => {\n if (isValidElement<TabPanelsProps>(panel)) {\n const isSelected = index === selectedTab;\n return cloneElement<TabPanelProps>(panel, {\n index,\n 'aria-hidden': !isSelected,\n className: !isSelected\n ? clsx(panel.props.className, 'hidden')\n : panel.props.className,\n });\n }\n return null;\n });\n }\n\n return <div className={className}>{rendered}</div>;\n}\n\ninterface TabPanelProps extends ComponentPropsWithoutRef<'div'> {\n className?: string;\n children: ReactNode;\n index?: number;\n}\nexport function TabPanel({\n className,\n children,\n index,\n ...domProps\n}: TabPanelProps) {\n const {id} = useContext(TabContext);\n\n const [tabIndex, setTabIndex] = useState<number | undefined>(0);\n const ref = useRef<HTMLDivElement>(null);\n\n // The tabpanel should have tabIndex=0 when there are no tabbable elements within it.\n // Otherwise, tabbing from the focused tab should go directly to the first tabbable element\n // within the tabpanel.\n useLayoutEffect(() => {\n if (ref?.current) {\n const update = () => {\n // Detect if there are any tabbable elements and update the tabIndex accordingly.\n const walker = getFocusableTreeWalker(ref.current!, {tabbable: true});\n setTabIndex(walker.nextNode() ? undefined : 0);\n };\n\n update();\n\n // Update when new elements are inserted, or the tabIndex/disabled attribute updates.\n const observer = new MutationObserver(update);\n observer.observe(ref.current, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['tabIndex', 'disabled'],\n });\n\n return () => {\n observer.disconnect();\n };\n }\n }, [ref]);\n\n return (\n <div\n tabIndex={tabIndex}\n ref={ref}\n id={`${id}-${index}-tabpanel`}\n aria-labelledby={`${id}-${index}-tab`}\n className={clsx(className, 'focus-visible:outline-primary-light')}\n role=\"tabpanel\"\n {...domProps}\n >\n {children}\n </div>\n );\n}\n","import React, {ReactElement, useId, useMemo, useRef} from 'react';\nimport clsx from 'clsx';\nimport {useControlledState} from '@react-stately/utils';\nimport {TabContext, TabsContext} from './tabs-context';\nimport {TabListProps} from './tab-list';\nimport {TabPanelsProps} from './tab-panels';\n\nexport interface TabsProps {\n children: [ReactElement<TabListProps>, ReactElement<TabPanelsProps>];\n size?: 'sm' | 'md';\n className?: string;\n selectedTab?: number;\n defaultSelectedTab?: number;\n onTabChange?: (newTab: number) => void;\n isLazy?: boolean;\n overflow?: string;\n}\n\nexport function Tabs(props: TabsProps) {\n const {\n size = 'md',\n children,\n className,\n isLazy,\n overflow = 'overflow-hidden',\n } = props;\n\n const tabsRef = useRef<HTMLButtonElement[]>([]);\n const id = useId();\n\n const [selectedTab, setSelectedTab] = useControlledState(\n props.selectedTab,\n props.defaultSelectedTab || 0,\n props.onTabChange\n );\n\n const ContextValue: TabsContext = useMemo(() => {\n return {\n selectedTab,\n setSelectedTab,\n tabsRef,\n size,\n isLazy,\n id,\n };\n }, [selectedTab, id, isLazy, setSelectedTab, size]);\n\n return (\n <TabContext.Provider value={ContextValue}>\n <div className={clsx(className, overflow, 'max-w-full')}>{children}</div>\n </TabContext.Provider>\n );\n}\n","import {createPortal, flushSync} from 'react-dom';\nimport React, {useImperativeHandle, useRef, useState} from 'react';\nimport {ConnectedDraggable, DragPreviewRenderer} from './use-draggable';\nimport {rootEl} from '@common/core/root-el';\n\nexport interface DragPreviewProps {\n children: (draggable: ConnectedDraggable) => JSX.Element;\n}\nexport const DragPreview = React.forwardRef<\n DragPreviewRenderer,\n DragPreviewProps\n>((props, ref) => {\n const render = props.children;\n const [children, setChildren] = useState<JSX.Element | null>(null);\n const domRef = useRef<HTMLDivElement>(null!);\n\n useImperativeHandle(\n ref,\n () =>\n (\n draggable: ConnectedDraggable,\n callback: (node: HTMLElement) => void\n ) => {\n // This will be called during the onDragStart event by useDrag. We need to render the\n // preview synchronously before this event returns so we can call event.dataTransfer.setDragImage.\n flushSync(() => {\n setChildren(render(draggable));\n });\n\n // Yield back to useDrag to set the drag image.\n callback(domRef.current);\n\n // Remove the preview from the DOM after a frame so the browser has time to paint.\n requestAnimationFrame(() => {\n setChildren(null);\n });\n },\n [render]\n );\n\n if (!children) {\n return null;\n }\n\n // portal preview, in case in needs to be used in <tr> or another element that does not accept div as child\n return createPortal(\n <div\n style={{zIndex: -100, position: 'absolute', top: 0, left: -100000}}\n ref={domRef}\n >\n {children}\n </div>,\n rootEl\n );\n});\n","import {Genre} from '../genres/genre';\nimport {Track} from '../tracks/track';\nimport {UserProfile} from '../user-profile/user-profile';\nimport {UserLink} from '../user-profile/user-link';\nimport {User} from '@common/auth/user';\nimport {Album} from '@app/web-player/albums/album';\n\nexport const ARTIST_MODEL = 'artist';\n\nexport interface Artist {\n id: number;\n name: string;\n model_type: 'artist';\n verified?: boolean;\n spotify_id?: string;\n followers_count?: number;\n followers?: User[];\n spotify_popularity?: boolean;\n likes_count?: number;\n albums_count?: number;\n image_small?: string;\n updated_at?: string;\n top_tracks?: Track[];\n albums?: Album[];\n similar?: Artist[];\n genres?: Genre[];\n views: number;\n plays: number;\n profile?: UserProfile;\n profile_images?: {url: string}[];\n links?: UserLink[];\n}\n","import {Track} from '../tracks/track';\nimport {Genre} from '../genres/genre';\nimport {Artist} from '../artists/artist';\nimport {Tag} from '@common/tags/tag';\n\nexport const ALBUM_MODEL = 'album';\n\nexport interface Album {\n id: number;\n name: string;\n model_type: typeof ALBUM_MODEL;\n release_date?: string;\n spotify_id?: string;\n image?: string;\n artists?: Omit<Artist, 'albums'>[];\n reposts_count?: number;\n likes_count?: number;\n plays?: number;\n views: number;\n description?: string;\n tracks?: Track[];\n tags?: Tag[];\n genres?: Genre[];\n created_at?: string;\n owner_id?: number;\n comments_count?: number;\n tracks_count?: number;\n updated_at: string;\n}\n","export const GENRE_MODEL = 'genre';\n\nexport interface Genre {\n id: number;\n name: string;\n display_name: string;\n model_type: 'genre';\n image: string;\n}\n","export default \"__VITE_ASSET__f1a9fbf2__\"","export default \"__VITE_ASSET__e63aaa7b__\"","import {Track} from '@app/web-player/tracks/track';\nimport defaultImage from './track-default-image.png';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {message} from '@common/i18n/message';\nimport clsx from 'clsx';\n\ninterface TrackImageProps {\n track: Track;\n className?: string;\n size?: string;\n}\nexport function TrackImage({track, className, size}: TrackImageProps) {\n const {trans} = useTrans();\n return (\n <img\n className={clsx(className, size, 'object-cover bg-fg-base/4')}\n draggable={false}\n loading=\"lazy\"\n src={getTrackImageSrc(track)}\n alt={trans(message('Image for :name', {values: {name: track.name}}))}\n />\n );\n}\n\nexport function getTrackImageSrc(track: Track, includeDefault = true) {\n if (track.image) {\n return track.image;\n } else if (track.album?.image) {\n return track.album.image;\n } else if (includeDefault) {\n return defaultImage;\n }\n}\n","import {Fragment, memo} from 'react';\nimport {useTrans, UseTransReturn} from '@common/i18n/use-trans';\nimport {message} from '@common/i18n/message';\n\ninterface ParsedMS {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n}\n\ninterface FormattedTrackDurationProps {\n ms?: number;\n minutes?: number;\n seconds?: number;\n verbose?: boolean;\n addZeroToFirstUnit?: boolean;\n}\nexport const FormattedDuration = memo(\n ({\n minutes,\n seconds,\n ms,\n verbose = false,\n addZeroToFirstUnit = true,\n }: FormattedTrackDurationProps) => {\n const {trans} = useTrans();\n\n if (minutes) {\n ms = minutes * 60000;\n } else if (seconds) {\n ms = seconds * 1000;\n }\n if (!ms) {\n ms = 0;\n }\n\n const unsignedMs = ms < 0 ? -ms : ms;\n const parsedMS: ParsedMS = {\n days: Math.trunc(unsignedMs / 86400000),\n hours: Math.trunc(unsignedMs / 3600000) % 24,\n minutes: Math.trunc(unsignedMs / 60000) % 60,\n seconds: Math.trunc(unsignedMs / 1000) % 60,\n };\n\n let formattedValue: string;\n if (verbose) {\n formattedValue = formatVerbose(parsedMS, trans);\n } else {\n formattedValue = formatCompact(parsedMS, addZeroToFirstUnit);\n }\n\n return <Fragment>{formattedValue}</Fragment>;\n }\n);\n\nfunction formatVerbose(t: ParsedMS, trans: UseTransReturn['trans']) {\n const output: string[] = [];\n\n if (t.days) {\n output.push(`${t.days}${trans(message('d'))}`);\n }\n if (t.hours) {\n output.push(`${t.hours}${trans(message('hr'))}`);\n }\n if (t.minutes) {\n output.push(`${t.minutes}${trans(message('min'))}`);\n }\n if (t.seconds && !t.hours) {\n output.push(`${t.seconds}${trans(message('sec'))}`);\n }\n\n return output.join(' ');\n}\n\nfunction formatCompact(t: ParsedMS, addZeroToFirstUnit = true) {\n const seconds = addZero(t.seconds);\n let output = '';\n if (t.days && !output) {\n output = `${t.days}:${addZero(t.hours)}:${addZero(t.minutes)}:${seconds}`;\n }\n if (t.hours && !output) {\n output = `${addZero(t.hours, addZeroToFirstUnit)}:${addZero(\n t.minutes\n )}:${seconds}`;\n }\n if (!output) {\n output = `${addZero(t.minutes, addZeroToFirstUnit)}:${seconds}`;\n }\n return output;\n}\n\nfunction addZero(v: number, addZero = true) {\n if (!addZero) return v;\n let value = `${v}`;\n if (value.length === 1) {\n value = '0' + value;\n }\n return value;\n}\n","import {Link, LinkProps} from 'react-router-dom';\nimport clsx from 'clsx';\nimport React, {useMemo} from 'react';\nimport {slugifyString} from '@common/utils/string/slugify-string';\nimport {Track} from '@app/web-player/tracks/track';\nimport {getBootstrapData} from '@common/core/bootstrap-data/use-backend-bootstrap-data';\n\ninterface TrackLinkProps extends Omit<LinkProps, 'to'> {\n track: Track;\n className?: string;\n}\nexport function TrackLink({track, className, ...linkProps}: TrackLinkProps) {\n const finalUri = useMemo(() => {\n return getTrackLink(track);\n }, [track]);\n\n return (\n <Link\n {...linkProps}\n className={clsx(\n 'hover:underline overflow-x-hidden overflow-ellipsis',\n className\n )}\n to={finalUri}\n >\n {track.name}\n </Link>\n );\n}\n\nexport function getTrackLink(\n track: Track,\n {absolute}: {absolute?: boolean} = {}\n): string {\n let link = `/track/${track.id}/${slugifyString(track.name)}`;\n if (absolute) {\n link = `${getBootstrapData().settings.base_url}${link}`;\n }\n return link;\n}\n","export const WAVE_WIDTH = 1240;\nexport const WAVE_HEIGHT = 45;\nconst BAR_WIDTH = 3;\nconst BAR_GAP: number = 0.5;\n\nexport function generateWaveformData(file: File): Promise<number[][] | null> {\n const audioContext = new window.AudioContext();\n return new Promise((resolve, abort) => {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n if (!context) {\n abort();\n return;\n }\n canvas.width = WAVE_WIDTH;\n canvas.height = WAVE_HEIGHT;\n\n // read file buffer\n const reader = new FileReader();\n reader.onload = e => {\n const buffer = e.target?.result;\n if (!buffer) {\n abort();\n } else {\n audioContext.decodeAudioData(\n buffer as ArrayBuffer,\n buffer => {\n const waveData = extractBuffer(buffer, context);\n resolve(waveData);\n },\n () => resolve(null)\n );\n }\n };\n reader.readAsArrayBuffer(file);\n });\n}\n\nfunction extractBuffer(buffer: AudioBuffer, context: CanvasRenderingContext2D) {\n const waveData: number[][] = [];\n const channelData = buffer.getChannelData(0);\n const sections = WAVE_WIDTH;\n const len = Math.floor(channelData.length / sections);\n const maxHeight = WAVE_HEIGHT;\n const vals = [];\n for (let i = 0; i < sections; i += BAR_WIDTH) {\n vals.push(bufferMeasure(i * len, len, channelData) * 10000);\n }\n\n for (let j = 0; j < sections; j += BAR_WIDTH) {\n const scale = maxHeight / Math.max(...vals);\n let val = bufferMeasure(j * len, len, channelData) * 10000;\n val *= scale;\n val += 1;\n waveData.push(getBarData(j, val));\n }\n\n // clear canvas for redrawing\n context.clearRect(0, 0, WAVE_WIDTH, WAVE_HEIGHT);\n return waveData;\n}\n\nfunction bufferMeasure(position: number, length: number, data: Float32Array) {\n let sum = 0.0;\n for (let i = position; i <= position + length - 1; i++) {\n sum += Math.pow(data[i], 2);\n }\n return Math.sqrt(sum / data.length);\n}\n\nfunction getBarData(i: number, h: number) {\n let w = BAR_WIDTH;\n if (BAR_GAP !== 0) {\n w *= Math.abs(1 - BAR_GAP);\n }\n const x = i + w / 2,\n y = WAVE_HEIGHT - h;\n\n return [x, y, w, h];\n}\n","import {Album} from '@app/web-player/albums/album';\n\nexport function assignAlbumToTracks(album: Album): Album {\n album.tracks = album.tracks?.map(track => {\n if (!track.album) {\n track.album = {...album, tracks: undefined};\n }\n return track;\n });\n return album;\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {apiClient} from '@common/http/query-client';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {useParams} from 'react-router-dom';\nimport {Track} from '@app/web-player/tracks/track';\nimport {assignAlbumToTracks} from '@app/web-player/albums/assign-album-to-tracks';\n\ninterface getTrackResponse extends BackendResponse {\n track: Track;\n}\n\ninterface Params {\n autoUpdate?: boolean;\n forEditing?: boolean;\n}\n\nexport function useTrack(params: Params) {\n const {trackId} = useParams();\n return useQuery(['tracks', +trackId!, params], () =>\n fetchTrack(trackId!, params)\n );\n}\n\nfunction fetchTrack(trackId: number | string, params: Params) {\n return apiClient\n .get<getTrackResponse>(`tracks/${trackId}`, {\n params: {defaultRelations: true, ...params},\n })\n .then(response => {\n if (response.data.track.album) {\n response.data.track = {\n ...response.data.track,\n album: assignAlbumToTracks(response.data.track.album),\n };\n }\n return response.data;\n });\n}\n","import {useMemo} from 'react';\nimport {useAuth} from '@common/auth/use-auth';\nimport {Track} from '@app/web-player/tracks/track';\n\nexport function useTrackPermissions(tracks: (Track | undefined)[]) {\n const {user, hasPermission} = useAuth();\n\n return useMemo(() => {\n const permissions = {\n canEdit: true,\n canDelete: true,\n managesTrack: true,\n };\n tracks.every(track => {\n if (!track) {\n permissions.canEdit = false;\n permissions.canDelete = false;\n permissions.managesTrack = false;\n return;\n }\n\n const trackArtistIds = track.artists?.map(a => a.id);\n const managesTrack =\n track.owner_id === user?.id ||\n !!user?.artists?.find(a => trackArtistIds?.includes(a.id as number));\n\n if (!managesTrack) {\n permissions.managesTrack = false;\n }\n\n if (\n !hasPermission('tracks.update') &&\n !hasPermission('music.update') &&\n !managesTrack\n ) {\n permissions.canEdit = false;\n }\n\n if (\n !hasPermission('tracks.delete') &&\n !hasPermission('music.delete') &&\n !managesTrack\n ) {\n permissions.canDelete = false;\n }\n });\n return permissions;\n }, [user, tracks, hasPermission]);\n}\n","import defaultImage from './default-album-image.png';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {message} from '@common/i18n/message';\nimport {Album} from '@app/web-player/albums/album';\nimport clsx from 'clsx';\n\ninterface AlbumImageProps {\n album: Album;\n className?: string;\n size?: string;\n}\nexport function AlbumImage({album, className, size}: AlbumImageProps) {\n const {trans} = useTrans();\n return (\n <img\n className={clsx(className, size, 'object-cover bg-fg-base/4')}\n draggable={false}\n loading=\"lazy\"\n src={getAlbumImage(album)}\n alt={trans(message('Image for :name', {values: {name: album.name}}))}\n />\n );\n}\n\nexport function getAlbumImage(album: Album): string {\n return album?.image || defaultImage;\n}\n","import {Link} from 'react-router-dom';\nimport clsx from 'clsx';\nimport React, {useMemo} from 'react';\nimport {Album} from '@app/web-player/albums/album';\nimport {Artist} from '@app/web-player/artists/artist';\nimport {slugifyString} from '@common/utils/string/slugify-string';\nimport {getBootstrapData} from '@common/core/bootstrap-data/use-backend-bootstrap-data';\n\ninterface AlbumLinkProps {\n album: Album;\n artist?: Artist;\n className?: string;\n target?: string;\n}\nexport function AlbumLink({album, artist, className, target}: AlbumLinkProps) {\n if (!artist && album.artists) {\n artist = album.artists[0];\n }\n const uri = useMemo(() => {\n return getAlbumLink(album, {artist});\n }, [artist, album]);\n\n return (\n <Link\n target={target}\n className={clsx(\n 'hover:underline outline-none focus-visible:underline overflow-x-hidden overflow-ellipsis',\n className\n )}\n to={uri}\n >\n {album.name}\n </Link>\n );\n}\n\nexport function getAlbumLink(\n album: Album,\n options: {artist?: Artist; absolute?: boolean} = {}\n) {\n const artist = options.artist || album.artists?.[0];\n const artistName = slugifyString(artist?.name || 'Various Artists');\n const albumName = slugifyString(album.name);\n let link = `/album/${album.id}/${artistName}/${albumName}`;\n if (options.absolute) {\n link = `${getBootstrapData().settings.base_url}${link}`;\n }\n return link;\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {apiClient} from '@common/http/query-client';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {useParams} from 'react-router-dom';\nimport {Album} from '@app/web-player/albums/album';\nimport {assignAlbumToTracks} from '@app/web-player/albums/assign-album-to-tracks';\n\ninterface GetAlbumResponse extends BackendResponse {\n album: Album;\n}\n\ninterface Params {\n autoUpdate?: boolean;\n forEditing?: boolean;\n defaultRelations?: boolean;\n with?: string;\n}\n\nexport function useAlbum(params: Params) {\n const {albumId} = useParams();\n return useQuery(['albums', +albumId!], () => fetchAlbum(albumId!, params));\n}\n\nfunction fetchAlbum(albumId: number | string, params: Params) {\n return apiClient\n .get<GetAlbumResponse>(`albums/${albumId}`, {\n params,\n })\n .then(response => {\n response.data.album = assignAlbumToTracks(response.data.album);\n return response.data;\n });\n}\n","import {Album} from '@app/web-player/albums/album';\nimport {useMemo} from 'react';\nimport {useAuth} from '@common/auth/use-auth';\n\nexport function useAlbumPermissions(album?: Album) {\n const {user, hasPermission} = useAuth();\n return useMemo(() => {\n const permissions = {\n canEdit: false,\n canDelete: false,\n managesAlbum: false,\n };\n if (user?.id && album) {\n const albumArtistIds = album.artists?.map(a => a.id);\n const managesAlbum =\n album.owner_id === user.id ||\n !!user.artists?.find(a => albumArtistIds?.includes(a.id as number));\n\n permissions.canEdit =\n hasPermission('albums.update') ||\n hasPermission('music.update') ||\n managesAlbum;\n\n permissions.canDelete =\n hasPermission('albums.delete') ||\n hasPermission('music.delete') ||\n managesAlbum;\n\n permissions.managesAlbum = managesAlbum;\n }\n return permissions;\n }, [user, album, hasPermission]);\n}\n","import {useAuth} from '@common/auth/use-auth';\nimport {UserArtist} from '@app/web-player/user-profile/user-artist';\n\nexport function usePrimaryArtistForCurrentUser(): UserArtist | undefined {\n const {user} = useAuth();\n return user?.artists?.find(a => a.role === 'artist');\n}\n","import {Artist} from '@app/web-player/artists/artist';\nimport {ArtistLink} from '@app/web-player/artists/artist-link';\nimport {Fragment, HTMLAttributeAnchorTarget} from 'react';\nimport {Trans} from '@common/i18n/trans';\nimport clsx from 'clsx';\n\ninterface ArtistLinksProps {\n artists?: Artist[];\n className?: string;\n linkClassName?: string;\n target?: HTMLAttributeAnchorTarget;\n}\nexport function ArtistLinks({\n artists,\n className,\n target,\n linkClassName,\n}: ArtistLinksProps) {\n if (!artists?.length) {\n return (\n <div className={className}>\n <Trans message=\"Various artists\" />\n </div>\n );\n }\n return (\n <div className={clsx(className, 'overflow-x-hidden overflow-ellipsis')}>\n {artists.map((artist, i) => (\n <Fragment key={artist.id}>\n {i > 0 && ', '}\n <ArtistLink\n artist={artist}\n target={target}\n className={linkClassName}\n />\n </Fragment>\n ))}\n </div>\n );\n}\n","export type ShareableNetworks =\n | 'facebook'\n | 'twitter'\n | 'pinterest'\n | 'tumblr'\n | 'blogger'\n | 'mail';\n\nexport function shareLinkSocially(\n network: ShareableNetworks,\n link: string,\n name?: string,\n image?: string\n) {\n const url = generateShareUrl(network, link, name, image);\n\n if (network === 'mail') {\n window.location.href = url;\n } else {\n openNewWindow(url);\n }\n}\n\nfunction openNewWindow(url: string) {\n const width = 575,\n height = 400,\n left = (window.innerWidth - width) / 2,\n top = (window.innerHeight - height) / 2,\n opts =\n 'status=1, scrollbars=1' +\n ',width=' +\n width +\n ',height=' +\n height +\n ',top=' +\n top +\n ',left=' +\n left;\n\n window.open(url, 'share', opts);\n}\n\nfunction generateShareUrl(\n type: ShareableNetworks,\n link: string,\n name?: string,\n image?: string\n): string {\n switch (type) {\n case 'facebook':\n return 'https://www.facebook.com/sharer/sharer.php?u=' + link;\n case 'twitter':\n return `https://twitter.com/intent/tweet?text=${name}&url=${link}`;\n case 'pinterest':\n return (\n 'https://pinterest.com/pin/create/button/?url=' +\n link +\n '&media=' +\n image\n );\n case 'tumblr':\n const base =\n 'https://www.tumblr.com/widgets/share/tool?shareSource=legacy&canonicalUrl=&posttype=photo&title=&caption=';\n return base + name + '&content=' + image + '&url=' + link;\n case 'blogger':\n return (\n 'https://www.blogger.com/blog_this.pyra?t&u=' + link + '&n=' + name\n );\n case 'mail':\n return `mailto:?subject=Check out this link.&body=${link}`;\n }\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const TumblrIcon = createSvgIcon(\n <path d=\"M390,32H120c-49.19,0-88,38.81-88,88V390c0,49.19,38.81,90,88,90H390c49.19,0,90-40.81,90-90V120C480,70.81,439.19,32,390,32ZM336,396H284c-42.51,0-72-23.68-72-76V240H176V192c42.51-11,57.95-48.32,60-80h44v72h52v56H280l-.39,70.51c0,21.87,11,29.43,28.62,29.43L336,340Z\" />\n);\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ShareIcon = createSvgIcon(\n <path d=\"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92c0-1.61-1.31-2.92-2.92-2.92zM18 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM6 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm12 7.02c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\" />\n, 'ShareOutlined');\n","import {\n ShareableNetworks,\n shareLinkSocially,\n} from '@common/utils/urls/share-link-socially';\nimport {IconButton, IconButtonProps} from '@common/ui/buttons/icon-button';\nimport {FacebookIcon} from '@common/icons/social/facebook';\nimport {TwitterIcon} from '@common/icons/social/twitter';\nimport {TumblrIcon} from '@common/icons/social/tumblr';\nimport {ShareIcon} from '@common/icons/material/Share';\nimport {toast} from '@common/ui/toast/toast';\nimport {message} from '@common/i18n/message';\n\ninterface ShareButtonsProps {\n link: string;\n name?: string;\n image?: string;\n size?: IconButtonProps['size'];\n}\nexport function ShareMediaButtons({\n link,\n name,\n image,\n size = 'lg',\n}: ShareButtonsProps) {\n const share = (network: ShareableNetworks) => {\n shareLinkSocially(network, link, name, image);\n };\n\n return (\n <div>\n <IconButton\n size={size}\n onClick={() => share('facebook')}\n className=\"text-facebook\"\n >\n <FacebookIcon />\n </IconButton>\n <IconButton\n size={size}\n onClick={() => share('twitter')}\n className=\"text-twitter\"\n >\n <TwitterIcon />\n </IconButton>\n <IconButton\n size={size}\n onClick={() => share('tumblr')}\n className=\"text-tumblr\"\n >\n <TumblrIcon viewBox=\"0 0 512 512\" />\n </IconButton>\n {navigator.share && (\n <IconButton\n size={size}\n onClick={() => {\n try {\n navigator.share({\n title: name,\n url: link,\n });\n } catch (e) {\n if ((e as DOMException).name !== 'AbortError') {\n toast(message('Could not share link'));\n }\n }\n }}\n className=\"text-muted\"\n >\n <ShareIcon />\n </IconButton>\n )}\n </div>\n );\n}\n","import {Avatar, AvatarProps} from '@common/ui/images/avatar';\nimport {User} from '@common/auth/user';\nimport {useContext} from 'react';\nimport {SiteConfigContext} from '@common/core/settings/site-config-context';\n\ninterface UserAvatarProps extends Omit<AvatarProps, 'label' | 'src' | 'link'> {\n user?: User;\n}\nexport function UserAvatar({user, ...props}: UserAvatarProps) {\n const {auth} = useContext(SiteConfigContext);\n return (\n <Avatar\n {...props}\n label={user?.display_name}\n src={user?.avatar}\n link={user?.id && auth.getUserProfileLink?.(user)}\n />\n );\n}\n","import dot from 'dot-object';\n\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\nexport function sortArrayOfObjects<T extends object>(\n data: T[],\n orderBy: string,\n orderDir: 'asc' | 'desc' = 'desc'\n): T[] {\n return data.sort((a, b) => {\n let valueA = sortingDataAccessor(a, orderBy);\n let valueB = sortingDataAccessor(b, orderBy);\n\n // If there are data in the column that can be converted to a number,\n // it must be ensured that the rest of the data\n // is of the same type so as not to order incorrectly.\n const valueAType = typeof valueA;\n const valueBType = typeof valueB;\n\n if (valueAType !== valueBType) {\n if (valueAType === 'number') {\n valueA += '';\n }\n if (valueBType === 'number') {\n valueB += '';\n }\n }\n\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n\n return comparatorResult * (orderDir === 'asc' ? 1 : -1);\n });\n}\n\n/**\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n */\nfunction sortingDataAccessor(data: object, key: string): string {\n const value = dot.pick(key, data);\n\n if (isNumberValue(value)) {\n const numberValue = Number(value);\n\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably, so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n\n return value;\n}\n\nfunction isNumberValue(value: any): boolean {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore, we also check if Number(value) is NaN.\n return !isNaN(parseFloat(value as any)) && !isNaN(Number(value));\n}\n","import {useMemo, useState} from 'react';\nimport {SortDescriptor} from '@common/ui/tables/types/sort-descriptor';\nimport {sortArrayOfObjects} from '@common/utils/array/sort-array-of-objects';\nimport {TableDataItem} from '@common/ui/tables/types/table-data-item';\nimport {TableProps} from '@common/ui/tables/table';\n\nexport function useSortableTableData<T extends TableDataItem>(\n data?: T[]\n): {\n data: T[];\n sortDescriptor: TableProps<T>['sortDescriptor'];\n onSortChange: TableProps<T>['onSortChange'];\n} {\n const [sortDescriptor, onSortChange] = useState<SortDescriptor>({});\n const sortedData: T[] = useMemo(() => {\n if (!data) {\n return [];\n } else if (sortDescriptor?.orderBy) {\n return sortArrayOfObjects(\n [...data],\n sortDescriptor.orderBy,\n sortDescriptor.orderDir\n );\n }\n return data;\n }, [sortDescriptor, data]);\n return {data: sortedData, sortDescriptor, onSortChange};\n}\n","import {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {useMutation} from '@tanstack/react-query';\nimport {toast} from '@common/ui/toast/toast';\nimport {message} from '@common/i18n/message';\nimport {apiClient, queryClient} from '@common/http/query-client';\nimport {showHttpErrorToast} from '@common/utils/http/show-http-error-toast';\nimport {useLocation} from 'react-router-dom';\nimport {useNavigate} from '@common/utils/hooks/use-navigate';\nimport {useAuth} from '@common/auth/use-auth';\n\ninterface Response extends BackendResponse {}\n\ninterface Payload {\n albumId: number;\n}\n\nexport function useDeleteAlbum() {\n const {pathname} = useLocation();\n const navigate = useNavigate();\n const {getRedirectUri} = useAuth();\n\n return useMutation((payload: Payload) => deleteAlbum(payload), {\n onSuccess: (response, {albumId}) => {\n toast(message('Album deleted'));\n // navigate to homepage if we are on this album page currently\n if (pathname.startsWith(`/album/${albumId}`)) {\n navigate(getRedirectUri());\n }\n queryClient.invalidateQueries(['tracks']);\n queryClient.invalidateQueries(['albums']);\n queryClient.invalidateQueries(['artists']);\n },\n onError: r => showHttpErrorToast(r),\n });\n}\n\nfunction deleteAlbum({albumId}: Payload): Promise<Response> {\n return apiClient.delete(`albums/${albumId}`).then(r => r.data);\n}\n","import {useFieldArray} from 'react-hook-form';\nimport {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {Trans} from '@common/i18n/trans';\nimport {IconButton} from '@common/ui/buttons/icon-button';\nimport {CloseIcon} from '@common/icons/material/Close';\nimport {Button} from '@common/ui/buttons/button';\nimport {AddIcon} from '@common/icons/material/Add';\nimport React from 'react';\nimport {UserLink} from '@app/web-player/user-profile/user-link';\n\nexport function ProfileLinksForm() {\n const {fields, append, remove} = useFieldArray<{links: UserLink[]}>({\n name: 'links',\n });\n return (\n <div>\n {fields.map((field, index) => {\n return (\n <div key={field.id} className=\"flex gap-10 mb-10 items-end\">\n <FormTextField\n required\n type=\"url\"\n label={<Trans message=\"URL\" />}\n name={`links.${index}.url`}\n size=\"sm\"\n className=\"flex-auto\"\n />\n <FormTextField\n required\n label={<Trans message=\"Short title\" />}\n name={`links.${index}.title`}\n size=\"sm\"\n className=\"flex-auto\"\n />\n <IconButton\n size=\"sm\"\n color=\"primary\"\n className=\"flex-shrink-0\"\n onClick={() => {\n remove(index);\n }}\n >\n <CloseIcon />\n </IconButton>\n </div>\n );\n })}\n <Button\n variant=\"text\"\n color=\"primary\"\n startIcon={<AddIcon />}\n size=\"xs\"\n onClick={() => {\n append({url: '', title: ''});\n }}\n >\n <Trans message=\"Add another link\" />\n </Button>\n </div>\n );\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {apiClient} from '@common/http/query-client';\nimport {BackendResponse} from '@common/http/backend-response/backend-response';\nimport {useParams} from 'react-router-dom';\nimport {Artist} from '@app/web-player/artists/artist';\nimport {PaginationResponse} from '@common/http/backend-response/pagination-response';\nimport {Album} from '@app/web-player/albums/album';\nimport {assignAlbumToTracks} from '@app/web-player/albums/assign-album-to-tracks';\nimport {Track} from '@app/web-player/tracks/track';\n\nexport const albumLayoutKey = 'artistPage.albumLayout';\n\nexport interface UseArtistResponse extends BackendResponse {\n artist: Artist;\n albums?: PaginationResponse<Album>;\n tracks?: PaginationResponse<Track>;\n}\n\nexport interface UseArtistParams {\n autoUpdate?: boolean;\n forEditing?: boolean;\n with?: string | string[];\n withCount?: string | string[];\n loadAlbumTracks?: boolean;\n albumsPerPage?: number;\n paginate?: 'simple';\n}\n\nexport function useArtist(params: UseArtistParams) {\n const {artistId} = useParams();\n return useQuery(['artists', artistId, params], () =>\n fetchArtist(artistId!, params)\n );\n}\n\nfunction fetchArtist(\n artistId: number | string,\n params: object\n): Promise<UseArtistResponse> {\n return apiClient\n .get<UseArtistResponse>(`artists/${artistId}`, {params})\n .then(response => {\n if (response.data.albums) {\n response.data.albums.data = response.data.albums.data.map(album =>\n assignAlbumToTracks(album)\n );\n }\n return response.data;\n });\n}\n","import {useMemo} from 'react';\nimport {useAuth} from '@common/auth/use-auth';\nimport {Artist} from '@app/web-player/artists/artist';\n\nexport function useArtistPermissions(artist: Artist) {\n const {user, hasPermission} = useAuth();\n return useMemo(() => {\n const permissions = {\n canEdit: false,\n canDelete: false,\n };\n if (user?.id) {\n const managesArtist = !!user.artists?.find(a => a.id === artist.id);\n\n permissions.canEdit =\n hasPermission('artists.update') ||\n hasPermission('music.update') ||\n managesArtist;\n\n permissions.canDelete =\n hasPermission('artists.delete') ||\n hasPermission('music.delete') ||\n managesArtist;\n }\n return permissions;\n }, [user, artist, hasPermission]);\n}\n","import {createSvgIcon} from '@common/icons/create-svg-icon';\n\nexport const PlayArrowFilledIcon = createSvgIcon(\n <path d=\"M8 19V5l11 7Z\" />,\n 'PlayArrowFilled'\n);\n"],"names":["KeyboardArrowLeftIcon","createSvgIcon","jsx","KeyboardArrowRightIcon","useIsTabletMediaQuery","options","useMediaQuery","Avatar","forwardRef","className","circle","size","src","link","label","fallback","domProps","ref","renderedAvatar","AvatarPlaceholderIcon","Tooltip","wrapperProps","clsx","getSizeClassName","Link","isCtrlKeyPressed","e","isMac","useGridNavigation","props","cellCount","rowCount","focusSiblingCell","focusFirstElementAfterGrid","operations","_a","grid","currentCell","row","rowIndex","cellIndex","rowOpCount","_b","_c","_d","cellOpCount","_e","_f","_g","nextCell","nextFocusableElement","getFocusableTreeWalker","walker","next","last","focusWithoutScrolling","TableContext","createContext","useTableCellStyle","index","isHeader","columns","cellHeight","useContext","column","userPadding","justify","TableCell","rowIsHovered","item","id","rowContext","useMemo","style","usePointerEvents","onMoveStart","onMove","onMoveEnd","minimumMovement","preventDefault","stopPropagation","onPress","onLongPress","state","useRef","addGlobalListener","removeGlobalListener","useGlobalListeners","start","onPointerDown","onPointerMove","onPointerUp","deltaX","deltaY","longPressTriggered","createEventHandler","isCtrlOrShiftPressed","useTableRowStyle","isSelected","isDarkMode","useIsDarkMode","isMobile","useIsMobileMediaQuery","hideBorder","enableSelection","collapseOnMobile","interactableElements","TableRow","renderAs","selectedRows","toggleRow","selectRow","onAction","selectRowOnContextMenu","selectionStyle","hideHeaderRow","isTouchDevice","isHovered","setIsHovered","useState","clickedOnInteractable","doubleClickHandler","anyRowsSelected","handleRowTap","keyboardHandler","contextMenuHandler","styleClassName","RowElement","CheckboxColumnConfig","SelectAllCheckbox","Skeleton","SelectRowCheckbox","Checkbox","trans","useTrans","data","onSelectionChange","allRowsSelected","someRowsSelected","d","ArrowDownwardIcon","HeaderCell","sortDescriptor","onSortChange","enableSorting","sortingKey","allowSorting","orderBy","orderDir","sortActive","ariaSort","toggleSorting","newSort","sortVisible","sortVariants","jsxs","AnimatePresence","m","TableHeaderRow","columnIndex","Table","userColumns","propsSelectedRows","propsDefaultSelectedRows","propsOnSelectionChange","propsSortDescriptor","propsOnSortChange","onDelete","ariaLabelledBy","renderRowAs","tableBody","meta","propsTableRef","closeOnInteractOutside","isCollapsedMode","useControlledState","useCallback","newValues","merge","filteredColumns","c","visibleInMode","contextValue","navProps","tableBodyProps","cloneElement","BasicTableBody","tableRef","useObjectRef","useInteractOutside","mergeProps","Fragment","ChipList","children","color","radius","selectable","Children","chip","isValidElement","FormattedNumber","memo","value","formatter","useNumberFormatter","shallowEqual","AddIcon","Switch","React","description","invalid","autoFocus","errorMessage","inputRef","useAutoFocus","fieldClassNames","getInputFieldClassNames","descriptionId","useId","FormSwitch","onChange","onBlur","error","useController","formProps","$5b160d28a433310d$export$c17fa47878dc55b6","key","locale","strings","$5b160d28a433310d$var$getStringsForLocale","string","messages","defaultLocale","language","$5b160d28a433310d$var$getLanguage","$parcel$interopDefault","a","$7a451c0c6841e6b9$exports","$2d805fd52bb48883$exports","$6c28468dc1df643c$exports","$807554f8230db0ed$exports","$7097f64386f1761c$exports","$bdd847d8beb08799$exports","$a53e00b683950971$exports","$21cdd87e84f28d89$exports","$92fee9698e4d675a$exports","$7ea012e91a5ad3ee$exports","$8460c13bb2d75345$exports","$2a2d5dc14e680587$exports","$9a3f292371bb0589$exports","$4742231a685fa068$exports","$05e247fd2960981e$exports","$a67524a79ccbe190$exports","$a9eefe9d6c8cb7d5$exports","$4a6b836d4f1bfaba$exports","$c950e4b1c482abde$exports","$d10d6b60dc50b438$exports","$371a732b2494f452$exports","$6d042cae6243464b$exports","$d9ab5c2611e0bcd3$exports","$73f77c9902e29ca6$exports","$4f461eb266a95c10$exports","$dc46bea2f2597899$exports","$622bbd6719cc95af$exports","$4da03c1ecd9a9c7d$exports","$edb6b2fe456ed4e8$exports","$264cd81c52b30815$exports","$6f80afde0270dda7$exports","$23a92651c6957668$exports","$0f9b1074d04f4954$exports","$a9cedf75b94e4916$exports","$37cff576474bc8d4$exports","$799cddbef784668f$var$strings","$cBgAy$LocalizedStringDictionary","$799cddbef784668f$export$6e865ea70d7724f","res","$799cddbef784668f$var$RGBColor","$799cddbef784668f$var$HSBColor","$799cddbef784668f$var$HSLColor","$799cddbef784668f$var$Color","channel","x","xyChannels","xChannel","yChannel","xCh","yCh","zCh","colors","values","match","num","$cBgAy$clamp","_colors_","format","red","green","blue","min","brightness","chroma","saturation","hue","$cBgAy$toFixedNumber","max","lightness","$cBgAy$NumberFormatter","alpha","$cBgAy$swchelperssrc_define_propertymjs","$799cddbef784668f$var$HSB_REGEX","_m_","h","s","b","n","$799cddbef784668f$var$mod","fn","k","$799cddbef784668f$var$HSL_REGEX","l","$b335ada08155d9c0$var$MIN_COLOR","$b335ada08155d9c0$var$MAX_COLOR","draggables","droppables","dragMonitors","dragSession","interactableEvent","rect","activeInteraction","setActiveInteraction","name","domRectToObj","updateRects","targets","observer","entries","entry","width","height","left","top","target","useDraggable","disabled","preview","hidePreview","dragHandleRef","removeAllGlobalListeners","optionsRef","useLayoutEffect","notifyMonitors","callback","monitor","onDragStart","draggable","el","clickedOnHandle","hideNativeGhostImage","ie","node","onDragOver","newRect","emptyImage","readFilesFromDataTransfer","dataTransfer","UploadedFile","getEntries","file","reader","resolve","reject","getEntryFile","asyncIterableToArray","iterator","items","DROP_ACTIVATE_TIMEOUT","useDroppable","canDrop","allowEventsOnSelf","fireDragLeave","getDraggable","element","dropResult","moveItemInArray","array","fromIndex","toIndex","from","clamp","to","delta","i","moveItemInNewArray","newArray","sortSession","useSortable","type","onSortEnd","onSortStart","onDragEnd","onDropPositionChange","previewVariant","dropPosition","useEffect","draggableProps","getScrollParent","addSortStyles","removeSortStyles","clearLinePreview","droppableProps","previousPosition","newPosition","midY","overIndex","addLinePreview","droppableId","droppable","itemIndex","oldIndex","rects","sortable","newRects","oldRect","sortableTarget","y","transition","side","_process","v","mod","r","parseKey","val","isIndex","isObject","isArrayOrObject","isEmptyObject","blacklist","blacklistFilter","part","parsePath","path","sep","parts","check","hasOwnProperty","DotObject","separator","override","useArray","useBrackets","dotDefault","wrap","method","obj","mods","self","ok","remove","reindexArray","keys","cp","ret","root","source","obj1","obj2","j","recipe","tgt","isArray","previousKey","prop","dotObject","themeValueToHex","parseColor","TabContext","TabLine","tabsRef","selectedTab","setStyle","prevState","TabList","center","expand","childrenArray","FocusScope","child","Tab","isDisabled","paddingProp","elementType","relative","setSelectedTab","focusManager","useFocusManager","padding","mergedClassname","textColor","onKeyDown","tabIndex","Element","TabPanels","isLazy","panelArray","p","rendered","panel","TabPanel","setTabIndex","update","Tabs","overflow","ContextValue","DragPreview","render","setChildren","domRef","useImperativeHandle","flushSync","createPortal","rootEl","ARTIST_MODEL","ALBUM_MODEL","GENRE_MODEL","defaultImage$1","defaultImage","TrackImage","track","getTrackImageSrc","message","includeDefault","FormattedDuration","minutes","seconds","ms","verbose","addZeroToFirstUnit","unsignedMs","parsedMS","formattedValue","formatVerbose","formatCompact","output","addZero","TrackLink","linkProps","finalUri","getTrackLink","absolute","slugifyString","getBootstrapData","WAVE_WIDTH","WAVE_HEIGHT","BAR_WIDTH","BAR_GAP","generateWaveformData","audioContext","abort","canvas","context","buffer","waveData","extractBuffer","channelData","sections","len","maxHeight","vals","bufferMeasure","scale","getBarData","position","length","sum","w","assignAlbumToTracks","album","useTrack","params","trackId","useParams","useQuery","fetchTrack","apiClient","response","useTrackPermissions","tracks","user","hasPermission","useAuth","permissions","trackArtistIds","managesTrack","AlbumImage","getAlbumImage","AlbumLink","artist","uri","getAlbumLink","artistName","albumName","useAlbum","albumId","fetchAlbum","useAlbumPermissions","albumArtistIds","managesAlbum","usePrimaryArtistForCurrentUser","ArtistLinks","artists","linkClassName","ArtistLink","Trans","shareLinkSocially","network","image","url","generateShareUrl","openNewWindow","opts","TumblrIcon","ShareIcon","ShareMediaButtons","share","IconButton","FacebookIcon","TwitterIcon","toast","UserAvatar","auth","SiteConfigContext","MAX_SAFE_INTEGER","sortArrayOfObjects","valueA","sortingDataAccessor","valueB","valueAType","valueBType","comparatorResult","dot","isNumberValue","numberValue","useSortableTableData","useDeleteAlbum","pathname","useLocation","navigate","useNavigate","getRedirectUri","useMutation","payload","deleteAlbum","queryClient","showHttpErrorToast","ProfileLinksForm","fields","append","useFieldArray","field","FormTextField","CloseIcon","Button","albumLayoutKey","useArtist","artistId","fetchArtist","useArtistPermissions","managesArtist","PlayArrowFilledIcon"],"mappings":"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","x_google_ignoreList":[22,23,36]}
Save
Cancel