@banzamel/mineralui 2.1.2 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{MDetailList-BhKBJwpd.cjs → MDetailList-DTLU7HQZ.cjs} +2 -2
- package/dist/{MDetailList-BhKBJwpd.cjs.map → MDetailList-DTLU7HQZ.cjs.map} +1 -1
- package/dist/{MDetailList-BjvZUyNj.js → MDetailList-fDhVyhm7.js} +3 -3
- package/dist/{MDetailList-BjvZUyNj.js.map → MDetailList-fDhVyhm7.js.map} +1 -1
- package/dist/{MDropdownMenu-CZmU3uku.js → MDropdownMenu-BeD_DxPr.js} +2 -2
- package/dist/{MDropdownMenu-CZmU3uku.js.map → MDropdownMenu-BeD_DxPr.js.map} +1 -1
- package/dist/{MDropdownMenu-hXaIMkAj.cjs → MDropdownMenu-C2lftqSx.cjs} +2 -2
- package/dist/{MDropdownMenu-hXaIMkAj.cjs.map → MDropdownMenu-C2lftqSx.cjs.map} +1 -1
- package/dist/{MInput-BhTAfpYS.cjs → MInput-BpTlP8GE.cjs} +2 -2
- package/dist/{MInput-BhTAfpYS.cjs.map → MInput-BpTlP8GE.cjs.map} +1 -1
- package/dist/{MInput-CgtX0fUN.js → MInput-C8ObGzQk.js} +2 -2
- package/dist/{MInput-CgtX0fUN.js.map → MInput-C8ObGzQk.js.map} +1 -1
- package/dist/{MInputCVC-BGYhUGDE.js → MInputCVC-DvUOzpYp.js} +24 -24
- package/dist/{MInputCVC-BGYhUGDE.js.map → MInputCVC-DvUOzpYp.js.map} +1 -1
- package/dist/{MInputCVC-E2Z2hYfy.cjs → MInputCVC-_2ALihF1.cjs} +2 -2
- package/dist/{MInputCVC-E2Z2hYfy.cjs.map → MInputCVC-_2ALihF1.cjs.map} +1 -1
- package/dist/{MInputSearch-DE9Jqp0i.cjs → MInputSearch-9wcXlY8-.cjs} +2 -2
- package/dist/{MInputSearch-DE9Jqp0i.cjs.map → MInputSearch-9wcXlY8-.cjs.map} +1 -1
- package/dist/{MInputSearch-DEr5HBgw.js → MInputSearch-BM8gLlJ1.js} +3 -3
- package/dist/{MInputSearch-DEr5HBgw.js.map → MInputSearch-BM8gLlJ1.js.map} +1 -1
- package/dist/{MPagination-DTqT33Mx.cjs → MPagination-C6QQdEj_.cjs} +2 -2
- package/dist/{MPagination-DTqT33Mx.cjs.map → MPagination-C6QQdEj_.cjs.map} +1 -1
- package/dist/{MPagination-7yTbB8dZ.js → MPagination-CgmNEAZX.js} +6 -6
- package/dist/{MPagination-7yTbB8dZ.js.map → MPagination-CgmNEAZX.js.map} +1 -1
- package/dist/{MPopover-hDqrn317.cjs → MPopover-Cweomcj2.cjs} +2 -2
- package/dist/MPopover-Cweomcj2.cjs.map +1 -0
- package/dist/{MPopover-BRuwva-c.js → MPopover-DT3vclV1.js} +6 -3
- package/dist/MPopover-DT3vclV1.js.map +1 -0
- package/dist/{MTag-BtlOVMRl.cjs → MTag-BzTp1crT.cjs} +2 -2
- package/dist/{MTag-BtlOVMRl.cjs.map → MTag-BzTp1crT.cjs.map} +1 -1
- package/dist/{MTag-BF6htPr-.js → MTag-D9q6faIk.js} +2 -2
- package/dist/{MTag-BF6htPr-.js.map → MTag-D9q6faIk.js.map} +1 -1
- package/dist/{MTreeView-DQaRF0ty.js → MTreeView-B1J7uqd1.js} +63 -63
- package/dist/{MTreeView-DQaRF0ty.js.map → MTreeView-B1J7uqd1.js.map} +1 -1
- package/dist/{MTreeView-1IqmVPMv.cjs → MTreeView-DuQkm0ZV.cjs} +2 -2
- package/dist/{MTreeView-1IqmVPMv.cjs.map → MTreeView-DuQkm0ZV.cjs.map} +1 -1
- package/dist/{cards-Du2kX3Br.js → cards-DYmK8TpL.js} +73 -73
- package/dist/{cards-Du2kX3Br.js.map → cards-DYmK8TpL.js.map} +1 -1
- package/dist/{cards-BBYh24NQ.cjs → cards-fRWZkts9.cjs} +2 -2
- package/dist/{cards-BBYh24NQ.cjs.map → cards-fRWZkts9.cjs.map} +1 -1
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +1 -1
- package/dist/{controls-Cbv4FmNq.js → controls-BKAhqjNM.js} +2 -2
- package/dist/{controls-Cbv4FmNq.js.map → controls-BKAhqjNM.js.map} +1 -1
- package/dist/{controls-DrdHBBtm.cjs → controls-CT_0lIPr.cjs} +2 -2
- package/dist/{controls-DrdHBBtm.cjs.map → controls-CT_0lIPr.cjs.map} +1 -1
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +1 -1
- package/dist/{data-Csb03WFo.cjs → data-CuynADWM.cjs} +2 -2
- package/dist/{data-Csb03WFo.cjs.map → data-CuynADWM.cjs.map} +1 -1
- package/dist/{data-BgTkBMkP.js → data-D8WFA3Et.js} +16 -16
- package/dist/{data-BgTkBMkP.js.map → data-D8WFA3Et.js.map} +1 -1
- package/dist/data.cjs +1 -1
- package/dist/data.js +2 -2
- package/dist/{display-D9H8MP8D.js → display-BF4jASt9.js} +16 -16
- package/dist/{display-D9H8MP8D.js.map → display-BF4jASt9.js.map} +1 -1
- package/dist/{display-IMWtdmxS.cjs → display-DMix8BmD.cjs} +3 -3
- package/dist/{display-IMWtdmxS.cjs.map → display-DMix8BmD.cjs.map} +1 -1
- package/dist/display.cjs +1 -1
- package/dist/display.js +2 -2
- package/dist/{dropdowns-oj4--GbK.js → dropdowns-5cJf-6UG.js} +91 -91
- package/dist/{dropdowns-oj4--GbK.js.map → dropdowns-5cJf-6UG.js.map} +1 -1
- package/dist/{dropdowns-D_nUdflh.cjs → dropdowns-C-ASvu7P.cjs} +2 -2
- package/dist/{dropdowns-D_nUdflh.cjs.map → dropdowns-C-ASvu7P.cjs.map} +1 -1
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/{feedback-u1ssUT7e.cjs → feedback-4TjD57rX.cjs} +2 -2
- package/dist/{feedback-u1ssUT7e.cjs.map → feedback-4TjD57rX.cjs.map} +1 -1
- package/dist/{feedback-D7BTlioj.js → feedback-DW-cehnb.js} +35 -35
- package/dist/{feedback-D7BTlioj.js.map → feedback-DW-cehnb.js.map} +1 -1
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +2 -2
- package/dist/icons/glyphs/MCoinIcon.d.ts +2 -0
- package/dist/icons/glyphs/MMoneyIcon.d.ts +2 -0
- package/dist/icons/glyphs/MReceiptIcon.d.ts +2 -0
- package/dist/icons/glyphs/MWalletIcon.d.ts +2 -0
- package/dist/icons/index.d.ts +4 -0
- package/dist/{icons-DLP-Rs6z.js → icons-CBMl-kOM.js} +221 -166
- package/dist/icons-CBMl-kOM.js.map +1 -0
- package/dist/icons-D675Im0B.cjs +2 -0
- package/dist/icons-D675Im0B.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.js +53 -53
- package/dist/{inputs-DQrjGfwd.js → inputs-CQoi402V.js} +180 -180
- package/dist/{inputs-DQrjGfwd.js.map → inputs-CQoi402V.js.map} +1 -1
- package/dist/{inputs-DsFdc0Io.cjs → inputs-yaaTPTsY.cjs} +2 -2
- package/dist/{inputs-DsFdc0Io.cjs.map → inputs-yaaTPTsY.cjs.map} +1 -1
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/{layout-B_2yBP1M.cjs → layout-CfolwT8L.cjs} +2 -2
- package/dist/{layout-B_2yBP1M.cjs.map → layout-CfolwT8L.cjs.map} +1 -1
- package/dist/{layout-BuvV-N9H.js → layout-i8H5tIbO.js} +32 -32
- package/dist/{layout-BuvV-N9H.js.map → layout-i8H5tIbO.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{media-Xt6MkVhb.cjs → media-DRz3JZfr.cjs} +2 -2
- package/dist/{media-Xt6MkVhb.cjs.map → media-DRz3JZfr.cjs.map} +1 -1
- package/dist/{media-5IsYrhIQ.js → media-vOQOIYFD.js} +11 -11
- package/dist/{media-5IsYrhIQ.js.map → media-vOQOIYFD.js.map} +1 -1
- package/dist/media.cjs +1 -1
- package/dist/media.js +1 -1
- package/dist/{overlays-WA3jnWTG.js → overlays-CAcGmqNv.js} +50 -50
- package/dist/{overlays-WA3jnWTG.js.map → overlays-CAcGmqNv.js.map} +1 -1
- package/dist/{overlays-BAJDNT1m.cjs → overlays-zPzbHW5P.cjs} +2 -2
- package/dist/{overlays-BAJDNT1m.cjs.map → overlays-zPzbHW5P.cjs.map} +1 -1
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +2 -2
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.js +1 -1
- package/package.json +1 -1
- package/dist/MPopover-BRuwva-c.js.map +0 -1
- package/dist/MPopover-hDqrn317.cjs.map +0 -1
- package/dist/icons-BfdQ45F2.cjs +0 -2
- package/dist/icons-BfdQ45F2.cjs.map +0 -1
- package/dist/icons-DLP-Rs6z.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MTreeView-1IqmVPMv.cjs","names":[],"sources":["../src/components/data/MTreeView/MTreeView.tsx"],"sourcesContent":["import {useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, DragEvent, MouseEvent, ReactNode} from 'react'\nimport type {\n MTreeViewProps,\n MTreeItemProps,\n MTreeNode,\n MTreeViewContextMenuItem,\n MTreeViewMoveEvent,\n} from './MTreeView.types'\nimport {cn} from '../../../utils/cn'\nimport {MCheckbox} from '../../controls'\nimport {MPortal} from '../../primitives'\nimport {\n MChevronRightIcon,\n MFileCodeIcon,\n MFileCsvIcon,\n MFileCssIcon,\n MFileExeIcon,\n MFileGifIcon,\n MFileHtmlIcon,\n MFileIcon,\n MFileImageIcon,\n MFileJpgIcon,\n MFileJsIcon,\n MFileJsonIcon,\n MFileMdIcon,\n MFileMp3Icon,\n MFileMp4Icon,\n MFileOdtIcon,\n MFilePdfIcon,\n MFilePhpIcon,\n MFilePngIcon,\n MFilePptIcon,\n MFileRarIcon,\n MFileSvgIcon,\n MFileTextIcon,\n MFileTsIcon,\n MFileTsxIcon,\n MFileTxtIcon,\n MFileWebpIcon,\n MFileXlsIcon,\n MFileXmlIcon,\n MFileZipIcon,\n MFolderIcon,\n MFolderOpenIcon,\n} from '../../../icons'\nimport './MTreeView.css'\nconst fileTypeMap: Record<string, ReactNode> = {\n pdf: <MFilePdfIcon />,\n ts: <MFileTsIcon />,\n tsx: <MFileTsxIcon />,\n js: <MFileJsIcon />,\n jsx: <MFileCodeIcon />,\n css: <MFileCssIcon />,\n scss: <MFileCssIcon />,\n html: <MFileHtmlIcon />,\n json: <MFileJsonIcon />,\n md: <MFileMdIcon />,\n txt: <MFileTxtIcon />,\n csv: <MFileCsvIcon />,\n zip: <MFileZipIcon />,\n rar: <MFileRarIcon />,\n svg: <MFileSvgIcon />,\n png: <MFilePngIcon />,\n jpg: <MFileJpgIcon />,\n jpeg: <MFileImageIcon />,\n gif: <MFileGifIcon />,\n webp: <MFileWebpIcon />,\n php: <MFilePhpIcon />,\n xml: <MFileXmlIcon />,\n xls: <MFileXlsIcon />,\n ppt: <MFilePptIcon />,\n odt: <MFileOdtIcon />,\n exe: <MFileExeIcon />,\n mp3: <MFileMp3Icon />,\n mp4: <MFileMp4Icon />,\n}\n\n// Read the file extension once so icon logic stays predictable.\nfunction getFileExtension(label: string): string | null {\n const dot = label.lastIndexOf('.')\n if (dot < 1) return null\n return label.slice(dot + 1).toLowerCase()\n}\n\n// Treat explicit folders and nodes with children as directory-like.\nfunction isFolderNode(node: MTreeNode) {\n return node.kind === 'folder' || Boolean(node.children?.length)\n}\n\n// Resolve the proper file icon by extension.\nfunction getFileIcon(label: string): ReactNode {\n const ext = getFileExtension(label)\n if (!ext) return <MFileIcon />\n\n return fileTypeMap[ext] ?? <MFileTextIcon />\n}\n\n// Prefer custom icons first, then fall back to folder or file visuals.\nfunction getDefaultIcon(node: MTreeNode, isExpanded: boolean, fileIcons: boolean) {\n if (node.icon) return node.icon\n if (!fileIcons) return null\n\n if (isFolderNode(node)) return isExpanded ? <MFolderOpenIcon /> : <MFolderIcon />\n\n return getFileIcon(node.label)\n}\n\n// Cache nodes and descendants so drag-drop validation stays fast.\nfunction buildTreeLookup(items: MTreeNode[]) {\n const nodeMap = new Map<string, MTreeNode>()\n const descendants = new Map<string, Set<string>>()\n const parentMap = new Map<string, string>()\n\n function walk(node: MTreeNode) {\n nodeMap.set(node.id, node)\n\n const childIds = new Set<string>()\n\n for (const child of node.children ?? []) {\n parentMap.set(child.id, node.id)\n childIds.add(child.id)\n\n const nestedIds = walk(child)\n nestedIds.forEach((id) => childIds.add(id))\n }\n\n descendants.set(node.id, childIds)\n return childIds\n }\n\n items.forEach(walk)\n\n return {nodeMap, descendants, parentMap}\n}\n\n// Compute indeterminate ids: a node where some but not all leaf descendants are checked.\nfunction computeIndeterminate(items: MTreeNode[], checked: Set<string>): Set<string> {\n const indeterminate = new Set<string>()\n\n function walk(node: MTreeNode): {checked: number; total: number} {\n if (!node.children?.length) {\n return checked.has(node.id) ? {checked: 1, total: 1} : {checked: 0, total: 1}\n }\n\n let c = 0\n let t = 0\n\n for (const child of node.children) {\n const r = walk(child)\n c += r.checked\n t += r.total\n }\n\n if (c > 0 && c < t) indeterminate.add(node.id)\n return {checked: c, total: t}\n }\n\n items.forEach(walk)\n return indeterminate\n}\n\n// Keep the context menu inside the viewport.\nfunction clampMenuPosition(x: number, y: number) {\n if (typeof window === 'undefined') {\n return {x, y}\n }\n\n return {\n x: Math.max(8, Math.min(x, window.innerWidth - 220)),\n y: Math.max(8, Math.min(y, window.innerHeight - 16)),\n }\n}\n\n// Render one visible row and recurse into children when expanded.\nfunction TreeItem({\n node,\n color,\n level,\n expandable,\n selectable,\n expandedIds,\n selectedId,\n draggedId,\n dropTargetId,\n onToggle,\n onSelect,\n checkable,\n checkedIds,\n indeterminateIds,\n onCheck,\n indent,\n showLines,\n fileIcons,\n draggable,\n canDropOnNode,\n onContextMenu,\n onDragStart,\n onDragOver,\n onDrop,\n onDragEnd,\n}: MTreeItemProps) {\n const hasChildren = isFolderNode(node)\n const isExpanded = expandedIds.has(node.id)\n const isSelected = selectedId === node.id\n const isDragging = draggedId === node.id\n const isDropTarget = dropTargetId === node.id\n const canDrop = canDropOnNode?.(node)\n const icon = getDefaultIcon(node, isExpanded, !!fileIcons)\n const isChecked = checkedIds?.has(node.id) ?? false\n const isIndeterminate = indeterminateIds?.has(node.id) ?? false\n\n return (\n <li role=\"treeitem\" aria-expanded={hasChildren ? isExpanded : undefined}>\n <div\n className={cn(\n 'item',\n isSelected && 'selected',\n node.disabled && 'disabled',\n selectable && !node.disabled && 'selectable',\n draggable && !node.disabled && 'draggable',\n isDragging && 'dragging',\n canDrop && 'can-drop',\n isDropTarget && 'drop-target'\n )}\n data-color={color}\n style={{paddingLeft: level * indent}}\n draggable={draggable && !node.disabled}\n onClick={() => {\n if (node.disabled) return\n if (hasChildren && expandable) onToggle(node.id)\n if (selectable) onSelect?.(node.id, node)\n }}\n onContextMenu={(event) => onContextMenu?.(event, node)}\n onDragStart={(event) => onDragStart?.(event, node)}\n onDragOver={(event) => onDragOver?.(event, node)}\n onDrop={(event) => onDrop?.(event, node)}\n onDragEnd={onDragEnd}\n >\n <span className=\"toggle\">\n {hasChildren && expandable ? (\n <span className={cn('arrow', isExpanded && 'expanded')}>\n <MChevronRightIcon />\n </span>\n ) : (\n <span className=\"spacer\" />\n )}\n </span>\n {checkable && (\n <span className=\"check\" onClick={(event) => event.stopPropagation()}>\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n disabled={node.disabled}\n checked={isChecked}\n indeterminate={isIndeterminate}\n onChange={() => onCheck?.(node.id)}\n />\n </span>\n )}\n {icon && <span className=\"icon\">{icon}</span>}\n <span className=\"label\">{node.label}</span>\n </div>\n {hasChildren && isExpanded && (\n <ul\n className=\"list\"\n role=\"group\"\n style={showLines ? ({'--line-left': `${level * indent + 17}px`} as CSSProperties) : undefined}\n >\n {(node.children ?? []).map((child) => (\n <TreeItem\n key={child.id}\n node={child}\n color={color}\n level={level + 1}\n expandable={expandable}\n selectable={selectable}\n expandedIds={expandedIds}\n selectedId={selectedId}\n draggedId={draggedId}\n dropTargetId={dropTargetId}\n onToggle={onToggle}\n onSelect={onSelect}\n checkable={checkable}\n checkedIds={checkedIds}\n indeterminateIds={indeterminateIds}\n onCheck={onCheck}\n indent={indent}\n showLines={showLines}\n fileIcons={fileIcons}\n draggable={draggable}\n canDropOnNode={canDropOnNode}\n onContextMenu={onContextMenu}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onDragEnd={onDragEnd}\n />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\n// Render a file tree with selection, context actions and folder moves.\nexport function MTreeView({\n items,\n color = 'primary',\n expandable = true,\n selectable = false,\n defaultExpanded = [],\n expanded: controlledExpanded,\n onExpandChange,\n selected: controlledSelected,\n onSelect,\n checkable = false,\n defaultChecked = [],\n checked: controlledChecked,\n onCheckedChange,\n indent = 20,\n showLines = true,\n fileIcons = true,\n draggable = false,\n canDrop,\n onMove,\n contextMenuItems,\n onContextMenuAction,\n className,\n ...rest\n}: MTreeViewProps) {\n const [internalExpanded, setInternalExpanded] = useState<string[]>(defaultExpanded)\n const [internalSelected, setInternalSelected] = useState<string | null>(null)\n const [internalChecked, setInternalChecked] = useState<string[]>(defaultChecked)\n const [draggedId, setDraggedId] = useState<string | null>(null)\n const [dropTargetId, setDropTargetId] = useState<string | null>(null)\n const [menu, setMenu] = useState<{\n node: MTreeNode\n items: MTreeViewContextMenuItem[]\n x: number\n y: number\n } | null>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n const expandedArr = controlledExpanded ?? internalExpanded\n const expandedIds = new Set(expandedArr)\n const selectedId = controlledSelected !== undefined ? controlledSelected : internalSelected\n const checkedArr = controlledChecked ?? internalChecked\n const checkedIds = new Set(checkedArr)\n const indeterminateIds = checkable ? computeIndeterminate(items, checkedIds) : new Set<string>()\n const {nodeMap, descendants, parentMap} = buildTreeLookup(items)\n const draggedNode = draggedId ? (nodeMap.get(draggedId) ?? null) : null\n\n useEffect(() => {\n if (!menu) return\n\n function closeMenu(event?: Event) {\n if (event && menuRef.current && menuRef.current.contains(event.target as Node)) {\n return\n }\n\n setMenu(null)\n }\n\n function handleKey(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n setMenu(null)\n }\n }\n\n document.addEventListener('mousedown', closeMenu)\n document.addEventListener('scroll', closeMenu, true)\n window.addEventListener('resize', closeMenu)\n document.addEventListener('keydown', handleKey)\n\n return () => {\n document.removeEventListener('mousedown', closeMenu)\n document.removeEventListener('scroll', closeMenu, true)\n window.removeEventListener('resize', closeMenu)\n document.removeEventListener('keydown', handleKey)\n }\n }, [menu])\n\n function handleToggle(id: string) {\n const next = expandedIds.has(id) ? expandedArr.filter((e) => e !== id) : [...expandedArr, id]\n if (onExpandChange) onExpandChange(next)\n else setInternalExpanded(next)\n }\n\n function handleSelect(id: string, node: MTreeNode) {\n if (onSelect) onSelect(id, node)\n else setInternalSelected(id)\n }\n\n function handleCheck(id: string) {\n const node = nodeMap.get(id)\n if (!node || node.disabled) return\n\n const next = new Set(checkedIds)\n const isCurrentlyChecked = next.has(id)\n const subtree = [id, ...Array.from(descendants.get(id) ?? [])]\n\n if (isCurrentlyChecked) {\n for (const sid of subtree) next.delete(sid)\n } else {\n for (const sid of subtree) {\n const sNode = nodeMap.get(sid)\n if (sNode && !sNode.disabled) next.add(sid)\n }\n }\n\n let parentId = parentMap.get(id)\n\n while (parentId) {\n const parent = nodeMap.get(parentId)\n if (!parent) break\n\n const allChildrenChecked = (parent.children ?? []).every((child) => child.disabled || next.has(child.id))\n const hasEnabledChild = (parent.children ?? []).some((child) => !child.disabled)\n\n if (allChildrenChecked && hasEnabledChild) next.add(parentId)\n else next.delete(parentId)\n\n parentId = parentMap.get(parentId)\n }\n\n const nextArr = Array.from(next)\n\n if (controlledChecked === undefined) setInternalChecked(nextArr)\n onCheckedChange?.(nextArr)\n }\n\n function closeDrag() {\n setDraggedId(null)\n setDropTargetId(null)\n }\n\n function isValidDropTarget(targetNode: MTreeNode) {\n if (!draggedNode || !draggable || !onMove) return false\n if (targetNode.disabled || !isFolderNode(targetNode)) return false\n if (targetNode.id === draggedNode.id) return false\n if (descendants.get(draggedNode.id)?.has(targetNode.id)) return false\n\n return canDrop ? canDrop(draggedNode, targetNode) : true\n }\n\n function handleContextMenu(event: MouseEvent<HTMLDivElement>, node: MTreeNode) {\n if (!contextMenuItems || node.disabled) return\n\n const items = contextMenuItems(node).filter(Boolean)\n if (!items.length) return\n\n event.preventDefault()\n handleSelect(node.id, node)\n\n const pos = clampMenuPosition(event.clientX, event.clientY)\n setMenu({\n node,\n items,\n x: pos.x,\n y: pos.y,\n })\n }\n\n function handleDragStart(event: DragEvent<HTMLDivElement>, node: MTreeNode) {\n if (!draggable || node.disabled) return\n\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', node.id)\n setMenu(null)\n setDraggedId(node.id)\n }\n\n function handleDragOver(event: DragEvent<HTMLDivElement>, targetNode: MTreeNode) {\n if (!isValidDropTarget(targetNode)) return\n\n event.preventDefault()\n event.dataTransfer.dropEffect = 'move'\n setDropTargetId(targetNode.id)\n }\n\n function handleDrop(event: DragEvent<HTMLDivElement>, targetNode: MTreeNode) {\n event.preventDefault()\n\n if (!draggedNode || !isValidDropTarget(targetNode)) {\n closeDrag()\n return\n }\n\n onMove?.({\n draggedId: draggedNode.id,\n draggedNode,\n targetId: targetNode.id,\n targetNode,\n } satisfies MTreeViewMoveEvent)\n\n if (expandable && !expandedIds.has(targetNode.id)) {\n handleToggle(targetNode.id)\n }\n\n closeDrag()\n }\n\n return (\n <div className={cn('tree', `color-${color}`, showLines && 'lines', className)} {...rest}>\n <ul className=\"list\" role=\"tree\">\n {items.map((item) => (\n <TreeItem\n key={item.id}\n node={item}\n color={color}\n level={0}\n expandable={expandable}\n selectable={selectable}\n expandedIds={expandedIds}\n selectedId={selectedId}\n draggedId={draggedId}\n dropTargetId={dropTargetId}\n onToggle={handleToggle}\n onSelect={handleSelect}\n checkable={checkable}\n checkedIds={checkedIds}\n indeterminateIds={indeterminateIds}\n onCheck={handleCheck}\n indent={indent}\n showLines={showLines}\n fileIcons={fileIcons}\n draggable={draggable}\n canDropOnNode={isValidDropTarget}\n onContextMenu={handleContextMenu}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onDragEnd={closeDrag}\n />\n ))}\n </ul>\n {menu && (\n <MPortal>\n <div ref={menuRef} className=\"tree menu\" style={{top: menu.y, left: menu.x}} role=\"menu\">\n {menu.items.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n className={cn('action', item.color, item.disabled && 'disabled')}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => {\n if (item.disabled) return\n onContextMenuAction?.(item.id, menu.node)\n setMenu(null)\n }}\n >\n {item.icon && <span className=\"icon\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n ))}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MTreeView-DuQkm0ZV.cjs","names":[],"sources":["../src/components/data/MTreeView/MTreeView.tsx"],"sourcesContent":["import {useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, DragEvent, MouseEvent, ReactNode} from 'react'\nimport type {\n MTreeViewProps,\n MTreeItemProps,\n MTreeNode,\n MTreeViewContextMenuItem,\n MTreeViewMoveEvent,\n} from './MTreeView.types'\nimport {cn} from '../../../utils/cn'\nimport {MCheckbox} from '../../controls'\nimport {MPortal} from '../../primitives'\nimport {\n MChevronRightIcon,\n MFileCodeIcon,\n MFileCsvIcon,\n MFileCssIcon,\n MFileExeIcon,\n MFileGifIcon,\n MFileHtmlIcon,\n MFileIcon,\n MFileImageIcon,\n MFileJpgIcon,\n MFileJsIcon,\n MFileJsonIcon,\n MFileMdIcon,\n MFileMp3Icon,\n MFileMp4Icon,\n MFileOdtIcon,\n MFilePdfIcon,\n MFilePhpIcon,\n MFilePngIcon,\n MFilePptIcon,\n MFileRarIcon,\n MFileSvgIcon,\n MFileTextIcon,\n MFileTsIcon,\n MFileTsxIcon,\n MFileTxtIcon,\n MFileWebpIcon,\n MFileXlsIcon,\n MFileXmlIcon,\n MFileZipIcon,\n MFolderIcon,\n MFolderOpenIcon,\n} from '../../../icons'\nimport './MTreeView.css'\nconst fileTypeMap: Record<string, ReactNode> = {\n pdf: <MFilePdfIcon />,\n ts: <MFileTsIcon />,\n tsx: <MFileTsxIcon />,\n js: <MFileJsIcon />,\n jsx: <MFileCodeIcon />,\n css: <MFileCssIcon />,\n scss: <MFileCssIcon />,\n html: <MFileHtmlIcon />,\n json: <MFileJsonIcon />,\n md: <MFileMdIcon />,\n txt: <MFileTxtIcon />,\n csv: <MFileCsvIcon />,\n zip: <MFileZipIcon />,\n rar: <MFileRarIcon />,\n svg: <MFileSvgIcon />,\n png: <MFilePngIcon />,\n jpg: <MFileJpgIcon />,\n jpeg: <MFileImageIcon />,\n gif: <MFileGifIcon />,\n webp: <MFileWebpIcon />,\n php: <MFilePhpIcon />,\n xml: <MFileXmlIcon />,\n xls: <MFileXlsIcon />,\n ppt: <MFilePptIcon />,\n odt: <MFileOdtIcon />,\n exe: <MFileExeIcon />,\n mp3: <MFileMp3Icon />,\n mp4: <MFileMp4Icon />,\n}\n\n// Read the file extension once so icon logic stays predictable.\nfunction getFileExtension(label: string): string | null {\n const dot = label.lastIndexOf('.')\n if (dot < 1) return null\n return label.slice(dot + 1).toLowerCase()\n}\n\n// Treat explicit folders and nodes with children as directory-like.\nfunction isFolderNode(node: MTreeNode) {\n return node.kind === 'folder' || Boolean(node.children?.length)\n}\n\n// Resolve the proper file icon by extension.\nfunction getFileIcon(label: string): ReactNode {\n const ext = getFileExtension(label)\n if (!ext) return <MFileIcon />\n\n return fileTypeMap[ext] ?? <MFileTextIcon />\n}\n\n// Prefer custom icons first, then fall back to folder or file visuals.\nfunction getDefaultIcon(node: MTreeNode, isExpanded: boolean, fileIcons: boolean) {\n if (node.icon) return node.icon\n if (!fileIcons) return null\n\n if (isFolderNode(node)) return isExpanded ? <MFolderOpenIcon /> : <MFolderIcon />\n\n return getFileIcon(node.label)\n}\n\n// Cache nodes and descendants so drag-drop validation stays fast.\nfunction buildTreeLookup(items: MTreeNode[]) {\n const nodeMap = new Map<string, MTreeNode>()\n const descendants = new Map<string, Set<string>>()\n const parentMap = new Map<string, string>()\n\n function walk(node: MTreeNode) {\n nodeMap.set(node.id, node)\n\n const childIds = new Set<string>()\n\n for (const child of node.children ?? []) {\n parentMap.set(child.id, node.id)\n childIds.add(child.id)\n\n const nestedIds = walk(child)\n nestedIds.forEach((id) => childIds.add(id))\n }\n\n descendants.set(node.id, childIds)\n return childIds\n }\n\n items.forEach(walk)\n\n return {nodeMap, descendants, parentMap}\n}\n\n// Compute indeterminate ids: a node where some but not all leaf descendants are checked.\nfunction computeIndeterminate(items: MTreeNode[], checked: Set<string>): Set<string> {\n const indeterminate = new Set<string>()\n\n function walk(node: MTreeNode): {checked: number; total: number} {\n if (!node.children?.length) {\n return checked.has(node.id) ? {checked: 1, total: 1} : {checked: 0, total: 1}\n }\n\n let c = 0\n let t = 0\n\n for (const child of node.children) {\n const r = walk(child)\n c += r.checked\n t += r.total\n }\n\n if (c > 0 && c < t) indeterminate.add(node.id)\n return {checked: c, total: t}\n }\n\n items.forEach(walk)\n return indeterminate\n}\n\n// Keep the context menu inside the viewport.\nfunction clampMenuPosition(x: number, y: number) {\n if (typeof window === 'undefined') {\n return {x, y}\n }\n\n return {\n x: Math.max(8, Math.min(x, window.innerWidth - 220)),\n y: Math.max(8, Math.min(y, window.innerHeight - 16)),\n }\n}\n\n// Render one visible row and recurse into children when expanded.\nfunction TreeItem({\n node,\n color,\n level,\n expandable,\n selectable,\n expandedIds,\n selectedId,\n draggedId,\n dropTargetId,\n onToggle,\n onSelect,\n checkable,\n checkedIds,\n indeterminateIds,\n onCheck,\n indent,\n showLines,\n fileIcons,\n draggable,\n canDropOnNode,\n onContextMenu,\n onDragStart,\n onDragOver,\n onDrop,\n onDragEnd,\n}: MTreeItemProps) {\n const hasChildren = isFolderNode(node)\n const isExpanded = expandedIds.has(node.id)\n const isSelected = selectedId === node.id\n const isDragging = draggedId === node.id\n const isDropTarget = dropTargetId === node.id\n const canDrop = canDropOnNode?.(node)\n const icon = getDefaultIcon(node, isExpanded, !!fileIcons)\n const isChecked = checkedIds?.has(node.id) ?? false\n const isIndeterminate = indeterminateIds?.has(node.id) ?? false\n\n return (\n <li role=\"treeitem\" aria-expanded={hasChildren ? isExpanded : undefined}>\n <div\n className={cn(\n 'item',\n isSelected && 'selected',\n node.disabled && 'disabled',\n selectable && !node.disabled && 'selectable',\n draggable && !node.disabled && 'draggable',\n isDragging && 'dragging',\n canDrop && 'can-drop',\n isDropTarget && 'drop-target'\n )}\n data-color={color}\n style={{paddingLeft: level * indent}}\n draggable={draggable && !node.disabled}\n onClick={() => {\n if (node.disabled) return\n if (hasChildren && expandable) onToggle(node.id)\n if (selectable) onSelect?.(node.id, node)\n }}\n onContextMenu={(event) => onContextMenu?.(event, node)}\n onDragStart={(event) => onDragStart?.(event, node)}\n onDragOver={(event) => onDragOver?.(event, node)}\n onDrop={(event) => onDrop?.(event, node)}\n onDragEnd={onDragEnd}\n >\n <span className=\"toggle\">\n {hasChildren && expandable ? (\n <span className={cn('arrow', isExpanded && 'expanded')}>\n <MChevronRightIcon />\n </span>\n ) : (\n <span className=\"spacer\" />\n )}\n </span>\n {checkable && (\n <span className=\"check\" onClick={(event) => event.stopPropagation()}>\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n disabled={node.disabled}\n checked={isChecked}\n indeterminate={isIndeterminate}\n onChange={() => onCheck?.(node.id)}\n />\n </span>\n )}\n {icon && <span className=\"icon\">{icon}</span>}\n <span className=\"label\">{node.label}</span>\n </div>\n {hasChildren && isExpanded && (\n <ul\n className=\"list\"\n role=\"group\"\n style={showLines ? ({'--line-left': `${level * indent + 17}px`} as CSSProperties) : undefined}\n >\n {(node.children ?? []).map((child) => (\n <TreeItem\n key={child.id}\n node={child}\n color={color}\n level={level + 1}\n expandable={expandable}\n selectable={selectable}\n expandedIds={expandedIds}\n selectedId={selectedId}\n draggedId={draggedId}\n dropTargetId={dropTargetId}\n onToggle={onToggle}\n onSelect={onSelect}\n checkable={checkable}\n checkedIds={checkedIds}\n indeterminateIds={indeterminateIds}\n onCheck={onCheck}\n indent={indent}\n showLines={showLines}\n fileIcons={fileIcons}\n draggable={draggable}\n canDropOnNode={canDropOnNode}\n onContextMenu={onContextMenu}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onDragEnd={onDragEnd}\n />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\n// Render a file tree with selection, context actions and folder moves.\nexport function MTreeView({\n items,\n color = 'primary',\n expandable = true,\n selectable = false,\n defaultExpanded = [],\n expanded: controlledExpanded,\n onExpandChange,\n selected: controlledSelected,\n onSelect,\n checkable = false,\n defaultChecked = [],\n checked: controlledChecked,\n onCheckedChange,\n indent = 20,\n showLines = true,\n fileIcons = true,\n draggable = false,\n canDrop,\n onMove,\n contextMenuItems,\n onContextMenuAction,\n className,\n ...rest\n}: MTreeViewProps) {\n const [internalExpanded, setInternalExpanded] = useState<string[]>(defaultExpanded)\n const [internalSelected, setInternalSelected] = useState<string | null>(null)\n const [internalChecked, setInternalChecked] = useState<string[]>(defaultChecked)\n const [draggedId, setDraggedId] = useState<string | null>(null)\n const [dropTargetId, setDropTargetId] = useState<string | null>(null)\n const [menu, setMenu] = useState<{\n node: MTreeNode\n items: MTreeViewContextMenuItem[]\n x: number\n y: number\n } | null>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n const expandedArr = controlledExpanded ?? internalExpanded\n const expandedIds = new Set(expandedArr)\n const selectedId = controlledSelected !== undefined ? controlledSelected : internalSelected\n const checkedArr = controlledChecked ?? internalChecked\n const checkedIds = new Set(checkedArr)\n const indeterminateIds = checkable ? computeIndeterminate(items, checkedIds) : new Set<string>()\n const {nodeMap, descendants, parentMap} = buildTreeLookup(items)\n const draggedNode = draggedId ? (nodeMap.get(draggedId) ?? null) : null\n\n useEffect(() => {\n if (!menu) return\n\n function closeMenu(event?: Event) {\n if (event && menuRef.current && menuRef.current.contains(event.target as Node)) {\n return\n }\n\n setMenu(null)\n }\n\n function handleKey(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n setMenu(null)\n }\n }\n\n document.addEventListener('mousedown', closeMenu)\n document.addEventListener('scroll', closeMenu, true)\n window.addEventListener('resize', closeMenu)\n document.addEventListener('keydown', handleKey)\n\n return () => {\n document.removeEventListener('mousedown', closeMenu)\n document.removeEventListener('scroll', closeMenu, true)\n window.removeEventListener('resize', closeMenu)\n document.removeEventListener('keydown', handleKey)\n }\n }, [menu])\n\n function handleToggle(id: string) {\n const next = expandedIds.has(id) ? expandedArr.filter((e) => e !== id) : [...expandedArr, id]\n if (onExpandChange) onExpandChange(next)\n else setInternalExpanded(next)\n }\n\n function handleSelect(id: string, node: MTreeNode) {\n if (onSelect) onSelect(id, node)\n else setInternalSelected(id)\n }\n\n function handleCheck(id: string) {\n const node = nodeMap.get(id)\n if (!node || node.disabled) return\n\n const next = new Set(checkedIds)\n const isCurrentlyChecked = next.has(id)\n const subtree = [id, ...Array.from(descendants.get(id) ?? [])]\n\n if (isCurrentlyChecked) {\n for (const sid of subtree) next.delete(sid)\n } else {\n for (const sid of subtree) {\n const sNode = nodeMap.get(sid)\n if (sNode && !sNode.disabled) next.add(sid)\n }\n }\n\n let parentId = parentMap.get(id)\n\n while (parentId) {\n const parent = nodeMap.get(parentId)\n if (!parent) break\n\n const allChildrenChecked = (parent.children ?? []).every((child) => child.disabled || next.has(child.id))\n const hasEnabledChild = (parent.children ?? []).some((child) => !child.disabled)\n\n if (allChildrenChecked && hasEnabledChild) next.add(parentId)\n else next.delete(parentId)\n\n parentId = parentMap.get(parentId)\n }\n\n const nextArr = Array.from(next)\n\n if (controlledChecked === undefined) setInternalChecked(nextArr)\n onCheckedChange?.(nextArr)\n }\n\n function closeDrag() {\n setDraggedId(null)\n setDropTargetId(null)\n }\n\n function isValidDropTarget(targetNode: MTreeNode) {\n if (!draggedNode || !draggable || !onMove) return false\n if (targetNode.disabled || !isFolderNode(targetNode)) return false\n if (targetNode.id === draggedNode.id) return false\n if (descendants.get(draggedNode.id)?.has(targetNode.id)) return false\n\n return canDrop ? canDrop(draggedNode, targetNode) : true\n }\n\n function handleContextMenu(event: MouseEvent<HTMLDivElement>, node: MTreeNode) {\n if (!contextMenuItems || node.disabled) return\n\n const items = contextMenuItems(node).filter(Boolean)\n if (!items.length) return\n\n event.preventDefault()\n handleSelect(node.id, node)\n\n const pos = clampMenuPosition(event.clientX, event.clientY)\n setMenu({\n node,\n items,\n x: pos.x,\n y: pos.y,\n })\n }\n\n function handleDragStart(event: DragEvent<HTMLDivElement>, node: MTreeNode) {\n if (!draggable || node.disabled) return\n\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', node.id)\n setMenu(null)\n setDraggedId(node.id)\n }\n\n function handleDragOver(event: DragEvent<HTMLDivElement>, targetNode: MTreeNode) {\n if (!isValidDropTarget(targetNode)) return\n\n event.preventDefault()\n event.dataTransfer.dropEffect = 'move'\n setDropTargetId(targetNode.id)\n }\n\n function handleDrop(event: DragEvent<HTMLDivElement>, targetNode: MTreeNode) {\n event.preventDefault()\n\n if (!draggedNode || !isValidDropTarget(targetNode)) {\n closeDrag()\n return\n }\n\n onMove?.({\n draggedId: draggedNode.id,\n draggedNode,\n targetId: targetNode.id,\n targetNode,\n } satisfies MTreeViewMoveEvent)\n\n if (expandable && !expandedIds.has(targetNode.id)) {\n handleToggle(targetNode.id)\n }\n\n closeDrag()\n }\n\n return (\n <div className={cn('tree', `color-${color}`, showLines && 'lines', className)} {...rest}>\n <ul className=\"list\" role=\"tree\">\n {items.map((item) => (\n <TreeItem\n key={item.id}\n node={item}\n color={color}\n level={0}\n expandable={expandable}\n selectable={selectable}\n expandedIds={expandedIds}\n selectedId={selectedId}\n draggedId={draggedId}\n dropTargetId={dropTargetId}\n onToggle={handleToggle}\n onSelect={handleSelect}\n checkable={checkable}\n checkedIds={checkedIds}\n indeterminateIds={indeterminateIds}\n onCheck={handleCheck}\n indent={indent}\n showLines={showLines}\n fileIcons={fileIcons}\n draggable={draggable}\n canDropOnNode={isValidDropTarget}\n onContextMenu={handleContextMenu}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onDragEnd={closeDrag}\n />\n ))}\n </ul>\n {menu && (\n <MPortal>\n <div ref={menuRef} className=\"tree menu\" style={{top: menu.y, left: menu.x}} role=\"menu\">\n {menu.items.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n className={cn('action', item.color, item.disabled && 'disabled')}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => {\n if (item.disabled) return\n onContextMenuAction?.(item.id, menu.node)\n setMenu(null)\n }}\n >\n {item.icon && <span className=\"icon\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n ))}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Hi as e, Jn as t, Li as n, Mr as r, Nr as i, Ui as a, Vi as o, Xn as s, nr as c, qn as l, rr as u } from "./icons-CBMl-kOM.js";
|
|
2
2
|
import { t as d } from "./cn-YER3QsV1.js";
|
|
3
3
|
import { n as f, t as p } from "./creditCards-D_iWmtG6.js";
|
|
4
4
|
import { t as m } from "./useInteractionEffect-DtpbVd77.js";
|
|
5
|
-
import { t as h } from "./MPopover-
|
|
5
|
+
import { t as h } from "./MPopover-DT3vclV1.js";
|
|
6
6
|
import { n as g } from "./MSurface-B-sjyczH.js";
|
|
7
7
|
import { t as _ } from "./MText-CL-LPcXi.js";
|
|
8
8
|
import { t as v } from "./MHeading-B7KgSP4T.js";
|
|
@@ -14,13 +14,13 @@ import { t as C } from "./MLoader-CnvWqFtA.js";
|
|
|
14
14
|
import { r as w, t as T } from "./MGrid-CYL3cbUI.js";
|
|
15
15
|
import { t as E } from "./MStack-CSCw6to2.js";
|
|
16
16
|
import { a as D, i as O, n as k, r as A, t as j } from "./MCard-azpp4YVD.js";
|
|
17
|
-
import { n as M, t as N } from "./MInputCVC-
|
|
17
|
+
import { n as M, t as N } from "./MInputCVC-DvUOzpYp.js";
|
|
18
18
|
import { t as P } from "./MAvatar-DtJCj3dD.js";
|
|
19
|
-
import { n as F, t as I } from "./MDetailList-
|
|
20
|
-
import { t as ee } from "./MInputSearch-
|
|
21
|
-
import { t as L } from "./MTreeView-
|
|
22
|
-
import { i as te, r as ne } from "./MDropdownMenu-
|
|
23
|
-
import { t as re } from "./MPagination-
|
|
19
|
+
import { n as F, t as I } from "./MDetailList-fDhVyhm7.js";
|
|
20
|
+
import { t as ee } from "./MInputSearch-BM8gLlJ1.js";
|
|
21
|
+
import { t as L } from "./MTreeView-B1J7uqd1.js";
|
|
22
|
+
import { i as te, r as ne } from "./MDropdownMenu-BeD_DxPr.js";
|
|
23
|
+
import { t as re } from "./MPagination-CgmNEAZX.js";
|
|
24
24
|
import { Children as ie, Fragment as R, cloneElement as z, isValidElement as B, useCallback as V, useEffect as H, useMemo as ae, useRef as oe, useState as U } from "react";
|
|
25
25
|
import { Fragment as se, jsx as W, jsxs as G } from "react/jsx-runtime";
|
|
26
26
|
//#region src/components/cards/shared/MCardColor.utils.tsx
|
|
@@ -154,8 +154,8 @@ function Y({ component: e, to: t, href: n, target: r, rel: i, holder: a, number:
|
|
|
154
154
|
function X(e) {
|
|
155
155
|
return p.find((t) => t.brand === e)?.iconLabel ?? "CARD";
|
|
156
156
|
}
|
|
157
|
-
function ue({ title: e = "Your payment methods", actionLabel: t = "Change", actionHref: n = "#", onAction: r, brand: i = "visa", brandIcon:
|
|
158
|
-
let C = m?.value ?? m?.defaultValue, w =
|
|
157
|
+
function ue({ title: e = "Your payment methods", actionLabel: t = "Change", actionHref: n = "#", onAction: r, brand: i = "visa", brandIcon: o, last4: s, badgeLabel: c, summary: l, helperText: u = "All fields are required, unless stated otherwise.", expiryLabel: f = "Expiration date", cvcLabel: p = "Security code", expiryProps: m, cvcProps: h, color: v, className: b, ...x }) {
|
|
158
|
+
let C = m?.value ?? m?.defaultValue, w = c === void 0 ? "Default" : c, T = C ? `Credit card - Expiration date ${String(C).replace("/", ".")}` : "Credit card", E = l === void 0 ? T : l, D = X(i), O = {
|
|
159
159
|
clearable: !0,
|
|
160
160
|
...m
|
|
161
161
|
};
|
|
@@ -175,7 +175,7 @@ function ue({ title: e = "Your payment methods", actionLabel: t = "Change", acti
|
|
|
175
175
|
onClick: (e) => {
|
|
176
176
|
r && (e.preventDefault(), r());
|
|
177
177
|
},
|
|
178
|
-
children: [t, /* @__PURE__ */ W(
|
|
178
|
+
children: [t, /* @__PURE__ */ W(a, {})]
|
|
179
179
|
})]
|
|
180
180
|
}), /* @__PURE__ */ G("div", {
|
|
181
181
|
className: "cpm-surface",
|
|
@@ -187,12 +187,12 @@ function ue({ title: e = "Your payment methods", actionLabel: t = "Change", acti
|
|
|
187
187
|
className: "cpm-method-row",
|
|
188
188
|
children: [
|
|
189
189
|
/* @__PURE__ */ W("span", {
|
|
190
|
-
className: d("cpm-brand", !
|
|
191
|
-
children:
|
|
190
|
+
className: d("cpm-brand", !o && i),
|
|
191
|
+
children: o ?? D
|
|
192
192
|
}),
|
|
193
193
|
/* @__PURE__ */ W("span", {
|
|
194
194
|
className: "cpm-last4",
|
|
195
|
-
children: `\u2022\u2022\u2022\u2022 ${
|
|
195
|
+
children: `\u2022\u2022\u2022\u2022 ${s}`
|
|
196
196
|
}),
|
|
197
197
|
w && /* @__PURE__ */ W(S, {
|
|
198
198
|
color: "info",
|
|
@@ -205,11 +205,11 @@ function ue({ title: e = "Your payment methods", actionLabel: t = "Change", acti
|
|
|
205
205
|
children: E
|
|
206
206
|
})]
|
|
207
207
|
}),
|
|
208
|
-
|
|
208
|
+
u && /* @__PURE__ */ W(_, {
|
|
209
209
|
tone: "muted",
|
|
210
210
|
size: "sm",
|
|
211
211
|
className: "cpm-helper",
|
|
212
|
-
children:
|
|
212
|
+
children: u
|
|
213
213
|
}),
|
|
214
214
|
/* @__PURE__ */ G("div", {
|
|
215
215
|
className: "cpm-fields",
|
|
@@ -231,7 +231,7 @@ function ue({ title: e = "Your payment methods", actionLabel: t = "Change", acti
|
|
|
231
231
|
}
|
|
232
232
|
//#endregion
|
|
233
233
|
//#region src/components/cards/ServiceCardsShared/ServiceCardsShared.tsx
|
|
234
|
-
function Z({ variant: e, title: t, description:
|
|
234
|
+
function Z({ variant: e, title: t, description: a, price: o, currency: l = "PLN", duration: f, available: p, image: m, gallery: h, galleryAutoPlay: g = !1, rating: _, reviewCount: v, favorite: y, onFavorite: x, menuItems: C, onAddToCart: w, actionLabel: T, icon: E, color: D = "primary", leader: O, participants: k, maxParticipants: A, quantity: j, onQuantityChange: M, showQuantity: N = !0, date: I, location: ee, status: L, className: re, ...ie }) {
|
|
235
235
|
let [R, z] = U(0), [B, V] = U(!1), [ae, oe] = U(1), K = j ?? ae, q = h && h.length > 0 ? h : m ? [m] : [];
|
|
236
236
|
H(() => {
|
|
237
237
|
R >= q.length && z(0);
|
|
@@ -288,7 +288,7 @@ function Z({ variant: e, title: t, description: i, price: c, currency: u = "PLN"
|
|
|
288
288
|
shape: "circle",
|
|
289
289
|
"aria-label": "More options",
|
|
290
290
|
className: "cs-overlay-btn",
|
|
291
|
-
children: /* @__PURE__ */ W(
|
|
291
|
+
children: /* @__PURE__ */ W(s, {})
|
|
292
292
|
}),
|
|
293
293
|
placement: "bottom-end",
|
|
294
294
|
children: C.map((e, t) => /* @__PURE__ */ W(ne, {
|
|
@@ -304,7 +304,7 @@ function Z({ variant: e, title: t, description: i, price: c, currency: u = "PLN"
|
|
|
304
304
|
onClick: x,
|
|
305
305
|
"aria-label": y ? "Remove from favorites" : "Add to favorites",
|
|
306
306
|
className: d("cs-overlay-btn", y && "cs-fav-active"),
|
|
307
|
-
children: W(y ?
|
|
307
|
+
children: W(y ? c : u, {})
|
|
308
308
|
})]
|
|
309
309
|
})
|
|
310
310
|
]
|
|
@@ -328,9 +328,9 @@ function Z({ variant: e, title: t, description: i, price: c, currency: u = "PLN"
|
|
|
328
328
|
children: [/* @__PURE__ */ W("h3", {
|
|
329
329
|
className: "cs-title",
|
|
330
330
|
children: t
|
|
331
|
-
}),
|
|
331
|
+
}), a && /* @__PURE__ */ W("p", {
|
|
332
332
|
className: "cs-desc",
|
|
333
|
-
children:
|
|
333
|
+
children: a
|
|
334
334
|
})]
|
|
335
335
|
})]
|
|
336
336
|
}),
|
|
@@ -343,9 +343,9 @@ function Z({ variant: e, title: t, description: i, price: c, currency: u = "PLN"
|
|
|
343
343
|
className: "cs-title",
|
|
344
344
|
children: t
|
|
345
345
|
})]
|
|
346
|
-
}),
|
|
346
|
+
}), a && /* @__PURE__ */ W("p", {
|
|
347
347
|
className: "cs-desc",
|
|
348
|
-
children:
|
|
348
|
+
children: a
|
|
349
349
|
})] }),
|
|
350
350
|
e === "event" && !Y && /* @__PURE__ */ G(se, { children: [/* @__PURE__ */ G("div", {
|
|
351
351
|
className: "cs-top",
|
|
@@ -356,9 +356,9 @@ function Z({ variant: e, title: t, description: i, price: c, currency: u = "PLN"
|
|
|
356
356
|
className: "cs-title",
|
|
357
357
|
children: t
|
|
358
358
|
})]
|
|
359
|
-
}),
|
|
359
|
+
}), a && /* @__PURE__ */ W("p", {
|
|
360
360
|
className: "cs-desc",
|
|
361
|
-
children:
|
|
361
|
+
children: a
|
|
362
362
|
})] }),
|
|
363
363
|
_ !== void 0 && /* @__PURE__ */ G("div", {
|
|
364
364
|
className: "cs-rating",
|
|
@@ -446,14 +446,14 @@ function Z({ variant: e, title: t, description: i, price: c, currency: u = "PLN"
|
|
|
446
446
|
}),
|
|
447
447
|
/* @__PURE__ */ G("div", {
|
|
448
448
|
className: "cs-footer",
|
|
449
|
-
children: [
|
|
449
|
+
children: [o !== void 0 && /* @__PURE__ */ G("span", {
|
|
450
450
|
className: "cs-price",
|
|
451
451
|
children: [
|
|
452
|
-
typeof
|
|
452
|
+
typeof o == "number" ? o.toFixed(2) : o,
|
|
453
453
|
" ",
|
|
454
454
|
/* @__PURE__ */ W("span", {
|
|
455
455
|
className: "cs-currency",
|
|
456
|
-
children:
|
|
456
|
+
children: l
|
|
457
457
|
})
|
|
458
458
|
]
|
|
459
459
|
}), /* @__PURE__ */ G("div", {
|
|
@@ -481,7 +481,7 @@ function Z({ variant: e, title: t, description: i, price: c, currency: u = "PLN"
|
|
|
481
481
|
onClick: () => ce(K + 1),
|
|
482
482
|
"aria-label": "Increase",
|
|
483
483
|
className: "cs-qty-btn",
|
|
484
|
-
children: /* @__PURE__ */ W(
|
|
484
|
+
children: /* @__PURE__ */ W(i, {})
|
|
485
485
|
})
|
|
486
486
|
]
|
|
487
487
|
}), w && /* @__PURE__ */ W(b, {
|
|
@@ -522,7 +522,7 @@ function fe(e) {
|
|
|
522
522
|
}
|
|
523
523
|
//#endregion
|
|
524
524
|
//#region src/components/cards/MCardTile/MCardTile.tsx
|
|
525
|
-
function pe({ component: e, title: t, description: n, icon: r, color: i = "primary", to:
|
|
525
|
+
function pe({ component: e, title: t, description: n, icon: r, color: i = "primary", to: a, href: o, target: l, rel: f, onClick: p, interactive: h = !1, clickEffect: g, rippleColor: _, image: v, video: y, illustration: x, camera: S, mediaFill: C = !1, overlayPosition: w = "bottom", favorite: T, onFavorite: E, menuItems: O, className: k, ...A }) {
|
|
526
526
|
let j = oe(null);
|
|
527
527
|
H(() => {
|
|
528
528
|
if (!S) return;
|
|
@@ -541,8 +541,8 @@ function pe({ component: e, title: t, description: n, icon: r, color: i = "prima
|
|
|
541
541
|
}, [S]);
|
|
542
542
|
let M = !!(v || y || x || S), { component: N, href: P, to: F, isInteractive: I, isLink: ee } = D({
|
|
543
543
|
component: e,
|
|
544
|
-
href:
|
|
545
|
-
to:
|
|
544
|
+
href: o,
|
|
545
|
+
to: a,
|
|
546
546
|
interactive: h,
|
|
547
547
|
hasClickHandler: !!p,
|
|
548
548
|
fallbackComponent: "button"
|
|
@@ -619,7 +619,7 @@ function pe({ component: e, title: t, description: n, icon: r, color: i = "prima
|
|
|
619
619
|
ee && /* @__PURE__ */ W(N, {
|
|
620
620
|
href: N === "a" || e ? P : void 0,
|
|
621
621
|
to: F,
|
|
622
|
-
target:
|
|
622
|
+
target: l,
|
|
623
623
|
rel: f,
|
|
624
624
|
className: "tile-link",
|
|
625
625
|
"aria-label": t,
|
|
@@ -645,7 +645,7 @@ function pe({ component: e, title: t, description: n, icon: r, color: i = "prima
|
|
|
645
645
|
shape: "circle",
|
|
646
646
|
"aria-label": "More options",
|
|
647
647
|
className: "tile-overlay-btn",
|
|
648
|
-
children: /* @__PURE__ */ W(
|
|
648
|
+
children: /* @__PURE__ */ W(s, {})
|
|
649
649
|
}),
|
|
650
650
|
placement: "bottom-end",
|
|
651
651
|
children: O.map((e, t) => /* @__PURE__ */ W(ne, {
|
|
@@ -661,7 +661,7 @@ function pe({ component: e, title: t, description: n, icon: r, color: i = "prima
|
|
|
661
661
|
onClick: E,
|
|
662
662
|
"aria-label": T ? "Remove from favorites" : "Add to favorites",
|
|
663
663
|
className: d("tile-overlay-btn", T && "tile-fav-active"),
|
|
664
|
-
children: W(T ?
|
|
664
|
+
children: W(T ? c : u, {})
|
|
665
665
|
})]
|
|
666
666
|
})
|
|
667
667
|
]
|
|
@@ -696,9 +696,9 @@ function Q(e, t) {
|
|
|
696
696
|
function $(e) {
|
|
697
697
|
return typeof e == "number" && e > 0 ? `+${e}` : e;
|
|
698
698
|
}
|
|
699
|
-
function ge({ component:
|
|
699
|
+
function ge({ component: t, to: n, href: r, target: i, rel: a, title: s, value: c, trend: l, trendType: u, icon: f, color: p = "primary", helperText: h, interactive: g = !1, clickEffect: _, rippleColor: v, className: y, onPointerDown: b, ...x }) {
|
|
700
700
|
let S = l != null, C = Q(l, u), w = $(l), { component: T, href: E, to: O, isInteractive: k } = D({
|
|
701
|
-
component:
|
|
701
|
+
component: t,
|
|
702
702
|
href: r,
|
|
703
703
|
to: n,
|
|
704
704
|
interactive: g,
|
|
@@ -710,10 +710,10 @@ function ge({ component: e, to: n, href: r, target: a, rel: o, title: s, value:
|
|
|
710
710
|
color: v
|
|
711
711
|
});
|
|
712
712
|
return /* @__PURE__ */ G(T, {
|
|
713
|
-
href: T === "a" ||
|
|
713
|
+
href: T === "a" || t ? E : void 0,
|
|
714
714
|
to: O,
|
|
715
|
-
target:
|
|
716
|
-
rel:
|
|
715
|
+
target: i,
|
|
716
|
+
rel: a,
|
|
717
717
|
className: d("card-widget", `color-${p}`, k && "interactive", A, y),
|
|
718
718
|
onPointerDown: (e) => {
|
|
719
719
|
M(e), b?.(e);
|
|
@@ -742,8 +742,8 @@ function ge({ component: e, to: n, href: r, target: a, rel: o, title: s, value:
|
|
|
742
742
|
children: /* @__PURE__ */ G("span", {
|
|
743
743
|
className: d("cw-trend", C),
|
|
744
744
|
children: [
|
|
745
|
-
C === "up" && /* @__PURE__ */ W(
|
|
746
|
-
C === "down" && /* @__PURE__ */ W(
|
|
745
|
+
C === "up" && /* @__PURE__ */ W(e, { size: 14 }),
|
|
746
|
+
C === "down" && /* @__PURE__ */ W(o, { size: 14 }),
|
|
747
747
|
/* @__PURE__ */ W("span", { children: w })
|
|
748
748
|
]
|
|
749
749
|
})
|
|
@@ -763,7 +763,7 @@ function _e(e, t) {
|
|
|
763
763
|
function ve(e) {
|
|
764
764
|
return typeof e == "number" && e > 0 ? `+${e}` : e;
|
|
765
765
|
}
|
|
766
|
-
function ye({ label:
|
|
766
|
+
function ye({ label: t, value: n, icon: r, badge: i, helperText: a, trend: s, trendType: c, color: l = "primary", className: u, ...f }) {
|
|
767
767
|
let p = s != null, m = _e(s, c);
|
|
768
768
|
return /* @__PURE__ */ W(j, {
|
|
769
769
|
className: d("stat-card", `color-${l}`, u),
|
|
@@ -777,32 +777,32 @@ function ye({ label: e, value: n, icon: r, badge: a, helperText: o, trend: s, tr
|
|
|
777
777
|
spacing: "xs",
|
|
778
778
|
children: [/* @__PURE__ */ W("span", {
|
|
779
779
|
className: "stat-card-label",
|
|
780
|
-
children:
|
|
780
|
+
children: t
|
|
781
781
|
}), /* @__PURE__ */ W("span", {
|
|
782
782
|
className: "stat-card-value",
|
|
783
783
|
children: n
|
|
784
784
|
})]
|
|
785
785
|
}), /* @__PURE__ */ G(g, {
|
|
786
786
|
align: "center",
|
|
787
|
-
children: [
|
|
787
|
+
children: [i, r && /* @__PURE__ */ W("span", {
|
|
788
788
|
className: "stat-card-icon",
|
|
789
789
|
children: r
|
|
790
790
|
})]
|
|
791
791
|
})]
|
|
792
|
-
}), (p ||
|
|
792
|
+
}), (p || a) && /* @__PURE__ */ G(g, {
|
|
793
793
|
justify: "between",
|
|
794
794
|
align: "center",
|
|
795
795
|
children: [p ? /* @__PURE__ */ G("span", {
|
|
796
796
|
className: d("stat-card-trend", m),
|
|
797
797
|
children: [
|
|
798
|
-
m === "up" && /* @__PURE__ */ W(
|
|
799
|
-
m === "down" && /* @__PURE__ */ W(
|
|
798
|
+
m === "up" && /* @__PURE__ */ W(e, { size: 14 }),
|
|
799
|
+
m === "down" && /* @__PURE__ */ W(o, { size: 14 }),
|
|
800
800
|
/* @__PURE__ */ W("span", { children: ve(s) })
|
|
801
801
|
]
|
|
802
|
-
}) : /* @__PURE__ */ W("span", {}),
|
|
802
|
+
}) : /* @__PURE__ */ W("span", {}), a && /* @__PURE__ */ W(_, {
|
|
803
803
|
size: "sm",
|
|
804
804
|
tone: "muted",
|
|
805
|
-
children:
|
|
805
|
+
children: a
|
|
806
806
|
})]
|
|
807
807
|
})]
|
|
808
808
|
})
|
|
@@ -823,7 +823,7 @@ function xe(e, t) {
|
|
|
823
823
|
}
|
|
824
824
|
return r;
|
|
825
825
|
}
|
|
826
|
-
function Se({ items: n, renderCard: r, color:
|
|
826
|
+
function Se({ items: n, renderCard: r, color: i = "primary", searchable: a = !1, searchKeys: s, searchPlaceholder: c = "Search...", search: u, onSearchChange: f, filterable: p = !1, filterKeys: m = [], filters: g, onFiltersChange: _, sortable: v = !1, sortKeys: y = [], defaultSort: S, sort: w, onSortChange: T, pagination: E = !1, pageSize: D = 12, page: O, onPageChange: k, total: A, manualSearch: j = !1, manualFilters: M = !1, manualSort: N = !1, manualPagination: P = !1, loading: F = !1, loadingLabel: I = "Loading", scrollOffset: L, columns: te = 3, emptyMessage: ne = "No results found.", className: ie, style: z, ...B }) {
|
|
827
827
|
let [H, K] = U(""), [q, J] = U({}), [ce, le] = U(S ?? null), [Y, X] = U(1), [ue, Z] = U(!1), [de, fe] = U(!1), pe = oe(null), me = oe(null), he = u === void 0 ? H : u, Q = g === void 0 ? q : g, $ = w === void 0 ? ce : w, ge = O === void 0 ? Y : O, _e = V((e) => {
|
|
828
828
|
u === void 0 && K(e), !P && O === void 0 && X(1), f?.(e);
|
|
829
829
|
}, [
|
|
@@ -920,20 +920,20 @@ function Se({ items: n, renderCard: r, color: a = "primary", searchable: o = !1,
|
|
|
920
920
|
}, [n, m]), je = y.find((e) => e.key === $?.key);
|
|
921
921
|
return /* @__PURE__ */ G("div", {
|
|
922
922
|
ref: Se,
|
|
923
|
-
className: d("card-grid", `color-${
|
|
923
|
+
className: d("card-grid", `color-${i}`, ie),
|
|
924
924
|
style: L === void 0 ? z : {
|
|
925
925
|
scrollMarginTop: L,
|
|
926
926
|
...z
|
|
927
927
|
},
|
|
928
928
|
...B,
|
|
929
929
|
children: [
|
|
930
|
-
(
|
|
930
|
+
(a || p || v) && /* @__PURE__ */ G("div", {
|
|
931
931
|
className: "card-grid-toolbar",
|
|
932
|
-
children: [
|
|
932
|
+
children: [a && /* @__PURE__ */ W(ee, {
|
|
933
933
|
className: "card-grid-search",
|
|
934
934
|
size: "sm",
|
|
935
935
|
fullWidth: !0,
|
|
936
|
-
placeholder:
|
|
936
|
+
placeholder: c,
|
|
937
937
|
value: he,
|
|
938
938
|
onChange: (e) => _e(e.target.value),
|
|
939
939
|
onClear: () => _e("")
|
|
@@ -942,9 +942,9 @@ function Se({ items: n, renderCard: r, color: a = "primary", searchable: o = !1,
|
|
|
942
942
|
children: [p && m.length > 0 && /* @__PURE__ */ G(se, { children: [/* @__PURE__ */ W(b, {
|
|
943
943
|
ref: pe,
|
|
944
944
|
variant: "outlined",
|
|
945
|
-
color:
|
|
945
|
+
color: i,
|
|
946
946
|
size: "sm",
|
|
947
|
-
startIcon: /* @__PURE__ */ W(
|
|
947
|
+
startIcon: /* @__PURE__ */ W(t, {}),
|
|
948
948
|
"aria-expanded": ue,
|
|
949
949
|
onClick: we,
|
|
950
950
|
children: "Filter"
|
|
@@ -973,9 +973,9 @@ function Se({ items: n, renderCard: r, color: a = "primary", searchable: o = !1,
|
|
|
973
973
|
})] }), v && y.length > 0 && /* @__PURE__ */ G(se, { children: [/* @__PURE__ */ W(b, {
|
|
974
974
|
ref: me,
|
|
975
975
|
variant: "outlined",
|
|
976
|
-
color:
|
|
976
|
+
color: i,
|
|
977
977
|
size: "sm",
|
|
978
|
-
startIcon: $ ? $.direction === "asc" ? /* @__PURE__ */ W(
|
|
978
|
+
startIcon: $ ? $.direction === "asc" ? /* @__PURE__ */ W(e, {}) : /* @__PURE__ */ W(o, {}) : /* @__PURE__ */ W(l, {}),
|
|
979
979
|
"aria-expanded": de,
|
|
980
980
|
onClick: Te,
|
|
981
981
|
children: je ? `Sort: ${je.label}` : "Sort"
|
|
@@ -985,23 +985,23 @@ function Se({ items: n, renderCard: r, color: a = "primary", searchable: o = !1,
|
|
|
985
985
|
onClose: () => fe(!1),
|
|
986
986
|
placement: "bottom-end",
|
|
987
987
|
className: "card-grid-dropdown",
|
|
988
|
-
children: y.map((
|
|
988
|
+
children: y.map((t) => /* @__PURE__ */ G("button", {
|
|
989
989
|
type: "button",
|
|
990
|
-
className: d("card-grid-sort-item", $?.key ===
|
|
990
|
+
className: d("card-grid-sort-item", $?.key === t.key && "active"),
|
|
991
991
|
onClick: () => {
|
|
992
|
-
$?.key ===
|
|
993
|
-
key:
|
|
992
|
+
$?.key === t.key ? ye({
|
|
993
|
+
key: t.key,
|
|
994
994
|
direction: $.direction === "asc" ? "desc" : "asc"
|
|
995
995
|
}) : ye({
|
|
996
|
-
key:
|
|
996
|
+
key: t.key,
|
|
997
997
|
direction: "asc"
|
|
998
998
|
});
|
|
999
999
|
},
|
|
1000
|
-
children: [
|
|
1000
|
+
children: [t.label, $?.key === t.key && /* @__PURE__ */ W("span", {
|
|
1001
1001
|
className: "card-grid-sort-dir",
|
|
1002
|
-
children: $.direction === "asc" ? /* @__PURE__ */ W(
|
|
1002
|
+
children: $.direction === "asc" ? /* @__PURE__ */ W(e, { className: "card-grid-sort-icon" }) : /* @__PURE__ */ W(o, { className: "card-grid-sort-icon" })
|
|
1003
1003
|
})]
|
|
1004
|
-
},
|
|
1004
|
+
}, t.key))
|
|
1005
1005
|
})] })]
|
|
1006
1006
|
})]
|
|
1007
1007
|
}),
|
|
@@ -1025,7 +1025,7 @@ function Se({ items: n, renderCard: r, color: a = "primary", searchable: o = !1,
|
|
|
1025
1025
|
children: /* @__PURE__ */ W(C, {
|
|
1026
1026
|
center: !1,
|
|
1027
1027
|
minHeight: "auto",
|
|
1028
|
-
color:
|
|
1028
|
+
color: i,
|
|
1029
1029
|
label: I
|
|
1030
1030
|
})
|
|
1031
1031
|
})]
|
|
@@ -1133,7 +1133,7 @@ function Ce({ title: e = "Today", description: t, color: n = "primary", workdayS
|
|
|
1133
1133
|
}
|
|
1134
1134
|
//#endregion
|
|
1135
1135
|
//#region src/components/cards/MCardDocumentTree/MCardDocumentTree.tsx
|
|
1136
|
-
function we({ title: e = "Documents", description: t, color: n = "primary", items: r, selected: i, onSelect:
|
|
1136
|
+
function we({ title: e = "Documents", description: t, color: n = "primary", items: r, selected: i, onSelect: a, defaultExpanded: o, expanded: c, onExpandChange: l, detailsTitle: u, detailsMeta: d, detailsItems: f = [], detailsActions: p = [], renderDetails: m, emptyDetails: h = /* @__PURE__ */ W(_, {
|
|
1137
1137
|
tone: "muted",
|
|
1138
1138
|
children: "Select a document to inspect its details."
|
|
1139
1139
|
}), primaryAction: y, ...x }) {
|
|
@@ -1167,11 +1167,11 @@ function we({ title: e = "Documents", description: t, color: n = "primary", item
|
|
|
1167
1167
|
children: /* @__PURE__ */ W(L, {
|
|
1168
1168
|
items: C,
|
|
1169
1169
|
color: n,
|
|
1170
|
-
defaultExpanded:
|
|
1170
|
+
defaultExpanded: o,
|
|
1171
1171
|
expanded: c,
|
|
1172
1172
|
onExpandChange: l,
|
|
1173
1173
|
selected: i,
|
|
1174
|
-
onSelect:
|
|
1174
|
+
onSelect: a,
|
|
1175
1175
|
expandable: !0,
|
|
1176
1176
|
selectable: !0,
|
|
1177
1177
|
showLines: !0,
|
|
@@ -1201,7 +1201,7 @@ function we({ title: e = "Documents", description: t, color: n = "primary", item
|
|
|
1201
1201
|
iconOnly: !0,
|
|
1202
1202
|
shape: "circle",
|
|
1203
1203
|
"aria-label": "Open document actions",
|
|
1204
|
-
children: /* @__PURE__ */ W(
|
|
1204
|
+
children: /* @__PURE__ */ W(s, {})
|
|
1205
1205
|
}),
|
|
1206
1206
|
children: p.map((e) => /* @__PURE__ */ W(ne, {
|
|
1207
1207
|
icon: J(e.icon, e.color ?? n),
|
|
@@ -1223,4 +1223,4 @@ function we({ title: e = "Documents", description: t, color: n = "primary", item
|
|
|
1223
1223
|
//#endregion
|
|
1224
1224
|
export { ge as a, pe as c, ue as d, Y as f, ye as i, fe as l, Ce as n, he as o, ce as p, Se as r, me as s, we as t, de as u };
|
|
1225
1225
|
|
|
1226
|
-
//# sourceMappingURL=cards-
|
|
1226
|
+
//# sourceMappingURL=cards-DYmK8TpL.js.map
|