{"version":3,"file":"play-arrow-filled-61b607f8.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/forms/toggle/switch.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/images/avatar.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","../../../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","../../../common/resources/client/icons/material/MusicNote.tsx","../../../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/genres/genre.ts","../../../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","../../../common/resources/client/icons/material/Album.tsx","../../../resources/client/web-player/albums/album-image/album-image.tsx","../../../resources/client/web-player/albums/album-link.tsx","../../../resources/client/web-player/albums/album.ts","../../../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 \n, 'KeyboardArrowLeftOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const KeyboardArrowRightIcon = createSvgIcon(\n \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 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, 'size'> {\n size?: InputSize;\n className?: string;\n description?: ReactNode;\n invalid?: boolean;\n errorMessage?: string;\n}\nexport const Switch = React.forwardRef(\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
\n \n {description && !errorMessage && (\n
\n {description}\n
\n )}\n {errorMessage && (\n
\n {errorMessage}\n
\n )}\n
\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 = {\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 ;\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","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 = 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 {\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[];\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['onAction'];\n selectRowOnContextMenu: TableProps['selectRowOnContextMenu'];\n cellHeight: string | undefined;\n headerCellHeight: string | undefined;\n}\nexport const TableContext = createContext(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 {\n columns,\n cellHeight = 'h-46',\n headerCellHeight = 'h-46',\n } = 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 ? headerCellHeight : 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 \n
\n {column.body(item, rowContext)}\n
\n \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;\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({\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, onAction} =\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 onAction && 'cursor-pointer',\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 || onAction) &&\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\n extends ComponentPropsWithoutRef<'tr'> {\n item: T & {isPlaceholder?: boolean};\n}\n\ninterface TableRowProps {\n item: TableDataItem;\n index: number;\n renderAs?: JSXElementConstructor;\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 = 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 setIsHovered(true))}\n onPointerLeave={createEventHandler(() => setIsHovered(false))}\n style={style}\n {...domProps}\n >\n {columns.map((column, cellIndex) => (\n \n ))}\n \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 = {\n key: 'checkbox',\n header: () => ,\n align: 'center',\n width: 'w-24 flex-shrink-0',\n body: (item, row) => {\n if (row.isPlaceholder) {\n return ;\n }\n return ;\n },\n};\n\ninterface SelectRowCheckboxProps {\n item: TableDataItem;\n}\nfunction SelectRowCheckbox({item}: SelectRowCheckboxProps) {\n const {selectedRows, toggleRow} = useContext(TableContext);\n return (\n 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 {\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 \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 {\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
{column.header()}
\n ) : (\n column.header()\n )}\n \n {allowSorting && (\n \n \n \n )}\n \n \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 \n {columns.map((column, columnIndex) => (\n \n ))}\n \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\n extends ComponentPropsWithoutRef<'table'> {\n className?: string;\n columns: ColumnConfig[];\n hideHeaderRow?: boolean;\n data: T[];\n meta?: any;\n tableRef?: MutableRefObject;\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>;\n tableBody?: ReactElement;\n hideBorder?: boolean;\n closeOnInteractOutside?: boolean;\n collapseOnMobile?: boolean;\n cellHeight?: string;\n headerCellHeight?: string;\n}\nexport function Table({\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 headerCellHeight,\n ...domProps\n}: TableProps) {\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 = {\n isCollapsedMode,\n cellHeight,\n headerCellHeight,\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 = ;\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 \n {\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 'isolate select-none text-sm outline-none focus-visible:ring-2',\n )}\n >\n {!hideHeaderRow && }\n {tableBody}\n \n \n );\n}\n\nexport interface TableBodyProps {\n renderRowAs?: TableProps['renderRowAs'];\n}\nfunction BasicTableBody({renderRowAs}: TableBodyProps) {\n const {data} = useContext(TableContext);\n return (\n \n {data.map((item, rowIndex) => (\n \n ))}\n \n );\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' | string;\n\nexport interface AvatarProps extends ComponentPropsWithoutRef {\n className?: string;\n src?: string;\n label?: string;\n circle?: boolean;\n size?: Size;\n link?: string;\n fallback?: 'initials' | 'generic';\n lazy?: boolean;\n}\nexport const Avatar = forwardRef(\n (\n {\n className,\n circle,\n size = 'md',\n src,\n link,\n label,\n fallback = 'generic',\n lazy = true,\n ...domProps\n },\n ref,\n ) => {\n let renderedAvatar = src ? (\n \n ) : (\n
\n \n
\n );\n\n if (label) {\n renderedAvatar = {renderedAvatar};\n }\n\n const wrapperProps: ComponentProps = {\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 \n {renderedAvatar}\n \n ) : (\n
{renderedAvatar}
\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 React, {\n Children,\n cloneElement,\n isValidElement,\n ReactElement,\n} from 'react';\nimport clsx from 'clsx';\nimport type {ChipProps} from './chip';\n\nexport interface 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 wrap?: boolean;\n}\nexport function ChipList({\n className,\n children,\n size,\n color,\n radius,\n selectable,\n wrap = true,\n}: ChipListProps) {\n return (\n \n {Children.map(children, chip => {\n if (isValidElement(chip)) {\n return cloneElement(chip, {\n size,\n color,\n selectable,\n radius,\n });\n }\n })}\n \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 {formatter.format(value)};\n },\n shallowEqual\n);\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const AddIcon = createSvgIcon(\n \n, 'AddOutlined');\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 {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\";\nimport {useFormValidationState as $cBgAy$useFormValidationState} from \"@react-stately/form\";\n\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 */ \nvar $f98dad178a72c00d$exports = {};\nvar $2d805fd52bb48883$exports = {};\n$2d805fd52bb48883$exports = {\n \"alpha\": `\\u{623}\\u{644}\\u{641}\\u{627}`,\n \"blue\": `\\u{623}\\u{632}\\u{631}\\u{642}`,\n \"brightness\": `\\u{627}\\u{644}\\u{633}\\u{637}\\u{648}\\u{639}`,\n \"green\": `\\u{623}\\u{62E}\\u{636}\\u{631}`,\n \"hue\": `\\u{62F}\\u{631}\\u{62C}\\u{629} \\u{627}\\u{644}\\u{644}\\u{648}\\u{646}`,\n \"lightness\": `\\u{627}\\u{644}\\u{625}\\u{636}\\u{627}\\u{621}\\u{629}`,\n \"red\": `\\u{623}\\u{62D}\\u{645}\\u{631}`,\n \"saturation\": `\\u{627}\\u{644}\\u{62A}\\u{634}\\u{628}\\u{639}`\n};\n\n\nvar $6c28468dc1df643c$exports = {};\n$6c28468dc1df643c$exports = {\n \"alpha\": `\\u{410}\\u{43B}\\u{444}\\u{430}`,\n \"blue\": `\\u{421}\\u{438}\\u{43D}\\u{44C}\\u{43E}`,\n \"brightness\": `\\u{42F}\\u{440}\\u{43A}\\u{43E}\\u{441}\\u{442}`,\n \"green\": `\\u{417}\\u{435}\\u{43B}\\u{435}\\u{43D}\\u{43E}`,\n \"hue\": `\\u{41E}\\u{442}\\u{442}\\u{435}\\u{43D}\\u{44A}\\u{43A}`,\n \"lightness\": `\\u{41B}\\u{435}\\u{43A}\\u{43E}\\u{442}\\u{430}`,\n \"red\": `\\u{427}\\u{435}\\u{440}\\u{432}\\u{435}\\u{43D}\\u{43E}`,\n \"saturation\": `\\u{41D}\\u{430}\\u{441}\\u{438}\\u{442}\\u{435}\\u{43D}\\u{43E}\\u{441}\\u{442}`\n};\n\n\nvar $807554f8230db0ed$exports = {};\n$807554f8230db0ed$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Modr\\xe1`,\n \"brightness\": `Jas`,\n \"green\": `Zelen\\xe1`,\n \"hue\": `Odst\\xedn`,\n \"lightness\": `Sv\\u{11B}tlost`,\n \"red\": `\\u{10C}erven\\xe1`,\n \"saturation\": `Sytost`\n};\n\n\nvar $7097f64386f1761c$exports = {};\n$7097f64386f1761c$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Bl\\xe5`,\n \"brightness\": `Lysstyrke`,\n \"green\": `Gr\\xf8n`,\n \"hue\": `Tone`,\n \"lightness\": `Lyshed`,\n \"red\": `R\\xf8d`,\n \"saturation\": `Farvem\\xe6tning`\n};\n\n\nvar $bdd847d8beb08799$exports = {};\n$bdd847d8beb08799$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `Blau`,\n \"brightness\": `Helligkeit`,\n \"green\": `Gr\\xfcn`,\n \"hue\": `Farbton`,\n \"lightness\": `Leuchtkraft`,\n \"red\": `Rot`,\n \"saturation\": `S\\xe4ttigung`\n};\n\n\nvar $a53e00b683950971$exports = {};\n$a53e00b683950971$exports = {\n \"alpha\": `\\u{386}\\u{3BB}\\u{3C6}\\u{3B1}`,\n \"blue\": `\\u{39C}\\u{3C0}\\u{3BB}\\u{3B5}`,\n \"brightness\": `\\u{3A6}\\u{3C9}\\u{3C4}\\u{3B5}\\u{3B9}\\u{3BD}\\u{3CC}\\u{3C4}\\u{3B7}\\u{3C4}\\u{3B1}`,\n \"green\": `\\u{3A0}\\u{3C1}\\u{3AC}\\u{3C3}\\u{3B9}\\u{3BD}\\u{3BF}`,\n \"hue\": `\\u{3A4}\\u{3CC}\\u{3BD}\\u{3BF}\\u{3C2}`,\n \"lightness\": `\\u{3A6}\\u{3C9}\\u{3C4}\\u{3B5}\\u{3B9}\\u{3BD}\\u{3CC}\\u{3C4}\\u{3B7}\\u{3C4}\\u{3B1}`,\n \"red\": `\\u{39A}\\u{3CC}\\u{3BA}\\u{3BA}\\u{3B9}\\u{3BD}\\u{3BF}`,\n \"saturation\": `\\u{39A}\\u{3BF}\\u{3C1}\\u{3B5}\\u{3C3}\\u{3BC}\\u{3CC}\\u{3C2}`\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\\xf3n`\n};\n\n\nvar $7ea012e91a5ad3ee$exports = {};\n$7ea012e91a5ad3ee$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Sinine`,\n \"brightness\": `Heledus`,\n \"green\": `Roheline`,\n \"hue\": `V\\xe4rv`,\n \"lightness\": `Valgus`,\n \"red\": `Punane`,\n \"saturation\": `K\\xfcllastus`\n};\n\n\nvar $8460c13bb2d75345$exports = {};\n$8460c13bb2d75345$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `Sininen`,\n \"brightness\": `Kirkkaus`,\n \"green\": `Vihre\\xe4`,\n \"hue\": `S\\xe4vy`,\n \"lightness\": `Valom\\xe4\\xe4r\\xe4`,\n \"red\": `Punainen`,\n \"saturation\": `V\\xe4rikyll\\xe4isyys`\n};\n\n\nvar $2a2d5dc14e680587$exports = {};\n$2a2d5dc14e680587$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `Bleu`,\n \"brightness\": `Luminosit\\xe9`,\n \"green\": `Vert`,\n \"hue\": `Teinte`,\n \"lightness\": `Luminosit\\xe9`,\n \"red\": `Rouge`,\n \"saturation\": `Saturation`\n};\n\n\nvar $9a3f292371bb0589$exports = {};\n$9a3f292371bb0589$exports = {\n \"alpha\": `\\u{5D0}\\u{5DC}\\u{5E4}\\u{5D0}`,\n \"blue\": `\\u{5DB}\\u{5D7}\\u{5D5}\\u{5DC}`,\n \"brightness\": `\\u{5D1}\\u{5D4}\\u{5D9}\\u{5E8}\\u{5D5}\\u{5EA}`,\n \"green\": `\\u{5D9}\\u{5E8}\\u{5D5}\\u{5E7}`,\n \"hue\": `\\u{5D2}\\u{5D5}\\u{5D5}\\u{5DF}`,\n \"lightness\": `\\u{5DB}\\u{5DE}\\u{5D5}\\u{5EA} \\u{5D0}\\u{5D5}\\u{5E8}`,\n \"red\": `\\u{5D0}\\u{5D3}\\u{5D5}\\u{5DD}`,\n \"saturation\": `\\u{5E8}\\u{5D5}\\u{5D5}\\u{5D9}\\u{5D4}`\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\\u{107}enost`\n};\n\n\nvar $05e247fd2960981e$exports = {};\n$05e247fd2960981e$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `K\\xe9k`,\n \"brightness\": `F\\xe9nyess\\xe9g`,\n \"green\": `Z\\xf6ld`,\n \"hue\": `Sz\\xedn\\xe1rnyalat`,\n \"lightness\": `Vil\\xe1goss\\xe1g`,\n \"red\": `Piros`,\n \"saturation\": `Tel\\xedtetts\\xe9g`\n};\n\n\nvar $a67524a79ccbe190$exports = {};\n$a67524a79ccbe190$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Blu`,\n \"brightness\": `Luminosit\\xe0`,\n \"green\": `Verde`,\n \"hue\": `Tonalit\\xe0`,\n \"lightness\": `Luminosit\\xe0`,\n \"red\": `Rosso`,\n \"saturation\": `Saturazione`\n};\n\n\nvar $a9eefe9d6c8cb7d5$exports = {};\n$a9eefe9d6c8cb7d5$exports = {\n \"alpha\": `\\u{30A2}\\u{30EB}\\u{30D5}\\u{30A1}`,\n \"blue\": `\\u{9752}`,\n \"brightness\": `\\u{660E}\\u{308B}\\u{3055}`,\n \"green\": `\\u{7DD1}`,\n \"hue\": `\\u{8272}\\u{76F8}`,\n \"lightness\": `\\u{660E}\\u{5EA6}`,\n \"red\": `\\u{8D64}`,\n \"saturation\": `\\u{5F69}\\u{5EA6}`\n};\n\n\nvar $4a6b836d4f1bfaba$exports = {};\n$4a6b836d4f1bfaba$exports = {\n \"alpha\": `\\u{C54C}\\u{D30C}`,\n \"blue\": `\\u{D30C}\\u{B791}`,\n \"brightness\": `\\u{BA85}\\u{B3C4}`,\n \"green\": `\\u{CD08}\\u{B85D}`,\n \"hue\": `\\u{C0C9}\\u{C870}`,\n \"lightness\": `\\u{BC1D}\\u{AE30}`,\n \"red\": `\\u{BE68}\\u{AC15}`,\n \"saturation\": `\\u{CC44}\\u{B3C4}`\n};\n\n\nvar $c950e4b1c482abde$exports = {};\n$c950e4b1c482abde$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `M\\u{117}lyna`,\n \"brightness\": `Ry\\u{161}kumas`,\n \"green\": `\\u{17D}alia`,\n \"hue\": `Atspalvis`,\n \"lightness\": `\\u{160}viesumas`,\n \"red\": `Raudona`,\n \"saturation\": `\\u{12E}sotinimas`\n};\n\n\nvar $d10d6b60dc50b438$exports = {};\n$d10d6b60dc50b438$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Zila`,\n \"brightness\": `Spilgtums`,\n \"green\": `Za\\u{13C}a`,\n \"hue\": `Nokr\\u{101}sa`,\n \"lightness\": `Gai\\u{161}ums`,\n \"red\": `Sarkana`,\n \"saturation\": `Pies\\u{101}tin\\u{101}jums`\n};\n\n\nvar $371a732b2494f452$exports = {};\n$371a732b2494f452$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Bl\\xe5`,\n \"brightness\": `Lysstyrke`,\n \"green\": `Gr\\xf8nn`,\n \"hue\": `Fargetone`,\n \"lightness\": `Lyshet`,\n \"red\": `R\\xf8d`,\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\\u{15B}\\u{107}`,\n \"green\": `Zielony`,\n \"hue\": `Odcie\\u{144}`,\n \"lightness\": `Jaskrawo\\u{15B}\\u{107}`,\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\\xe7\\xe3o`\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\\xe7\\xe3o`\n};\n\n\nvar $dc46bea2f2597899$exports = {};\n$dc46bea2f2597899$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Albastru`,\n \"brightness\": `Luminozitate`,\n \"green\": `Verde`,\n \"hue\": `Nuan\\u{21B}\\u{103}`,\n \"lightness\": `Luminozitate`,\n \"red\": `Ro\\u{219}u`,\n \"saturation\": `Satura\\u{21B}ie`\n};\n\n\nvar $622bbd6719cc95af$exports = {};\n$622bbd6719cc95af$exports = {\n \"alpha\": `\\u{410}\\u{43B}\\u{44C}\\u{444}\\u{430}`,\n \"blue\": `\\u{421}\\u{438}\\u{43D}\\u{438}\\u{439}`,\n \"brightness\": `\\u{42F}\\u{440}\\u{43A}\\u{43E}\\u{441}\\u{442}\\u{44C}`,\n \"green\": `\\u{417}\\u{435}\\u{43B}\\u{435}\\u{43D}\\u{44B}\\u{439}`,\n \"hue\": `\\u{41E}\\u{442}\\u{442}\\u{435}\\u{43D}\\u{43E}\\u{43A}`,\n \"lightness\": `\\u{41E}\\u{441}\\u{432}\\u{435}\\u{449}\\u{435}\\u{43D}\\u{43D}\\u{43E}\\u{441}\\u{442}\\u{44C}`,\n \"red\": `\\u{41A}\\u{440}\\u{430}\\u{441}\\u{43D}\\u{44B}\\u{439}`,\n \"saturation\": `\\u{41D}\\u{430}\\u{441}\\u{44B}\\u{449}\\u{435}\\u{43D}\\u{43D}\\u{43E}\\u{441}\\u{442}\\u{44C}`\n};\n\n\nvar $4da03c1ecd9a9c7d$exports = {};\n$4da03c1ecd9a9c7d$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Modr\\xe1`,\n \"brightness\": `Jas`,\n \"green\": `Zelen\\xe1`,\n \"hue\": `Odtie\\u{148}`,\n \"lightness\": `Svetlos\\u{165}`,\n \"red\": `\\u{10C}erven\\xe1`,\n \"saturation\": `S\\xfdtos\\u{165}`\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\\u{10D}a`,\n \"saturation\": `Nasi\\u{10D}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\\u{107}enje`\n};\n\n\nvar $6f80afde0270dda7$exports = {};\n$6f80afde0270dda7$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Bl\\xe5tt`,\n \"brightness\": `Ljusstyrka`,\n \"green\": `Gr\\xf6nt`,\n \"hue\": `Nyans`,\n \"lightness\": `Ljushet`,\n \"red\": `R\\xf6tt`,\n \"saturation\": `M\\xe4ttnad`\n};\n\n\nvar $23a92651c6957668$exports = {};\n$23a92651c6957668$exports = {\n \"alpha\": `Alfa`,\n \"blue\": `Mavi`,\n \"brightness\": `Parlakl\\u{131}k`,\n \"green\": `Ye\\u{15F}il`,\n \"hue\": `Ton`,\n \"lightness\": `Canl\\u{131}l\\u{131}k`,\n \"red\": `K\\u{131}rm\\u{131}z\\u{131}`,\n \"saturation\": `Doygunluk`\n};\n\n\nvar $0f9b1074d04f4954$exports = {};\n$0f9b1074d04f4954$exports = {\n \"alpha\": `\\u{410}\\u{43B}\\u{44C}\\u{444}\\u{430}`,\n \"blue\": `\\u{421}\\u{438}\\u{43D}\\u{456}\\u{439}`,\n \"brightness\": `\\u{42F}\\u{441}\\u{43A}\\u{440}\\u{430}\\u{432}\\u{456}\\u{441}\\u{442}\\u{44C}`,\n \"green\": `\\u{417}\\u{435}\\u{43B}\\u{435}\\u{43D}\\u{438}\\u{439}`,\n \"hue\": `\\u{422}\\u{43E}\\u{43D}`,\n \"lightness\": `\\u{41E}\\u{441}\\u{432}\\u{456}\\u{442}\\u{43B}\\u{435}\\u{43D}\\u{456}\\u{441}\\u{442}\\u{44C}`,\n \"red\": `\\u{427}\\u{435}\\u{440}\\u{432}\\u{43E}\\u{43D}\\u{438}\\u{439}`,\n \"saturation\": `\\u{41D}\\u{430}\\u{441}\\u{438}\\u{447}\\u{435}\\u{43D}\\u{456}\\u{441}\\u{442}\\u{44C}`\n};\n\n\nvar $a9cedf75b94e4916$exports = {};\n$a9cedf75b94e4916$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `\\u{84DD}\\u{8272}`,\n \"brightness\": `\\u{4EAE}\\u{5EA6}`,\n \"green\": `\\u{7EFF}\\u{8272}`,\n \"hue\": `\\u{8272}\\u{76F8}`,\n \"lightness\": `\\u{660E}\\u{4EAE}\\u{5EA6}`,\n \"red\": `\\u{7EA2}\\u{8272}`,\n \"saturation\": `\\u{9971}\\u{548C}\\u{5EA6}`\n};\n\n\nvar $37cff576474bc8d4$exports = {};\n$37cff576474bc8d4$exports = {\n \"alpha\": `Alpha`,\n \"blue\": `\\u{85CD}\\u{8272}`,\n \"brightness\": `\\u{4EAE}\\u{5EA6}`,\n \"green\": `\\u{7DA0}\\u{8272}`,\n \"hue\": `\\u{8272}\\u{76F8}`,\n \"lightness\": `\\u{660E}\\u{4EAE}`,\n \"red\": `\\u{7D05}\\u{8272}`,\n \"saturation\": `\\u{98FD}\\u{548C}\\u{5EA6}`\n};\n\n\n$f98dad178a72c00d$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($f98dad178a72c00d$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$799cddbef784668f$var$RGBColor.colorChannels = [\n \"red\",\n \"green\",\n \"blue\"\n];\n// X = \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$799cddbef784668f$var$HSBColor.colorChannels = [\n \"hue\",\n \"saturation\",\n \"brightness\"\n];\n// X = \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$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, setColorState] = (0, $cBgAy$useControlledState)(value && (0, $799cddbef784668f$export$4cde5df63f53f473)(value), defaultValue && (0, $799cddbef784668f$export$4cde5df63f53f473)(defaultValue), onChange);\n let valueRef = (0, $cBgAy$useRef)(color);\n let setColor = (color)=>{\n valueRef.current = color;\n setColorState(color);\n };\n let channels = (0, $cBgAy$useMemo)(()=>color.getColorSpaceAxes({\n xChannel: xChannel,\n yChannel: yChannel\n }), [\n color,\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);\n let xValue = color.getChannelValue(channels.xChannel);\n let yValue = color.getChannelValue(channels.yChannel);\n let setXValue = (v)=>{\n if (v === xValue) return;\n let newColor = color.withChannelValue(channels.xChannel, v);\n setColor(newColor);\n };\n let setYValue = (v)=>{\n if (v === yValue) return;\n let newColor = color.withChannelValue(channels.yChannel, v);\n setColor(newColor);\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 setColor((0, $799cddbef784668f$export$4cde5df63f53f473)(value));\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.current;\n isDraggingRef.current = 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, setValueState] = (0, $cBgAy$useControlledState)((0, $799cddbef784668f$export$4cde5df63f53f473)(props.value), (0, $799cddbef784668f$export$4cde5df63f53f473)(defaultValue), onChange);\n let valueRef = (0, $cBgAy$useRef)(value);\n let setValue = (value)=>{\n valueRef.current = value;\n setValueState(value);\n };\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);\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 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 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.current;\n isDraggingRef.current = 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/*\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 validation = (0, $cBgAy$useFormValidationState)({\n ...props,\n value: colorValue\n });\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, setPrevValue] = (0, $cBgAy$useState)(colorValue);\n if (prevValue !== colorValue) {\n setInputValue(colorValue ? colorValue.toString(\"hex\") : \"\");\n setPrevValue(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 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 (parsedValue == null) {\n setInputValue(colorValue ? colorValue.toString(\"hex\") : \"\");\n return;\n }\n safelySetColorValue(parsedValue);\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(parsedValue, 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 validation.commitValidation();\n };\n let decrement = ()=>{\n let newValue = $b335ada08155d9c0$var$addColorValue(parsedValue, -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 validation.commitValidation();\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 ...validation,\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();\nexport const droppables = new Map();\nexport const dragMonitors = new Map();\nexport const dragSession: DragSession = {\n status: 'inactive',\n};\n","import React from 'react';\n\ntype NativeEvent =\n | React.PointerEvent\n | PointerEvent\n | React.DragEvent\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\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 {\n type: string;\n id: DraggableId;\n getData: () => T;\n ref: RefObject;\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;\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(null);\n const {addGlobalListener, removeAllGlobalListeners} = useGlobalListeners();\n\n const state = useRef({\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) => {\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 | 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) => {\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 '@common/uploads/uploaded-file';\n\nexport async function* readFilesFromDataTransfer(dataTransfer: DataTransfer) {\n const entries: FileSystemEntry[] = [];\n\n // Pull out all entries before reading them, otherwise\n // some entries will be lost due to recursion with promises\n for (const item of dataTransfer.items) {\n if (item.kind === 'file') {\n const entry = item.webkitGetAsEntry();\n if (entry) {\n entries.push(entry);\n }\n }\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* getEntriesFromDirectory(entry as FileSystemDirectoryEntry);\n }\n }\n}\n\nasync function* getEntriesFromDirectory(\n item: FileSystemDirectoryEntry\n): AsyncIterable {\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* getEntriesFromDirectory(entry as FileSystemDirectoryEntry);\n }\n }\n } while (entries.length > 0);\n}\n\nfunction getEntryFile(entry: FileSystemFileEntry): Promise {\n return new Promise((resolve, reject) => entry.file(resolve, reject));\n}\n","export async function asyncIterableToArray(\n iterator: AsyncIterable\n): Promise {\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 {UploadedFile} from '@common/uploads/uploaded-file';\n\nexport interface ConnectedDroppable {\n id: DraggableId;\n rect?: InteractableRect;\n disabled?: boolean;\n ref: RefObject;\n}\n\n// File dragged in from desktop\nexport interface NativeFileDraggable {\n type: 'nativeFile';\n el: null;\n ref: null;\n getData: () => Promise;\n}\n\ninterface UseDroppableProps {\n id: DraggableId;\n disabled?: boolean;\n types: ('nativeFile' | string)[];\n ref: RefObject;\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\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 | false;\n acceptsDrop?: (target: MixedDraggable) => boolean;\n}\n\ninterface DroppableState {\n dragOverElements: Set;\n dropActivateTimer: ReturnType | undefined;\n}\n\nconst DROP_ACTIVATE_TIMEOUT = 400;\n\nexport function useDroppable({\n id,\n disabled,\n ref,\n ...options\n}: UseDroppableProps) {\n const state = useRef({\n dragOverElements: new Set(),\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) => {\n const draggable = getDraggable(e);\n if (draggable) {\n optionsRef.current.onDragLeave?.(draggable);\n }\n };\n\n const onDragEnter = (e: React.DragEvent) => {\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) => {\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) => {\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) => {\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\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(\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(\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;\n type: string;\n preview?: RefObject;\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(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} 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} 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;\n size: 'sm' | 'md';\n isLazy?: boolean;\n id: string;\n}\n\nexport const TabContext = React.createContext(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({\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 \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 \n \n {childrenArray.map((child, index) => {\n if (isValidElement(child)) {\n return cloneElement(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 \n \n \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;\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) => {\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 {\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 \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(panelArray[selectedTab] as ReactElement, {\n index: selectedTab,\n })\n : null;\n } else {\n rendered = panelArray.map((panel, index) => {\n if (isValidElement(panel)) {\n const isSelected = index === selectedTab;\n return cloneElement(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
{rendered}
;\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(0);\n const ref = useRef(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 \n {children}\n \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, ReactElement];\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([]);\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 \n
{children}
\n
\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(null);\n const domRef = useRef(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 or another element that does not accept div as child\n return createPortal(\n \n {children}\n ,\n rootEl,\n );\n});\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const MusicNoteIcon = createSvgIcon(\n \n, 'MusicNoteOutlined');\n","import {Track} from '@app/web-player/tracks/track';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {message} from '@common/i18n/message';\nimport clsx from 'clsx';\nimport {MusicNoteIcon} from '@common/icons/material/MusicNote';\n\ninterface TrackImageProps {\n track: Track;\n className?: string;\n size?: string;\n background?: string;\n}\nexport function TrackImage({\n track,\n className,\n size,\n background = 'bg-fg-base/4',\n}: TrackImageProps) {\n const {trans} = useTrans();\n const src = getTrackImageSrc(track);\n const imgClassName = clsx(\n className,\n size,\n background,\n 'object-cover',\n !src ? 'flex items-center justify-center' : 'block',\n );\n return src ? (\n \n ) : (\n \n \n \n );\n}\n\nexport function getTrackImageSrc(track: Track) {\n if (track.image) {\n return track.image;\n } else if (track.album?.image) {\n return track.album.image;\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 {formattedValue};\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 {\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 \n {track.name}\n \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 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 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 {\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';\nimport {getBootstrapData} from '@common/core/bootstrap-data/use-backend-bootstrap-data';\n\nexport interface getTrackResponse extends BackendResponse {\n track: Track;\n loader: Params['loader'];\n}\n\ninterface Params {\n loader: 'track' | 'trackPage' | 'editTrackPage';\n}\n\nexport function useTrack(params: Params) {\n const {trackId} = useParams();\n return useQuery({\n queryKey: ['tracks', +trackId!, params],\n queryFn: () => fetchTrack(trackId!, params),\n initialData: () => {\n const data = getBootstrapData().loaders?.[params.loader];\n if (data?.track?.id == trackId && data?.loader === params.loader) {\n return data;\n }\n return undefined;\n },\n });\n}\n\nfunction fetchTrack(trackId: number | string, params: Params) {\n return apiClient\n .get(`tracks/${trackId}`, {params})\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 {createSvgIcon} from '../create-svg-icon';\n\nexport const AlbumIcon = createSvgIcon(\n \n, 'AlbumOutlined');\n","import {useTrans} from '@common/i18n/use-trans';\nimport {message} from '@common/i18n/message';\nimport {Album} from '@app/web-player/albums/album';\nimport clsx from 'clsx';\nimport {AlbumIcon} from '@common/icons/material/Album';\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 const src = album?.image;\n const imgClassName = clsx(\n className,\n size,\n 'object-cover bg-fg-base/4',\n !src ? 'flex items-center justify-center' : 'block',\n );\n\n return src ? (\n \n ) : (\n \n \n \n );\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 \n {album.name}\n \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 {Genre} from '../genres/genre';\nimport {Artist} from '../artists/artist';\nimport {Tag} from '@common/tags/tag';\nimport {Track} from '@app/web-player/tracks/track';\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[];\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","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';\nimport {getBootstrapData} from '@common/core/bootstrap-data/use-backend-bootstrap-data';\n\nexport interface GetAlbumResponse extends BackendResponse {\n album: Album;\n loader: Params['loader'];\n}\n\ninterface Params {\n loader: 'albumPage' | 'editAlbumPage' | 'album' | 'albumEmbed';\n}\n\nexport function useAlbum(params: Params) {\n const {albumId} = useParams();\n return useQuery({\n queryKey: ['albums', +albumId!],\n queryFn: () => fetchAlbum(albumId!, params),\n initialData: () => {\n const data = getBootstrapData().loaders?.[params.loader];\n if (data?.album?.id == albumId && data?.loader === params.loader) {\n return data;\n }\n return undefined;\n },\n });\n}\n\nfunction fetchAlbum(albumId: number | string, params: Params) {\n return apiClient\n .get(`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 onLinkClick?: () => void;\n}\nexport function ArtistLinks({\n artists,\n className,\n target,\n linkClassName,\n onLinkClick,\n}: ArtistLinksProps) {\n if (!artists?.length) {\n return (\n
\n \n
\n );\n }\n return (\n
\n {artists.map((artist, i) => (\n \n {i > 0 && ', '}\n \n \n ))}\n
\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 \n);\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ShareIcon = createSvgIcon(\n \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
\n share('facebook')}\n className=\"text-facebook\"\n >\n \n \n share('twitter')}\n className=\"text-twitter\"\n >\n \n \n share('tumblr')}\n className=\"text-tumblr\"\n >\n \n \n {navigator.share && (\n {\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 \n \n )}\n
\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 {\n user?: User;\n}\nexport function UserAvatar({user, ...props}: UserAvatarProps) {\n const {auth} = useContext(SiteConfigContext);\n return (\n \n );\n}\n","import dot from 'dot-object';\n\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\nexport function sortArrayOfObjects(\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(\n data?: T[]\n): {\n data: T[];\n sortDescriptor: TableProps['sortDescriptor'];\n onSortChange: TableProps['onSortChange'];\n} {\n const [sortDescriptor, onSortChange] = useState({});\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({\n mutationFn: (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({queryKey: ['tracks']});\n queryClient.invalidateQueries({queryKey: ['albums']});\n queryClient.invalidateQueries({queryKey: ['artists']});\n },\n onError: r => showHttpErrorToast(r),\n });\n}\n\nfunction deleteAlbum({albumId}: Payload): Promise {\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
\n {fields.map((field, index) => {\n return (\n
\n }\n name={`links.${index}.url`}\n size=\"sm\"\n className=\"flex-auto\"\n />\n }\n name={`links.${index}.title`}\n size=\"sm\"\n className=\"flex-auto\"\n />\n {\n remove(index);\n }}\n >\n \n \n
\n );\n })}\n }\n size=\"xs\"\n onClick={() => {\n append({url: '', title: ''});\n }}\n >\n \n \n
\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';\nimport {getBootstrapData} from '@common/core/bootstrap-data/use-backend-bootstrap-data';\n\nexport const albumLayoutKey = 'artistPage-albumLayout';\n\nexport interface UseArtistResponse extends BackendResponse {\n artist: Artist;\n albums?: PaginationResponse;\n tracks?: PaginationResponse;\n loader?: UseArtistParams['loader'];\n selectedAlbumLayout?: string;\n}\n\nexport interface UseArtistParams {\n loader: 'artistPage' | 'editArtistPage' | 'artist';\n}\n\nexport function useArtist(params: UseArtistParams) {\n const {artistId} = useParams();\n return useQuery({\n queryKey: ['artists', artistId, params],\n queryFn: () => fetchArtist(artistId!, params),\n initialData: () => {\n const data = getBootstrapData().loaders?.[params.loader];\n if (data?.artist?.id == artistId && data?.loader === params.loader) {\n return data;\n }\n return undefined;\n },\n });\n}\n\nfunction fetchArtist(\n artistId: number | string,\n params: object,\n): Promise {\n return apiClient\n .get(`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 ,\n 'PlayArrowFilled'\n);\n"],"names":["KeyboardArrowLeftIcon","createSvgIcon","jsx","KeyboardArrowRightIcon","useIsTabletMediaQuery","options","useMediaQuery","Switch","React","props","ref","children","size","description","className","invalid","autoFocus","errorMessage","domProps","inputRef","useObjectRef","useAutoFocus","style","getSizeClassName","fieldClassNames","getInputFieldClassNames","descriptionId","useId","clsx","jsxs","FormSwitch","onChange","onBlur","value","error","useController","formProps","e","mergeProps","isCtrlKeyPressed","isMac","useGridNavigation","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","headerCellHeight","useContext","column","userPadding","justify","TableCell","rowIsHovered","item","id","rowContext","useMemo","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","onAction","interactableElements","TableRow","renderAs","selectedRows","toggleRow","selectRow","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","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","useInteractOutside","Fragment","Avatar","forwardRef","circle","src","link","label","fallback","lazy","renderedAvatar","AvatarPlaceholderIcon","Tooltip","wrapperProps","Link","ChipList","color","radius","selectable","wrap","Children","chip","isValidElement","FormattedNumber","memo","formatter","useNumberFormatter","shallowEqual","AddIcon","$5b160d28a433310d$export$c17fa47878dc55b6","key","locale","strings","$5b160d28a433310d$var$getStringsForLocale","string","messages","defaultLocale","language","$5b160d28a433310d$var$getLanguage","$parcel$interopDefault","a","$f98dad178a72c00d$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","$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","file","getEntryFile","UploadedFile","getEntriesFromDirectory","reader","resolve","reject","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","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","MusicNoteIcon","TrackImage","track","background","getTrackImageSrc","imgClassName","message","FormattedDuration","minutes","seconds","ms","verbose","addZeroToFirstUnit","unsignedMs","parsedMS","formattedValue","formatVerbose","formatCompact","output","addZero","TrackLink","linkProps","finalUri","getTrackLink","absolute","slugifyString","getBootstrapData","GENRE_MODEL","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","AlbumIcon","AlbumImage","AlbumLink","artist","uri","getAlbumLink","artistName","albumName","ALBUM_MODEL","useAlbum","albumId","fetchAlbum","useAlbumPermissions","albumArtistIds","managesAlbum","usePrimaryArtistForCurrentUser","ArtistLinks","artists","linkClassName","onLinkClick","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]}