{"version":3,"file":"Edit-1122cbef.mjs","sources":["../../../common/resources/client/icons/material/ChevronRight.tsx","../../../common/resources/client/ui/breadcrumbs/breadcrumb-item.tsx","../../../common/resources/client/icons/material/MoreHoriz.tsx","../../../common/resources/client/ui/breadcrumbs/breadcrumb.tsx","../../../common/resources/client/icons/material/Edit.tsx"],"sourcesContent":["import {createSvgIcon} from '../create-svg-icon';\n\nexport const ChevronRightIcon = createSvgIcon(\n \n, 'ChevronRightOutlined');\n","import React, {HTMLAttributes, ReactElement, ReactNode} from 'react';\nimport clsx from 'clsx';\nimport {ChevronRightIcon} from '../../icons/material/ChevronRight';\nimport type {BreadcrumbSizeStyle} from './breadcrumb';\n\nexport interface BreadcrumbItemProps {\n sizeStyle?: BreadcrumbSizeStyle;\n isMenuTrigger?: boolean;\n isMenuItem?: boolean;\n children: ReactNode | ((state: {isMenuItem?: boolean}) => ReactNode);\n isCurrent?: boolean;\n onSelected?: () => void;\n isClickable?: boolean;\n isDisabled?: boolean;\n className?: string;\n isLink?: boolean;\n}\n\nexport function BreadcrumbItem(props: BreadcrumbItemProps) {\n const {\n isCurrent,\n sizeStyle,\n isMenuTrigger,\n isClickable,\n isDisabled,\n onSelected,\n className,\n isMenuItem,\n isLink,\n } = props;\n\n const children =\n typeof props.children === 'function'\n ? props.children({isMenuItem})\n : props.children;\n\n if (isMenuItem) {\n return children as ReactElement;\n }\n\n const domProps: HTMLAttributes = isMenuTrigger\n ? {}\n : {\n tabIndex: isLink && !isDisabled ? 0 : undefined,\n role: isLink ? 'link' : undefined,\n 'aria-disabled': isLink ? isDisabled : undefined,\n 'aria-current': isCurrent && isLink ? 'page' : undefined,\n onClick: () => onSelected?.(),\n };\n\n return (\n \n \n {children}\n \n {isCurrent === false && (\n \n )}\n \n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const MoreHorizIcon = createSvgIcon(\n \n, 'MoreHorizOutlined');\n","import React, {\n cloneElement,\n ReactElement,\n ReactNode,\n useCallback,\n useRef,\n} from 'react';\nimport {\n useLayoutEffect,\n useResizeObserver,\n useValueEffect,\n} from '@react-aria/utils';\nimport clsx from 'clsx';\nimport {IconButton} from '../buttons/icon-button';\nimport {BreadcrumbItem, BreadcrumbItemProps} from './breadcrumb-item';\nimport {MoreHorizIcon} from '../../icons/material/MoreHoriz';\nimport {ButtonSize} from '../buttons/button-size';\nimport {Menu, MenuItem, MenuTrigger} from '../navigation/menu/menu-trigger';\nimport {IconSize} from '../../icons/svg-icon';\nimport {useTrans} from '../../i18n/use-trans';\n\nconst MIN_VISIBLE_ITEMS = 1;\nconst MAX_VISIBLE_ITEMS = 10;\n\nexport interface BreadcrumbsProps {\n children?: ReactNode;\n isDisabled?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n className?: string;\n currentIsClickable?: boolean;\n isNavigation?: boolean;\n}\n\nexport function Breadcrumb(props: BreadcrumbsProps) {\n const {\n size = 'md',\n children,\n isDisabled,\n className,\n currentIsClickable,\n isNavigation,\n } = props;\n const {trans} = useTrans();\n const style = sizeStyle(size);\n\n // Not using React.Children.toArray because it mutates the key prop.\n const childArray: ReactElement[] = [];\n React.Children.forEach(children, child => {\n if (React.isValidElement(child)) {\n childArray.push(child as ReactElement);\n }\n });\n\n const domRef = useRef(null);\n const listRef = useRef(null);\n\n const [visibleItems, setVisibleItems] = useValueEffect(childArray.length);\n\n const updateOverflow = useCallback(() => {\n const computeVisibleItems = (itemCount: number) => {\n // Refs can be null at runtime.\n const currListRef: HTMLUListElement | null = listRef.current;\n if (!currListRef) {\n return;\n }\n\n const listItems = Array.from(currListRef.children) as HTMLLIElement[];\n if (!listItems.length) return;\n\n const containerWidth = currListRef.offsetWidth;\n const isShowingMenu = childArray.length > itemCount;\n let calculatedWidth = 0;\n let newVisibleItems = 0;\n let maxVisibleItems = MAX_VISIBLE_ITEMS;\n\n calculatedWidth += listItems.shift()!.offsetWidth;\n newVisibleItems++;\n\n if (isShowingMenu) {\n calculatedWidth += listItems.shift()?.offsetWidth ?? 0;\n maxVisibleItems--;\n }\n\n if (calculatedWidth >= containerWidth) {\n newVisibleItems--;\n }\n\n // Ensure the last breadcrumb isn't truncated when we measure it.\n if (listItems.length > 0) {\n const last = listItems.pop();\n last!.style.overflow = 'visible';\n\n calculatedWidth += last!.offsetWidth;\n if (calculatedWidth < containerWidth) {\n newVisibleItems++;\n }\n\n last!.style.overflow = '';\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const breadcrumb of listItems.reverse()) {\n calculatedWidth += breadcrumb.offsetWidth;\n if (calculatedWidth < containerWidth) {\n newVisibleItems++;\n }\n }\n\n return Math.max(\n MIN_VISIBLE_ITEMS,\n Math.min(maxVisibleItems, newVisibleItems),\n );\n };\n\n // eslint-disable-next-line func-names\n setVisibleItems(function* () {\n // Update to show all items.\n yield childArray.length;\n\n // Measure, and update to show the items that fit.\n const newVisibleItems = computeVisibleItems(childArray.length);\n yield newVisibleItems;\n\n // If the number of items is less than the number of children,\n // then update again to ensure that the menu fits.\n if (newVisibleItems! < childArray.length && newVisibleItems! > 1) {\n yield computeVisibleItems(newVisibleItems!);\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [listRef, children, setVisibleItems]);\n\n useResizeObserver({ref: domRef, onResize: updateOverflow});\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useLayoutEffect(updateOverflow, [children]);\n\n let contents = childArray;\n if (childArray.length > visibleItems) {\n const selectedKey = childArray.length - 1;\n\n const menuItem = (\n \n \n \n \n \n \n {childArray.map((child, index) => {\n const isLast = selectedKey === index;\n return (\n {\n if (!isLast) {\n child.props.onSelected?.();\n }\n }}\n >\n {cloneElement(child, {isMenuItem: true})}\n \n );\n })}\n \n \n \n );\n\n contents = [menuItem];\n const breadcrumbs = [...childArray];\n let endItems = visibleItems;\n if (visibleItems > 1) {\n contents.unshift(breadcrumbs.shift()!);\n endItems--;\n }\n contents.push(...breadcrumbs.slice(-endItems));\n }\n\n const lastIndex = contents.length - 1;\n const breadcrumbItems = contents.map((child, index) => {\n const isCurrent = index === lastIndex;\n const isClickable = !isCurrent || currentIsClickable;\n\n return cloneElement(child, {\n key: child.key || index,\n isCurrent,\n sizeStyle: style,\n isClickable,\n isDisabled,\n isLink: isNavigation && child.key !== 'menu',\n });\n });\n\n const Element = isNavigation ? 'nav' : 'div';\n\n return (\n \n \n {breadcrumbItems}\n \n \n );\n}\n\nfunction sizeStyle(size: BreadcrumbsProps['size']): BreadcrumbSizeStyle {\n switch (size) {\n case 'sm':\n return {font: 'text-sm', icon: 'sm', btn: 'sm', minHeight: 'min-h-36'};\n case 'lg':\n return {font: 'text-lg', icon: 'md', btn: 'md', minHeight: 'min-h-42'};\n case 'xl':\n return {font: 'text-xl', icon: 'md', btn: 'md', minHeight: 'min-h-42'};\n default:\n return {font: 'text-base', icon: 'md', btn: 'md', minHeight: 'min-h-42'};\n }\n}\n\nexport interface BreadcrumbSizeStyle {\n font: string;\n icon: IconSize;\n btn: ButtonSize;\n minHeight: string;\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const EditIcon = createSvgIcon(\n \n, 'EditOutlined');\n"],"names":["sizeStyle","MenuItem"],"mappings":";;;;;AAEO,MAAM,mBAAmB;AAAA,EAC9B,oBAAC,QAAK,EAAA,GAAE,qDAAqD,CAAA;AAAA,EAC7D;AAAsB;ACcjB,SAAS,eAAe,OAA4B;AACnD,QAAA;AAAA,IACJ;AAAA,IACA,WAAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACE,IAAA;AAEE,QAAA,WACJ,OAAO,MAAM,aAAa,aACtB,MAAM,SAAS,EAAC,WAAA,CAAW,IAC3B,MAAM;AAEZ,MAAI,YAAY;AACP,WAAA;AAAA,EACT;AAEM,QAAA,WAA2C,gBAC7C,KACA;AAAA,IACE,UAAU,UAAU,CAAC,aAAa,IAAI;AAAA,IACtC,MAAM,SAAS,SAAS;AAAA,IACxB,iBAAiB,SAAS,aAAa;AAAA,IACvC,gBAAgB,aAAa,SAAS,SAAS;AAAA,IAC/C,SAAS,MAAM;AAAA,EAAa;AAIhC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,yEAAyEA,cAAA,gBAAAA,WAAW,IAAI;AAAA,SACvF,CAAC,eAAe,eAAe;AAAA,QAChC,CAAC,aAAa,cAAc;AAAA,MAC9B;AAAA,MAEA,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAG;AAAA,YACJ,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,CAAC,iBAAiB;AAAA,cAClB,CAAC,iBAAiB,UAAU;AAAA,YAC9B;AAAA,YAEC;AAAA,UAAA;AAAA,QACH;AAAA,QACC,cAAc,SACb;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAMA,cAAA,gBAAAA,WAAW;AAAA,YACjB,WAAW,KAAK,aAAa,kBAAkB,YAAY;AAAA,UAAA;AAAA,QAC7D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AC3EO,MAAM,gBAAgB;AAAA,EAC3B,oBAAC,QAAK,EAAA,GAAE,sJAAsJ,CAAA;AAAA,EAC9J;AAAmB;ACiBrB,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAWnB,SAAS,WAAW,OAAyB;AAC5C,QAAA;AAAA,IACJ,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACE,IAAA;AACE,QAAA,EAAC,UAAS;AACV,QAAA,QAAQ,UAAU,IAAI;AAG5B,QAAM,aAAkD,CAAA;AAClD,QAAA,SAAS,QAAQ,UAAU,CAAS,UAAA;AACpC,QAAA,MAAM,eAAe,KAAK,GAAG;AAC/B,iBAAW,KAAK,KAA0C;AAAA,IAC5D;AAAA,EAAA,CACD;AAEK,QAAA,SAAS,OAAuB,IAAI;AACpC,QAAA,UAAU,OAAyB,IAAI;AAE7C,QAAM,CAAC,cAAc,eAAe,IAAI,eAAe,WAAW,MAAM;AAElE,QAAA,iBAAiB,YAAY,MAAM;AACjC,UAAA,sBAAsB,CAAC,cAAsB;;AAEjD,YAAM,cAAuC,QAAQ;AACrD,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,YAAM,YAAY,MAAM,KAAK,YAAY,QAAQ;AACjD,UAAI,CAAC,UAAU;AAAQ;AAEvB,YAAM,iBAAiB,YAAY;AAC7B,YAAA,gBAAgB,WAAW,SAAS;AAC1C,UAAI,kBAAkB;AACtB,UAAI,kBAAkB;AACtB,UAAI,kBAAkB;AAEH,yBAAA,UAAU,MAAS,EAAA;AACtC;AAEA,UAAI,eAAe;AACE,6BAAA,eAAU,YAAV,mBAAmB,gBAAe;AACrD;AAAA,MACF;AAEA,UAAI,mBAAmB,gBAAgB;AACrC;AAAA,MACF;AAGI,UAAA,UAAU,SAAS,GAAG;AAClB,cAAA,OAAO,UAAU;AACvB,aAAM,MAAM,WAAW;AAEvB,2BAAmB,KAAM;AACzB,YAAI,kBAAkB,gBAAgB;AACpC;AAAA,QACF;AAEA,aAAM,MAAM,WAAW;AAAA,MACzB;AAGW,iBAAA,cAAc,UAAU,WAAW;AAC5C,2BAAmB,WAAW;AAC9B,YAAI,kBAAkB,gBAAgB;AACpC;AAAA,QACF;AAAA,MACF;AAEA,aAAO,KAAK;AAAA,QACV;AAAA,QACA,KAAK,IAAI,iBAAiB,eAAe;AAAA,MAAA;AAAA,IAC3C;AAIF,oBAAgB,aAAa;AAE3B,YAAM,WAAW;AAGX,YAAA,kBAAkB,oBAAoB,WAAW,MAAM;AACvD,YAAA;AAIN,UAAI,kBAAmB,WAAW,UAAU,kBAAmB,GAAG;AAChE,cAAM,oBAAoB,eAAgB;AAAA,MAC5C;AAAA,IAAA,CACD;AAAA,EAEA,GAAA,CAAC,SAAS,UAAU,eAAe,CAAC;AAEvC,oBAAkB,EAAC,KAAK,QAAQ,UAAU,eAAe,CAAA;AAGzC,kBAAA,gBAAgB,CAAC,QAAQ,CAAC;AAE1C,MAAI,WAAW;AACX,MAAA,WAAW,SAAS,cAAc;AAC9B,UAAA,cAAc,WAAW,SAAS;AAExC,UAAM,WACJ,oBAAC,gBAA0B,EAAA,WAAW,OAAO,eAAa,MACxD,UAAA,qBAAC,aAAY,EAAA,eAAc,UAAS,eAAe,aACjD,UAAA;AAAA,MAAC,oBAAA,YAAA,EAAW,cAAW,KAAI,UAAU,YAAY,MAAM,MAAM,KAC3D,UAAC,oBAAA,eAAA,CAAA,CAAc,EACjB,CAAA;AAAA,0BACC,MACE,EAAA,UAAA,WAAW,IAAI,CAAC,OAAO,UAAU;AAChC,cAAM,SAAS,gBAAgB;AAE7B,eAAA;AAAA,UAACC;AAAAA,UAAA;AAAA,YAEC,OAAO;AAAA,YACP,YAAY,MAAM;;AAChB,kBAAI,CAAC,QAAQ;AACX,kCAAM,OAAM,eAAZ;AAAA,cACF;AAAA,YACF;AAAA,YAEC,UAAa,aAAA,OAAO,EAAC,YAAY,MAAK;AAAA,UAAA;AAAA,UARlC;AAAA,QAAA;AAAA,MAWV,CAAA,GACH;AAAA,IAAA,GACF,KAvBkB,MAwBpB;AAGF,eAAW,CAAC,QAAQ;AACd,UAAA,cAAc,CAAC,GAAG,UAAU;AAClC,QAAI,WAAW;AACf,QAAI,eAAe,GAAG;AACX,eAAA,QAAQ,YAAY,MAAQ,CAAA;AACrC;AAAA,IACF;AACA,aAAS,KAAK,GAAG,YAAY,MAAM,CAAC,QAAQ,CAAC;AAAA,EAC/C;AAEM,QAAA,YAAY,SAAS,SAAS;AACpC,QAAM,kBAAkB,SAAS,IAAI,CAAC,OAAO,UAAU;AACrD,UAAM,YAAY,UAAU;AACtB,UAAA,cAAc,CAAC,aAAa;AAElC,WAAO,aAAkC,OAAO;AAAA,MAC9C,KAAK,MAAM,OAAO;AAAA,MAClB;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,QAAQ,gBAAgB,MAAM,QAAQ;AAAA,IAAA,CACvC;AAAA,EAAA,CACF;AAEK,QAAA,UAAU,eAAe,QAAQ;AAGrC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,KAAK,WAAW,gBAAgB;AAAA,MAC3C,cAAY,MAAM,EAAC,SAAS,eAAc;AAAA,MAC1C,KAAK;AAAA,MAEL,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACL,WAAW,KAAK,kCAAkC,MAAM,SAAS;AAAA,UAEhE,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAS,UAAU,MAAqD;AACtE,UAAQ,MAAM;AAAA,IACZ,KAAK;AACI,aAAA,EAAC,MAAM,WAAW,MAAM,MAAM,KAAK,MAAM,WAAW;IAC7D,KAAK;AACI,aAAA,EAAC,MAAM,WAAW,MAAM,MAAM,KAAK,MAAM,WAAW;IAC7D,KAAK;AACI,aAAA,EAAC,MAAM,WAAW,MAAM,MAAM,KAAK,MAAM,WAAW;IAC7D;AACS,aAAA,EAAC,MAAM,aAAa,MAAM,MAAM,KAAK,MAAM,WAAW;EACjE;AACF;AC7NO,MAAM,WAAW;AAAA,EACtB,oBAAC,QAAK,EAAA,GAAE,kNAAkN,CAAA;AAAA,EAC1N;AAAc;"}