@nice2dev/ui-erp 1.0.10

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/NiceResourceAllocation.tsx","../src/NiceInventoryManager.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events -- modal overlay backdrops (Esc-on-parent provides keyboard close), selection rows in .map() accompanied by visible cursor:pointer styling and sibling buttons; full keyboard migration via useAccessibleClick + extracted subcomponents tracked in TODO_1.0.10 A2.3 */\r\n/**\r\n * @component NiceResourceAllocation\r\n * @description Resource allocation and capacity planning grid\r\n * @package @nice2dev/ui-erp\r\n */\r\n\r\nimport React, { useState, useMemo, useCallback } from 'react';\r\n\r\nimport type {\r\n NiceResourceAllocationProps,\r\n Allocation,\r\n AllocationViewConfig,\r\n TimeUnit,\r\n ResourceUtilization,\r\n AllocationConflict,\r\n} from './types';\r\n\r\nconst DEFAULT_VIEW_CONFIG: AllocationViewConfig = {\r\n timeUnit: 'day',\r\n showUtilization: true,\r\n showConflicts: true,\r\n groupBy: 'resource',\r\n utilizationThreshold: 80,\r\n};\r\n\r\nconst TIME_INCREMENTS: Record<TimeUnit, number> = {\r\n hour: 60 * 60 * 1000,\r\n day: 24 * 60 * 60 * 1000,\r\n week: 7 * 24 * 60 * 60 * 1000,\r\n month: 30 * 24 * 60 * 60 * 1000,\r\n quarter: 90 * 24 * 60 * 60 * 1000,\r\n year: 365 * 24 * 60 * 60 * 1000,\r\n};\r\n\r\nexport const NiceResourceAllocation: React.FC<NiceResourceAllocationProps> = ({\r\n resources,\r\n allocations,\r\n dateRange,\r\n viewConfig: externalConfig,\r\n onAllocationCreate,\r\n onAllocationUpdate,\r\n onAllocationDelete,\r\n onResourceClick,\r\n readOnly = false,\r\n className = '',\r\n}) => {\r\n void onAllocationUpdate;\r\n const config = { ...DEFAULT_VIEW_CONFIG, ...externalConfig };\r\n\r\n const [selectedAllocation, setSelectedAllocation] = useState<string | null>(null);\r\n const [hoveredCell, setHoveredCell] = useState<{ resourceId: string; date: Date } | null>(null);\r\n const [timeUnit, setTimeUnit] = useState<TimeUnit>(config.timeUnit);\r\n const [expandedResources, setExpandedResources] = useState<Set<string>>(\r\n new Set(resources.map((r) => r.id)),\r\n );\r\n const [showAllocationModal, setShowAllocationModal] = useState(false);\r\n const [newAllocation, setNewAllocation] = useState<Partial<Allocation>>({});\r\n\r\n // Generate time periods\r\n const timePeriods = useMemo(() => {\r\n const periods: Date[] = [];\r\n const increment = TIME_INCREMENTS[timeUnit];\r\n let current = new Date(dateRange.start);\r\n\r\n while (current <= dateRange.end) {\r\n periods.push(new Date(current));\r\n current = new Date(current.getTime() + increment);\r\n }\r\n\r\n return periods;\r\n }, [dateRange.start, dateRange.end, timeUnit]);\r\n\r\n // Calculate utilization per resource per period\r\n const utilizationMap = useMemo(() => {\r\n const map = new Map<string, Map<number, ResourceUtilization>>();\r\n\r\n resources.forEach((resource) => {\r\n const resourceMap = new Map<number, ResourceUtilization>();\r\n\r\n timePeriods.forEach((period) => {\r\n const periodStart = period.getTime();\r\n const periodEnd = periodStart + TIME_INCREMENTS[timeUnit];\r\n\r\n // Find allocations overlapping this period\r\n const periodAllocations = allocations.filter((a) => {\r\n if (a.resourceId !== resource.id) {\r\n return false;\r\n }\r\n const allocStart = a.start.getTime();\r\n const allocEnd = a.end.getTime();\r\n return allocStart < periodEnd && allocEnd > periodStart;\r\n });\r\n\r\n const allocatedHours = periodAllocations.reduce((sum, a) => sum + a.hoursPerDay, 0);\r\n const availableHours = resource.maxCapacity;\r\n const utilizationPercent = availableHours > 0 ? (allocatedHours / availableHours) * 100 : 0;\r\n\r\n resourceMap.set(periodStart, {\r\n resourceId: resource.id,\r\n period: { start: period, end: new Date(periodEnd) },\r\n allocatedHours,\r\n availableHours,\r\n utilizationPercent,\r\n overallocated: utilizationPercent > 100,\r\n });\r\n });\r\n\r\n map.set(resource.id, resourceMap);\r\n });\r\n\r\n return map;\r\n }, [resources, allocations, timePeriods, timeUnit]);\r\n\r\n // Find conflicts\r\n const conflicts = useMemo(() => {\r\n const conflictList: AllocationConflict[] = [];\r\n\r\n utilizationMap.forEach((resourceMap, resourceId) => {\r\n const resource = resources.find((r) => r.id === resourceId)!;\r\n resourceMap.forEach((util, periodStart) => {\r\n if (util.overallocated) {\r\n const period = new Date(periodStart);\r\n const periodEnd = periodStart + TIME_INCREMENTS[timeUnit];\r\n const conflictAllocations = allocations.filter((a) => {\r\n if (a.resourceId !== resourceId) {\r\n return false;\r\n }\r\n const allocStart = a.start.getTime();\r\n const allocEnd = a.end.getTime();\r\n return allocStart < periodEnd && allocEnd > periodStart;\r\n });\r\n\r\n conflictList.push({\r\n resourceId,\r\n date: period,\r\n allocatedHours: util.allocatedHours,\r\n maxCapacity: resource.maxCapacity,\r\n allocations: conflictAllocations,\r\n });\r\n }\r\n });\r\n });\r\n\r\n return conflictList;\r\n }, [utilizationMap, allocations, resources, timeUnit]);\r\n\r\n // Get allocations for a cell\r\n const getCellAllocations = useCallback(\r\n (resourceId: string, date: Date): Allocation[] => {\r\n const periodStart = date.getTime();\r\n const periodEnd = periodStart + TIME_INCREMENTS[timeUnit];\r\n\r\n return allocations.filter((a) => {\r\n if (a.resourceId !== resourceId) {\r\n return false;\r\n }\r\n const allocStart = a.start.getTime();\r\n const allocEnd = a.end.getTime();\r\n return allocStart < periodEnd && allocEnd > periodStart;\r\n });\r\n },\r\n [allocations, timeUnit],\r\n );\r\n\r\n // Get cell color based on utilization\r\n const getCellColor = (resourceId: string, date: Date): string => {\r\n const util = utilizationMap.get(resourceId)?.get(date.getTime());\r\n if (!util) {\r\n return 'transparent';\r\n }\r\n\r\n if (util.overallocated) {\r\n return 'rgba(239, 68, 68, 0.4)';\r\n }\r\n if (util.utilizationPercent >= config.utilizationThreshold) {\r\n return 'rgba(245, 158, 11, 0.3)';\r\n }\r\n if (util.utilizationPercent > 0) {\r\n return 'rgba(34, 197, 94, 0.2)';\r\n }\r\n return 'transparent';\r\n };\r\n\r\n const formatDate = (date: Date): string => {\r\n switch (timeUnit) {\r\n case 'hour':\r\n return date.toLocaleTimeString([], { hour: '2-digit' });\r\n case 'day':\r\n return date.toLocaleDateString([], { weekday: 'short', day: 'numeric' });\r\n case 'week':\r\n return `W${Math.ceil(date.getDate() / 7)}`;\r\n case 'month':\r\n return date.toLocaleDateString([], { month: 'short' });\r\n default:\r\n return date.toLocaleDateString();\r\n }\r\n };\r\n\r\n const handleCellClick = (resourceId: string, date: Date) => {\r\n if (readOnly) {\r\n return;\r\n }\r\n\r\n setNewAllocation({\r\n resourceId,\r\n start: date,\r\n end: new Date(date.getTime() + TIME_INCREMENTS[timeUnit]),\r\n hoursPerDay: resources.find((r) => r.id === resourceId)?.maxCapacity || 8,\r\n status: 'tentative',\r\n });\r\n setShowAllocationModal(true);\r\n };\r\n\r\n const handleCreateAllocation = () => {\r\n if (newAllocation.resourceId && newAllocation.start && newAllocation.end) {\r\n onAllocationCreate?.({\r\n resourceId: newAllocation.resourceId,\r\n start: newAllocation.start,\r\n end: newAllocation.end,\r\n hoursPerDay: newAllocation.hoursPerDay || 8,\r\n status: newAllocation.status || 'tentative',\r\n notes: newAllocation.notes,\r\n });\r\n setShowAllocationModal(false);\r\n setNewAllocation({});\r\n }\r\n };\r\n\r\n const toggleResource = (resourceId: string) => {\r\n setExpandedResources((prev) => {\r\n const next = new Set(prev);\r\n if (next.has(resourceId)) {\r\n next.delete(resourceId);\r\n } else {\r\n next.add(resourceId);\r\n }\r\n return next;\r\n });\r\n };\r\n\r\n const getResourceTypeIcon = (type: string): string => {\r\n switch (type) {\r\n case 'human':\r\n return '👤';\r\n case 'equipment':\r\n return '🔧';\r\n case 'room':\r\n return 'đŸĸ';\r\n case 'vehicle':\r\n return '🚗';\r\n case 'material':\r\n return 'đŸ“Ļ';\r\n default:\r\n return '📋';\r\n }\r\n };\r\n\r\n return (\r\n <div className={`nice-resource-allocation ${className}`}>\r\n {/* Toolbar */}\r\n <header className=\"allocation__toolbar\">\r\n <div className=\"toolbar__left\">\r\n <h2>Resource Allocation</h2>\r\n <span className=\"date-range\">\r\n {dateRange.start.toLocaleDateString()} - {dateRange.end.toLocaleDateString()}\r\n </span>\r\n </div>\r\n <div className=\"toolbar__center\">\r\n <div className=\"time-unit-selector\">\r\n {(['day', 'week', 'month'] as TimeUnit[]).map((unit) => (\r\n <button\r\n key={unit}\r\n className={`unit-button ${timeUnit === unit ? 'unit-button--active' : ''}`}\r\n onClick={() => setTimeUnit(unit)}\r\n >\r\n {unit.charAt(0).toUpperCase() + unit.slice(1)}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"toolbar__right\">\r\n {config.showConflicts && conflicts.length > 0 && (\r\n <div className=\"conflicts-badge\">\r\n <span className=\"badge-icon\">âš ī¸</span>\r\n {conflicts.length} Conflict{conflicts.length !== 1 ? 's' : ''}\r\n </div>\r\n )}\r\n </div>\r\n </header>\r\n\r\n {/* Legend */}\r\n <div className=\"allocation__legend\">\r\n <div className=\"legend-item\">\r\n <span className=\"legend-color\" style={{ backgroundColor: 'rgba(34, 197, 94, 0.2)' }} />\r\n <span>Allocated</span>\r\n </div>\r\n <div className=\"legend-item\">\r\n <span className=\"legend-color\" style={{ backgroundColor: 'rgba(245, 158, 11, 0.3)' }} />\r\n <span>\r\n High Utilization ({'>'}={config.utilizationThreshold}%)\r\n </span>\r\n </div>\r\n <div className=\"legend-item\">\r\n <span className=\"legend-color\" style={{ backgroundColor: 'rgba(239, 68, 68, 0.4)' }} />\r\n <span>Overallocated</span>\r\n </div>\r\n </div>\r\n\r\n {/* Grid */}\r\n <div className=\"allocation__grid\">\r\n {/* Header Row */}\r\n <div className=\"grid__header\">\r\n <div className=\"resource-header\">Resource</div>\r\n <div className=\"time-headers\">\r\n {timePeriods.map((period, idx) => (\r\n <div key={idx} className=\"time-header\">\r\n {formatDate(period)}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Resource Rows */}\r\n <div className=\"grid__body\">\r\n {resources.map((resource) => (\r\n <div key={resource.id} className=\"resource-row\">\r\n {/* Resource Info */}\r\n <div className=\"resource-cell\" onClick={() => onResourceClick?.(resource)}>\r\n <button\r\n className=\"expand-button\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n toggleResource(resource.id);\r\n }}\r\n >\r\n {expandedResources.has(resource.id) ? '▾' : '▸'}\r\n </button>\r\n <span className=\"resource-icon\">{getResourceTypeIcon(resource.type)}</span>\r\n <div className=\"resource-info\">\r\n <span className=\"resource-name\">{resource.name}</span>\r\n {resource.department && (\r\n <span className=\"resource-dept\">{resource.department}</span>\r\n )}\r\n </div>\r\n <span className=\"resource-capacity\">{resource.maxCapacity}h/day</span>\r\n </div>\r\n\r\n {/* Time Cells */}\r\n <div className=\"time-cells\">\r\n {timePeriods.map((period, idx) => {\r\n const cellAllocations = getCellAllocations(resource.id, period);\r\n const util = utilizationMap.get(resource.id)?.get(period.getTime());\r\n const isHovered =\r\n hoveredCell?.resourceId === resource.id &&\r\n hoveredCell?.date.getTime() === period.getTime();\r\n\r\n return (\r\n <div\r\n key={idx}\r\n className={`time-cell ${isHovered ? 'time-cell--hovered' : ''}`}\r\n style={{ backgroundColor: getCellColor(resource.id, period) }}\r\n onClick={() => handleCellClick(resource.id, period)}\r\n onMouseEnter={() => setHoveredCell({ resourceId: resource.id, date: period })}\r\n onMouseLeave={() => setHoveredCell(null)}\r\n >\r\n {cellAllocations.length > 0 && (\r\n <div className=\"allocation-indicators\">\r\n {cellAllocations.slice(0, 2).map((alloc) => (\r\n <div\r\n key={alloc.id}\r\n className={`allocation-dot ${alloc.status}`}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setSelectedAllocation(alloc.id);\r\n }}\r\n />\r\n ))}\r\n {cellAllocations.length > 2 && (\r\n <span className=\"more-indicator\">+{cellAllocations.length - 2}</span>\r\n )}\r\n </div>\r\n )}\r\n\r\n {config.showUtilization && util && util.allocatedHours > 0 && (\r\n <span className=\"utilization-label\">{util.allocatedHours.toFixed(1)}h</span>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Expanded Allocations */}\r\n {expandedResources.has(resource.id) && (\r\n <div className=\"expanded-allocations\">\r\n {allocations\r\n .filter((a) => a.resourceId === resource.id)\r\n .map((allocation) => {\r\n const startIdx = timePeriods.findIndex(\r\n (p) => p.getTime() <= allocation.start.getTime(),\r\n );\r\n const endIdx = timePeriods.findIndex(\r\n (p) => p.getTime() >= allocation.end.getTime(),\r\n );\r\n\r\n if (startIdx === -1) {\r\n return null;\r\n }\r\n\r\n const span = Math.max(1, endIdx - startIdx);\r\n const leftPercent = (startIdx / timePeriods.length) * 100;\r\n const widthPercent = (span / timePeriods.length) * 100;\r\n\r\n return (\r\n <div\r\n key={allocation.id}\r\n className={`allocation-bar ${allocation.status} ${selectedAllocation === allocation.id ? 'selected' : ''}`}\r\n style={{\r\n left: `${leftPercent}%`,\r\n width: `${widthPercent}%`,\r\n }}\r\n onClick={() => setSelectedAllocation(allocation.id)}\r\n >\r\n <span className=\"allocation-label\">{allocation.hoursPerDay}h/day</span>\r\n {!readOnly && (\r\n <button\r\n className=\"delete-allocation\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onAllocationDelete?.(allocation.id);\r\n }}\r\n >\r\n ×\r\n </button>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Allocation Modal */}\r\n {showAllocationModal && (\r\n <div className=\"modal-overlay\" onClick={() => setShowAllocationModal(false)}>\r\n <div className=\"allocation-modal\" onClick={(e) => e.stopPropagation()}>\r\n <h3>Create Allocation</h3>\r\n <div className=\"modal-form\">\r\n <label>\r\n Resource\r\n <select\r\n value={newAllocation.resourceId || ''}\r\n onChange={(e) =>\r\n setNewAllocation((prev) => ({ ...prev, resourceId: e.target.value }))\r\n }\r\n >\r\n <option value=\"\">Select resource...</option>\r\n {resources.map((r) => (\r\n <option key={r.id} value={r.id}>\r\n {r.name}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n <label>\r\n Start Date\r\n <input\r\n type=\"date\"\r\n value={newAllocation.start?.toISOString().split('T')[0] || ''}\r\n onChange={(e) =>\r\n setNewAllocation((prev) => ({ ...prev, start: new Date(e.target.value) }))\r\n }\r\n />\r\n </label>\r\n <label>\r\n End Date\r\n <input\r\n type=\"date\"\r\n value={newAllocation.end?.toISOString().split('T')[0] || ''}\r\n onChange={(e) =>\r\n setNewAllocation((prev) => ({ ...prev, end: new Date(e.target.value) }))\r\n }\r\n />\r\n </label>\r\n <label>\r\n Hours per Day\r\n <input\r\n type=\"number\"\r\n min=\"0.5\"\r\n max=\"24\"\r\n step=\"0.5\"\r\n value={newAllocation.hoursPerDay || 8}\r\n onChange={(e) =>\r\n setNewAllocation((prev) => ({\r\n ...prev,\r\n hoursPerDay: parseFloat(e.target.value),\r\n }))\r\n }\r\n />\r\n </label>\r\n <label>\r\n Status\r\n <select\r\n value={newAllocation.status || 'tentative'}\r\n onChange={(e) =>\r\n setNewAllocation((prev) => ({\r\n ...prev,\r\n status: e.target.value as Allocation['status'],\r\n }))\r\n }\r\n >\r\n <option value=\"tentative\">Tentative</option>\r\n <option value=\"confirmed\">Confirmed</option>\r\n </select>\r\n </label>\r\n <label>\r\n Notes\r\n <textarea\r\n value={newAllocation.notes || ''}\r\n onChange={(e) => setNewAllocation((prev) => ({ ...prev, notes: e.target.value }))}\r\n placeholder=\"Optional notes...\"\r\n />\r\n </label>\r\n </div>\r\n <div className=\"modal-actions\">\r\n <button className=\"cancel-button\" onClick={() => setShowAllocationModal(false)}>\r\n Cancel\r\n </button>\r\n <button className=\"create-button\" onClick={handleCreateAllocation}>\r\n Create Allocation\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default NiceResourceAllocation;\r\n","/* eslint-disable jsx-a11y/click-events-have-key-events -- modal overlay backdrops (Esc-on-parent provides keyboard close), selection rows in .map() accompanied by visible cursor:pointer styling and sibling buttons; full keyboard migration via useAccessibleClick + extracted subcomponents tracked in TODO_1.0.10 A2.3 */\r\n/**\r\n * @component NiceInventoryManager\r\n * @description Inventory management and stock control interface\r\n * @package @nice2dev/ui-erp\r\n */\r\n\r\nimport React, { useState, useMemo } from 'react';\r\n\r\nimport type {\r\n NiceInventoryManagerProps,\r\n InventoryItem,\r\n InventoryTransaction,\r\n InventoryViewConfig,\r\n InventoryFilters,\r\n InventoryStatus,\r\n TransactionType,\r\n} from './types';\r\n\r\nconst DEFAULT_VIEW_CONFIG: InventoryViewConfig = {\r\n view: 'grid',\r\n sortBy: 'name',\r\n sortOrder: 'asc',\r\n showImages: true,\r\n pageSize: 24,\r\n};\r\n\r\nexport const NiceInventoryManager: React.FC<NiceInventoryManagerProps> = ({\r\n items,\r\n transactions = [],\r\n viewConfig: externalConfig,\r\n onItemCreate,\r\n onItemUpdate,\r\n onItemDelete,\r\n onTransactionCreate,\r\n onStockCount,\r\n onItemClick,\r\n readOnly = false,\r\n className = '',\r\n}) => {\r\n void onStockCount;\r\n const config = { ...DEFAULT_VIEW_CONFIG, ...externalConfig };\r\n\r\n const [filters, setFilters] = useState<InventoryFilters>({});\r\n const [view, setView] = useState<'grid' | 'list' | 'kanban'>(config.view);\r\n const [sortBy, setSortBy] = useState(config.sortBy);\r\n const [sortOrder, setSortOrder] = useState(config.sortOrder);\r\n const [page, setPage] = useState(1);\r\n const [selectedItems, setSelectedItems] = useState<Set<string>>(new Set());\r\n const [showItemModal, setShowItemModal] = useState(false);\r\n const [showTransactionModal, setShowTransactionModal] = useState(false);\r\n const [editingItem, setEditingItem] = useState<Partial<InventoryItem> | null>(null);\r\n const [newTransaction, setNewTransaction] = useState<Partial<InventoryTransaction>>({});\r\n const [activeTab, setActiveTab] = useState<'inventory' | 'transactions' | 'reorder'>('inventory');\r\n\r\n // Get unique categories\r\n const categories = useMemo(() => {\r\n return Array.from(new Set(items.map((item) => item.category))).sort();\r\n }, [items]);\r\n\r\n // Filter and sort items\r\n const filteredItems = useMemo(() => {\r\n let result = [...items];\r\n\r\n // Apply filters\r\n if (filters.searchQuery) {\r\n const query = filters.searchQuery.toLowerCase();\r\n result = result.filter(\r\n (item) =>\r\n item.name.toLowerCase().includes(query) ||\r\n item.sku.toLowerCase().includes(query) ||\r\n item.description?.toLowerCase().includes(query),\r\n );\r\n }\r\n\r\n if (filters.categories?.length) {\r\n result = result.filter((item) => filters.categories!.includes(item.category));\r\n }\r\n\r\n if (filters.statuses?.length) {\r\n result = result.filter((item) => filters.statuses!.includes(item.status));\r\n }\r\n\r\n if (filters.lowStockOnly) {\r\n result = result.filter((item) => item.quantity <= item.reorderLevel);\r\n }\r\n\r\n // Sort\r\n result.sort((a, b) => {\r\n let comparison = 0;\r\n switch (sortBy) {\r\n case 'name':\r\n comparison = a.name.localeCompare(b.name);\r\n break;\r\n case 'sku':\r\n comparison = a.sku.localeCompare(b.sku);\r\n break;\r\n case 'quantity':\r\n comparison = a.quantity - b.quantity;\r\n break;\r\n case 'value':\r\n comparison = a.quantity * a.cost.amount - b.quantity * b.cost.amount;\r\n break;\r\n case 'lastUpdated':\r\n comparison = (a.lastCountDate?.getTime() || 0) - (b.lastCountDate?.getTime() || 0);\r\n break;\r\n }\r\n return sortOrder === 'asc' ? comparison : -comparison;\r\n });\r\n\r\n return result;\r\n }, [items, filters, sortBy, sortOrder]);\r\n\r\n // Paginated items\r\n const paginatedItems = useMemo(() => {\r\n const start = (page - 1) * config.pageSize;\r\n return filteredItems.slice(start, start + config.pageSize);\r\n }, [filteredItems, page, config.pageSize]);\r\n\r\n const totalPages = Math.ceil(filteredItems.length / config.pageSize);\r\n\r\n // Items needing reorder\r\n const reorderItems = useMemo(() => {\r\n return items.filter((item) => item.quantity <= item.reorderLevel);\r\n }, [items]);\r\n\r\n // Recent transactions\r\n const recentTransactions = useMemo(() => {\r\n return [...transactions].sort((a, b) => b.date.getTime() - a.date.getTime()).slice(0, 50);\r\n }, [transactions]);\r\n\r\n // Group items for kanban view\r\n const kanbanGroups = useMemo(() => {\r\n if (view !== 'kanban') {\r\n return null;\r\n }\r\n\r\n const groups = new Map<InventoryStatus, InventoryItem[]>();\r\n const statuses: InventoryStatus[] = [\r\n 'in-stock',\r\n 'low-stock',\r\n 'out-of-stock',\r\n 'on-order',\r\n 'discontinued',\r\n ];\r\n\r\n statuses.forEach((status) => groups.set(status, []));\r\n\r\n filteredItems.forEach((item) => {\r\n groups.get(item.status)?.push(item);\r\n });\r\n\r\n return groups;\r\n }, [filteredItems, view]);\r\n\r\n const getStatusColor = (status: InventoryStatus): string => {\r\n switch (status) {\r\n case 'in-stock':\r\n return '#22c55e';\r\n case 'low-stock':\r\n return '#f59e0b';\r\n case 'out-of-stock':\r\n return '#ef4444';\r\n case 'on-order':\r\n return '#3b82f6';\r\n case 'discontinued':\r\n return '#6b7280';\r\n default:\r\n return '#6b7280';\r\n }\r\n };\r\n\r\n const getTransactionIcon = (type: TransactionType): string => {\r\n switch (type) {\r\n case 'receipt':\r\n return 'đŸ“Ĩ';\r\n case 'issue':\r\n return '📤';\r\n case 'transfer':\r\n return '🔄';\r\n case 'adjustment':\r\n return 'âœī¸';\r\n case 'return':\r\n return 'â†Šī¸';\r\n case 'count':\r\n return '📊';\r\n case 'write-off':\r\n return '❌';\r\n default:\r\n return '📋';\r\n }\r\n };\r\n\r\n const formatCurrency = (amount: number, symbol: string = '$'): string => {\r\n return `${symbol}${amount.toFixed(2)}`;\r\n };\r\n\r\n const handleItemSubmit = () => {\r\n if (!editingItem) {\r\n return;\r\n }\r\n\r\n if (editingItem.id) {\r\n onItemUpdate?.(editingItem as InventoryItem);\r\n } else {\r\n onItemCreate?.(editingItem as Omit<InventoryItem, 'id'>);\r\n }\r\n\r\n setShowItemModal(false);\r\n setEditingItem(null);\r\n };\r\n\r\n const handleTransactionSubmit = () => {\r\n if (newTransaction.itemId && newTransaction.type && newTransaction.quantity) {\r\n onTransactionCreate?.({\r\n itemId: newTransaction.itemId,\r\n type: newTransaction.type as TransactionType,\r\n quantity: newTransaction.quantity,\r\n date: new Date(),\r\n reference: newTransaction.reference,\r\n notes: newTransaction.notes,\r\n });\r\n setShowTransactionModal(false);\r\n setNewTransaction({});\r\n }\r\n };\r\n\r\n const toggleItemSelection = (itemId: string) => {\r\n setSelectedItems((prev) => {\r\n const next = new Set(prev);\r\n if (next.has(itemId)) {\r\n next.delete(itemId);\r\n } else {\r\n next.add(itemId);\r\n }\r\n return next;\r\n });\r\n };\r\n\r\n return (\r\n <div className={`nice-inventory-manager ${className}`}>\r\n {/* Toolbar */}\r\n <header className=\"inventory__toolbar\">\r\n <div className=\"toolbar__left\">\r\n <div className=\"search-box\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search items...\"\r\n value={filters.searchQuery || ''}\r\n onChange={(e) => setFilters((prev) => ({ ...prev, searchQuery: e.target.value }))}\r\n />\r\n <span className=\"search-icon\">🔍</span>\r\n </div>\r\n <select\r\n value={filters.categories?.[0] || ''}\r\n onChange={(e) =>\r\n setFilters((prev) => ({\r\n ...prev,\r\n categories: e.target.value ? [e.target.value] : undefined,\r\n }))\r\n }\r\n >\r\n <option value=\"\">All Categories</option>\r\n {categories.map((cat) => (\r\n <option key={cat} value={cat}>\r\n {cat}\r\n </option>\r\n ))}\r\n </select>\r\n <label className=\"filter-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n checked={filters.lowStockOnly || false}\r\n onChange={(e) => setFilters((prev) => ({ ...prev, lowStockOnly: e.target.checked }))}\r\n />\r\n Low Stock Only\r\n </label>\r\n </div>\r\n <div className=\"toolbar__right\">\r\n <div className=\"view-selector\">\r\n {(['grid', 'list', 'kanban'] as const).map((v) => (\r\n <button\r\n key={v}\r\n className={`view-button ${view === v ? 'view-button--active' : ''}`}\r\n onClick={() => setView(v)}\r\n >\r\n {v === 'grid' ? '⊞' : v === 'list' ? '☰' : 'â–Ļ'}\r\n </button>\r\n ))}\r\n </div>\r\n {!readOnly && (\r\n <button\r\n className=\"add-button\"\r\n onClick={() => {\r\n setEditingItem({\r\n category: categories[0],\r\n unit: 'pcs',\r\n quantity: 0,\r\n reorderLevel: 10,\r\n reorderQuantity: 100,\r\n cost: { amount: 0, currency: { code: 'USD', symbol: '$', decimalPlaces: 2 } },\r\n status: 'in-stock',\r\n });\r\n setShowItemModal(true);\r\n }}\r\n >\r\n + Add Item\r\n </button>\r\n )}\r\n </div>\r\n </header>\r\n\r\n {/* Tabs */}\r\n <div className=\"inventory__tabs\">\r\n <button\r\n className={`tab ${activeTab === 'inventory' ? 'tab--active' : ''}`}\r\n onClick={() => setActiveTab('inventory')}\r\n >\r\n Inventory ({items.length})\r\n </button>\r\n <button\r\n className={`tab ${activeTab === 'transactions' ? 'tab--active' : ''}`}\r\n onClick={() => setActiveTab('transactions')}\r\n >\r\n Transactions ({transactions.length})\r\n </button>\r\n <button\r\n className={`tab ${activeTab === 'reorder' ? 'tab--active' : ''}`}\r\n onClick={() => setActiveTab('reorder')}\r\n >\r\n Reorder Alerts\r\n {reorderItems.length > 0 && <span className=\"alert-badge\">{reorderItems.length}</span>}\r\n </button>\r\n </div>\r\n\r\n <div className=\"inventory__content\">\r\n {/* Inventory Tab */}\r\n {activeTab === 'inventory' && (\r\n <>\r\n {/* Grid View */}\r\n {view === 'grid' && (\r\n <div className=\"items-grid\">\r\n {paginatedItems.map((item) => (\r\n <div\r\n key={item.id}\r\n className={`item-card ${selectedItems.has(item.id) ? 'item-card--selected' : ''}`}\r\n onClick={() => onItemClick?.(item)}\r\n >\r\n {!readOnly && (\r\n <input\r\n type=\"checkbox\"\r\n className=\"item-checkbox\"\r\n checked={selectedItems.has(item.id)}\r\n onChange={() => toggleItemSelection(item.id)}\r\n onClick={(e) => e.stopPropagation()}\r\n />\r\n )}\r\n {config.showImages && (\r\n <div className=\"item-image\">\r\n {item.images?.[0] ? (\r\n <img src={item.images[0]} alt={item.name} />\r\n ) : (\r\n <span className=\"placeholder-image\">đŸ“Ļ</span>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"item-info\">\r\n <span className=\"item-sku\">{item.sku}</span>\r\n <h4 className=\"item-name\">{item.name}</h4>\r\n <span className=\"item-category\">{item.category}</span>\r\n </div>\r\n <div className=\"item-stock\">\r\n <span\r\n className=\"status-badge\"\r\n style={{ backgroundColor: getStatusColor(item.status) }}\r\n >\r\n {item.status.replace('-', ' ')}\r\n </span>\r\n <span className=\"quantity\">\r\n {item.quantity} {item.unit}\r\n </span>\r\n {item.quantity <= item.reorderLevel && (\r\n <span className=\"reorder-alert\">âš ī¸ Low Stock</span>\r\n )}\r\n </div>\r\n <div className=\"item-value\">\r\n {formatCurrency(item.quantity * item.cost.amount, item.cost.currency.symbol)}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* List View */}\r\n {view === 'list' && (\r\n <div className=\"items-table\">\r\n <table>\r\n <thead>\r\n <tr>\r\n {!readOnly && <th></th>}\r\n <th\r\n onClick={() => {\r\n setSortBy('sku');\r\n setSortOrder((prev) => (prev === 'asc' ? 'desc' : 'asc'));\r\n }}\r\n >\r\n SKU {sortBy === 'sku' && (sortOrder === 'asc' ? '↑' : '↓')}\r\n </th>\r\n <th\r\n onClick={() => {\r\n setSortBy('name');\r\n setSortOrder((prev) => (prev === 'asc' ? 'desc' : 'asc'));\r\n }}\r\n >\r\n Name {sortBy === 'name' && (sortOrder === 'asc' ? '↑' : '↓')}\r\n </th>\r\n <th>Category</th>\r\n <th\r\n onClick={() => {\r\n setSortBy('quantity');\r\n setSortOrder((prev) => (prev === 'asc' ? 'desc' : 'asc'));\r\n }}\r\n >\r\n Qty {sortBy === 'quantity' && (sortOrder === 'asc' ? '↑' : '↓')}\r\n </th>\r\n <th>Status</th>\r\n <th>Location</th>\r\n <th\r\n onClick={() => {\r\n setSortBy('value');\r\n setSortOrder((prev) => (prev === 'asc' ? 'desc' : 'asc'));\r\n }}\r\n >\r\n Value {sortBy === 'value' && (sortOrder === 'asc' ? '↑' : '↓')}\r\n </th>\r\n {!readOnly && <th>Actions</th>}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {paginatedItems.map((item) => (\r\n <tr\r\n key={item.id}\r\n className={selectedItems.has(item.id) ? 'row--selected' : ''}\r\n onClick={() => onItemClick?.(item)}\r\n >\r\n {!readOnly && (\r\n <td>\r\n <input\r\n type=\"checkbox\"\r\n checked={selectedItems.has(item.id)}\r\n onChange={() => toggleItemSelection(item.id)}\r\n onClick={(e) => e.stopPropagation()}\r\n />\r\n </td>\r\n )}\r\n <td className=\"sku-cell\">{item.sku}</td>\r\n <td>{item.name}</td>\r\n <td>{item.category}</td>\r\n <td className={item.quantity <= item.reorderLevel ? 'low-stock' : ''}>\r\n {item.quantity} {item.unit}\r\n </td>\r\n <td>\r\n <span\r\n className=\"status-badge\"\r\n style={{ backgroundColor: getStatusColor(item.status) }}\r\n >\r\n {item.status.replace('-', ' ')}\r\n </span>\r\n </td>\r\n <td>\r\n {item.location\r\n ? `${item.location.warehouseName}${item.location.aisle ? ` / ${item.location.aisle}` : ''}`\r\n : '-'}\r\n </td>\r\n <td>\r\n {formatCurrency(\r\n item.quantity * item.cost.amount,\r\n item.cost.currency.symbol,\r\n )}\r\n </td>\r\n {!readOnly && (\r\n <td className=\"actions-cell\">\r\n <button\r\n className=\"action-btn\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setEditingItem(item);\r\n setShowItemModal(true);\r\n }}\r\n >\r\n âœī¸\r\n </button>\r\n <button\r\n className=\"action-btn\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setNewTransaction({ itemId: item.id });\r\n setShowTransactionModal(true);\r\n }}\r\n >\r\n 📝\r\n </button>\r\n <button\r\n className=\"action-btn action-btn--danger\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n onItemDelete?.(item.id);\r\n }}\r\n >\r\n đŸ—‘ī¸\r\n </button>\r\n </td>\r\n )}\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n\r\n {/* Kanban View */}\r\n {view === 'kanban' && kanbanGroups && (\r\n <div className=\"items-kanban\">\r\n {Array.from(kanbanGroups.entries()).map(([status, statusItems]) => (\r\n <div key={status} className=\"kanban-column\">\r\n <div className=\"column-header\" style={{ borderColor: getStatusColor(status) }}>\r\n <span\r\n className=\"status-dot\"\r\n style={{ backgroundColor: getStatusColor(status) }}\r\n />\r\n <span className=\"column-title\">{status.replace('-', ' ')}</span>\r\n <span className=\"column-count\">{statusItems.length}</span>\r\n </div>\r\n <div className=\"column-items\">\r\n {statusItems.map((item) => (\r\n <div\r\n key={item.id}\r\n className=\"kanban-card\"\r\n onClick={() => onItemClick?.(item)}\r\n >\r\n <span className=\"card-sku\">{item.sku}</span>\r\n <span className=\"card-name\">{item.name}</span>\r\n <span className=\"card-qty\">\r\n {item.quantity} {item.unit}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Pagination */}\r\n {totalPages > 1 && (\r\n <div className=\"pagination\">\r\n <button disabled={page === 1} onClick={() => setPage((p) => p - 1)}>\r\n Previous\r\n </button>\r\n <span>\r\n Page {page} of {totalPages}\r\n </span>\r\n <button disabled={page === totalPages} onClick={() => setPage((p) => p + 1)}>\r\n Next\r\n </button>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n\r\n {/* Transactions Tab */}\r\n {activeTab === 'transactions' && (\r\n <div className=\"transactions-tab\">\r\n {!readOnly && (\r\n <button\r\n className=\"add-transaction-button\"\r\n onClick={() => setShowTransactionModal(true)}\r\n >\r\n + New Transaction\r\n </button>\r\n )}\r\n <div className=\"transactions-list\">\r\n {recentTransactions.map((tx) => {\r\n const item = items.find((i) => i.id === tx.itemId);\r\n return (\r\n <div key={tx.id} className=\"transaction-item\">\r\n <span className=\"tx-icon\">{getTransactionIcon(tx.type)}</span>\r\n <div className=\"tx-info\">\r\n <span className=\"tx-type\">{tx.type}</span>\r\n <span className=\"tx-item\">{item?.name || tx.itemId}</span>\r\n </div>\r\n <span\r\n className={`tx-qty ${tx.type === 'receipt' || tx.type === 'return' ? 'positive' : 'negative'}`}\r\n >\r\n {tx.type === 'receipt' || tx.type === 'return' ? '+' : '-'}\r\n {tx.quantity}\r\n </span>\r\n <span className=\"tx-date\">{tx.date.toLocaleString()}</span>\r\n {tx.reference && <span className=\"tx-ref\">Ref: {tx.reference}</span>}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Reorder Tab */}\r\n {activeTab === 'reorder' && (\r\n <div className=\"reorder-tab\">\r\n {reorderItems.length === 0 ? (\r\n <div className=\"empty-state\">\r\n <span className=\"empty-icon\">✅</span>\r\n <p>All items are sufficiently stocked</p>\r\n </div>\r\n ) : (\r\n <div className=\"reorder-list\">\r\n {reorderItems.map((item) => (\r\n <div key={item.id} className=\"reorder-item\">\r\n <div className=\"reorder-info\">\r\n <span className=\"reorder-sku\">{item.sku}</span>\r\n <span className=\"reorder-name\">{item.name}</span>\r\n </div>\r\n <div className=\"reorder-stock\">\r\n <span className=\"current-qty\">\r\n Current: {item.quantity} {item.unit}\r\n </span>\r\n <span className=\"reorder-level\">Reorder at: {item.reorderLevel}</span>\r\n <span className=\"reorder-qty\">Order qty: {item.reorderQuantity}</span>\r\n </div>\r\n {item.supplier && <span className=\"supplier-name\">{item.supplier.name}</span>}\r\n {!readOnly && (\r\n <button\r\n className=\"create-po-button\"\r\n onClick={() => console.log('Create PO for', item.id)}\r\n >\r\n Create PO\r\n </button>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Item Modal */}\r\n {showItemModal && editingItem && (\r\n <div className=\"modal-overlay\" onClick={() => setShowItemModal(false)}>\r\n <div className=\"item-modal\" onClick={(e) => e.stopPropagation()}>\r\n <h3>{editingItem.id ? 'Edit Item' : 'Add New Item'}</h3>\r\n <div className=\"modal-form\">\r\n <div className=\"form-row\">\r\n <label>\r\n SKU\r\n <input\r\n type=\"text\"\r\n value={editingItem.sku || ''}\r\n onChange={(e) => setEditingItem((prev) => ({ ...prev!, sku: e.target.value }))}\r\n />\r\n </label>\r\n <label>\r\n Name\r\n <input\r\n type=\"text\"\r\n value={editingItem.name || ''}\r\n onChange={(e) => setEditingItem((prev) => ({ ...prev!, name: e.target.value }))}\r\n />\r\n </label>\r\n </div>\r\n <label>\r\n Description\r\n <textarea\r\n value={editingItem.description || ''}\r\n onChange={(e) =>\r\n setEditingItem((prev) => ({ ...prev!, description: e.target.value }))\r\n }\r\n />\r\n </label>\r\n <div className=\"form-row\">\r\n <label>\r\n Category\r\n <input\r\n type=\"text\"\r\n value={editingItem.category || ''}\r\n onChange={(e) =>\r\n setEditingItem((prev) => ({ ...prev!, category: e.target.value }))\r\n }\r\n list=\"categories\"\r\n />\r\n <datalist id=\"categories\">\r\n {categories.map((c) => (\r\n <option key={c} value={c} />\r\n ))}\r\n </datalist>\r\n </label>\r\n <label>\r\n Unit\r\n <input\r\n type=\"text\"\r\n value={editingItem.unit || ''}\r\n onChange={(e) => setEditingItem((prev) => ({ ...prev!, unit: e.target.value }))}\r\n />\r\n </label>\r\n </div>\r\n <div className=\"form-row\">\r\n <label>\r\n Quantity\r\n <input\r\n type=\"number\"\r\n value={editingItem.quantity || 0}\r\n onChange={(e) =>\r\n setEditingItem((prev) => ({ ...prev!, quantity: parseInt(e.target.value) }))\r\n }\r\n />\r\n </label>\r\n <label>\r\n Reorder Level\r\n <input\r\n type=\"number\"\r\n value={editingItem.reorderLevel || 0}\r\n onChange={(e) =>\r\n setEditingItem((prev) => ({\r\n ...prev!,\r\n reorderLevel: parseInt(e.target.value),\r\n }))\r\n }\r\n />\r\n </label>\r\n <label>\r\n Reorder Qty\r\n <input\r\n type=\"number\"\r\n value={editingItem.reorderQuantity || 0}\r\n onChange={(e) =>\r\n setEditingItem((prev) => ({\r\n ...prev!,\r\n reorderQuantity: parseInt(e.target.value),\r\n }))\r\n }\r\n />\r\n </label>\r\n </div>\r\n <label>\r\n Unit Cost\r\n <input\r\n type=\"number\"\r\n step=\"0.01\"\r\n value={editingItem.cost?.amount || 0}\r\n onChange={(e) =>\r\n setEditingItem((prev) => ({\r\n ...prev!,\r\n cost: {\r\n ...prev!.cost!,\r\n amount: parseFloat(e.target.value),\r\n },\r\n }))\r\n }\r\n />\r\n </label>\r\n </div>\r\n <div className=\"modal-actions\">\r\n <button className=\"cancel-button\" onClick={() => setShowItemModal(false)}>\r\n Cancel\r\n </button>\r\n <button className=\"save-button\" onClick={handleItemSubmit}>\r\n {editingItem.id ? 'Save Changes' : 'Create Item'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Transaction Modal */}\r\n {showTransactionModal && (\r\n <div className=\"modal-overlay\" onClick={() => setShowTransactionModal(false)}>\r\n <div className=\"transaction-modal\" onClick={(e) => e.stopPropagation()}>\r\n <h3>Create Transaction</h3>\r\n <div className=\"modal-form\">\r\n <label>\r\n Item\r\n <select\r\n value={newTransaction.itemId || ''}\r\n onChange={(e) =>\r\n setNewTransaction((prev) => ({ ...prev, itemId: e.target.value }))\r\n }\r\n >\r\n <option value=\"\">Select item...</option>\r\n {items.map((item) => (\r\n <option key={item.id} value={item.id}>\r\n {item.sku} - {item.name}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n <label>\r\n Type\r\n <select\r\n value={newTransaction.type || ''}\r\n onChange={(e) =>\r\n setNewTransaction((prev) => ({\r\n ...prev,\r\n type: e.target.value as TransactionType,\r\n }))\r\n }\r\n >\r\n <option value=\"\">Select type...</option>\r\n <option value=\"receipt\">Receipt</option>\r\n <option value=\"issue\">Issue</option>\r\n <option value=\"transfer\">Transfer</option>\r\n <option value=\"adjustment\">Adjustment</option>\r\n <option value=\"return\">Return</option>\r\n <option value=\"write-off\">Write-off</option>\r\n </select>\r\n </label>\r\n <label>\r\n Quantity\r\n <input\r\n type=\"number\"\r\n min=\"1\"\r\n value={newTransaction.quantity || ''}\r\n onChange={(e) =>\r\n setNewTransaction((prev) => ({ ...prev, quantity: parseInt(e.target.value) }))\r\n }\r\n />\r\n </label>\r\n <label>\r\n Reference\r\n <input\r\n type=\"text\"\r\n value={newTransaction.reference || ''}\r\n onChange={(e) =>\r\n setNewTransaction((prev) => ({ ...prev, reference: e.target.value }))\r\n }\r\n placeholder=\"PO number, invoice, etc.\"\r\n />\r\n </label>\r\n <label>\r\n Notes\r\n <textarea\r\n value={newTransaction.notes || ''}\r\n onChange={(e) =>\r\n setNewTransaction((prev) => ({ ...prev, notes: e.target.value }))\r\n }\r\n />\r\n </label>\r\n </div>\r\n <div className=\"modal-actions\">\r\n <button className=\"cancel-button\" onClick={() => setShowTransactionModal(false)}>\r\n Cancel\r\n </button>\r\n <button className=\"save-button\" onClick={handleTransactionSubmit}>\r\n Create Transaction\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default NiceInventoryManager;\r\n"],"names":["DEFAULT_VIEW_CONFIG","useState","useMemo","useCallback","_a","jsxs","jsx","_b","Fragment"],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ import { default as default_2 } from 'react';
2
+
3
+ export declare interface Address {
4
+ line1: string;
5
+ line2?: string;
6
+ city: string;
7
+ state?: string;
8
+ postalCode: string;
9
+ country: string;
10
+ }
11
+
12
+ export declare interface Allocation {
13
+ id: string;
14
+ resourceId: string;
15
+ projectId?: string;
16
+ taskId?: string;
17
+ start: Date;
18
+ end: Date;
19
+ hoursPerDay: number;
20
+ status: AllocationStatus;
21
+ notes?: string;
22
+ }
23
+
24
+ export declare interface AllocationConflict {
25
+ resourceId: string;
26
+ date: Date;
27
+ allocatedHours: number;
28
+ maxCapacity: number;
29
+ allocations: Allocation[];
30
+ }
31
+
32
+ export declare type AllocationStatus = 'tentative' | 'confirmed' | 'completed' | 'cancelled';
33
+
34
+ export declare interface AllocationViewConfig {
35
+ timeUnit: TimeUnit;
36
+ showUtilization: boolean;
37
+ showConflicts: boolean;
38
+ groupBy: 'resource' | 'project' | 'department';
39
+ utilizationThreshold: number;
40
+ }
41
+
42
+ export declare interface AvailabilityException {
43
+ date: Date;
44
+ type: 'unavailable' | 'partial' | 'overtime';
45
+ hours?: {
46
+ start: string;
47
+ end: string;
48
+ };
49
+ reason?: string;
50
+ }
51
+
52
+ export declare interface Currency {
53
+ code: string;
54
+ symbol: string;
55
+ decimalPlaces: number;
56
+ }
57
+
58
+ /**
59
+ * ERP Component Types
60
+ * @package @nice2dev/ui-erp
61
+ */
62
+ export declare interface DateRange {
63
+ start: Date;
64
+ end: Date;
65
+ }
66
+
67
+ export declare interface InventoryFilters {
68
+ categories?: string[];
69
+ statuses?: InventoryStatus[];
70
+ locations?: string[];
71
+ suppliers?: string[];
72
+ lowStockOnly?: boolean;
73
+ searchQuery?: string;
74
+ }
75
+
76
+ export declare interface InventoryItem {
77
+ id: string;
78
+ sku: string;
79
+ name: string;
80
+ description?: string;
81
+ category: string;
82
+ subcategory?: string;
83
+ unit: string;
84
+ quantity: number;
85
+ reorderLevel: number;
86
+ reorderQuantity: number;
87
+ location?: WarehouseLocation;
88
+ cost: Money;
89
+ price?: Money;
90
+ supplier?: Supplier;
91
+ barcode?: string;
92
+ serialTracked?: boolean;
93
+ batchTracked?: boolean;
94
+ expiryDate?: Date;
95
+ lastCountDate?: Date;
96
+ status: InventoryStatus;
97
+ attributes?: Record<string, string | number>;
98
+ images?: string[];
99
+ }
100
+
101
+ export declare interface InventoryReport {
102
+ type: 'valuation' | 'movement' | 'aging' | 'reorder';
103
+ dateRange: DateRange;
104
+ filters?: InventoryFilters;
105
+ data: unknown;
106
+ }
107
+
108
+ export declare type InventoryStatus = 'in-stock' | 'low-stock' | 'out-of-stock' | 'discontinued' | 'on-order';
109
+
110
+ export declare interface InventoryTransaction {
111
+ id: string;
112
+ itemId: string;
113
+ type: TransactionType;
114
+ quantity: number;
115
+ date: Date;
116
+ reference?: string;
117
+ notes?: string;
118
+ userId?: string;
119
+ fromLocation?: WarehouseLocation;
120
+ toLocation?: WarehouseLocation;
121
+ cost?: Money;
122
+ }
123
+
124
+ export declare interface InventoryViewConfig {
125
+ view: 'grid' | 'list' | 'kanban';
126
+ groupBy?: 'category' | 'location' | 'status' | 'supplier';
127
+ sortBy: 'name' | 'sku' | 'quantity' | 'value' | 'lastUpdated';
128
+ sortOrder: 'asc' | 'desc';
129
+ showImages: boolean;
130
+ pageSize: number;
131
+ }
132
+
133
+ export declare interface Money {
134
+ amount: number;
135
+ currency: Currency;
136
+ }
137
+
138
+ export declare const NiceInventoryManager: default_2.FC<NiceInventoryManagerProps>;
139
+
140
+ export declare interface NiceInventoryManagerProps {
141
+ items: InventoryItem[];
142
+ transactions?: InventoryTransaction[];
143
+ viewConfig?: Partial<InventoryViewConfig>;
144
+ onItemCreate?: (item: Omit<InventoryItem, 'id'>) => void;
145
+ onItemUpdate?: (item: InventoryItem) => void;
146
+ onItemDelete?: (itemId: string) => void;
147
+ onTransactionCreate?: (transaction: Omit<InventoryTransaction, 'id'>) => void;
148
+ onStockCount?: (stockCount: StockCount) => void;
149
+ onItemClick?: (item: InventoryItem) => void;
150
+ readOnly?: boolean;
151
+ className?: string;
152
+ }
153
+
154
+ export declare interface NicePurchaseOrderProps {
155
+ orders: PurchaseOrder[];
156
+ suppliers: Supplier[];
157
+ items: Pick<InventoryItem, 'id' | 'sku' | 'name' | 'cost'>[];
158
+ onOrderCreate?: (order: Omit<PurchaseOrder, 'id'>) => void;
159
+ onOrderUpdate?: (order: PurchaseOrder) => void;
160
+ onOrderDelete?: (orderId: string) => void;
161
+ onOrderApprove?: (orderId: string) => void;
162
+ onReceiveItems?: (orderId: string, items: {
163
+ itemId: string;
164
+ quantity: number;
165
+ }[]) => void;
166
+ readOnly?: boolean;
167
+ className?: string;
168
+ }
169
+
170
+ export declare const NiceResourceAllocation: default_2.FC<NiceResourceAllocationProps>;
171
+
172
+ export declare interface NiceResourceAllocationProps {
173
+ resources: Resource[];
174
+ allocations: Allocation[];
175
+ dateRange: DateRange;
176
+ viewConfig?: Partial<AllocationViewConfig>;
177
+ onAllocationCreate?: (allocation: Omit<Allocation, 'id'>) => void;
178
+ onAllocationUpdate?: (allocation: Allocation) => void;
179
+ onAllocationDelete?: (allocationId: string) => void;
180
+ onResourceClick?: (resource: Resource) => void;
181
+ readOnly?: boolean;
182
+ className?: string;
183
+ }
184
+
185
+ export declare interface PurchaseOrder {
186
+ id: string;
187
+ orderNumber: string;
188
+ supplier: Supplier;
189
+ status: PurchaseOrderStatus;
190
+ orderDate: Date;
191
+ expectedDelivery?: Date;
192
+ actualDelivery?: Date;
193
+ items: PurchaseOrderItem[];
194
+ subtotal: Money;
195
+ tax: Money;
196
+ total: Money;
197
+ shippingAddress?: Address;
198
+ notes?: string;
199
+ createdBy?: string;
200
+ approvedBy?: string;
201
+ }
202
+
203
+ export declare interface PurchaseOrderItem {
204
+ itemId: string;
205
+ itemName: string;
206
+ sku: string;
207
+ quantity: number;
208
+ unitPrice: Money;
209
+ receivedQuantity?: number;
210
+ lineTotal: Money;
211
+ }
212
+
213
+ export declare type PurchaseOrderStatus = 'draft' | 'pending-approval' | 'approved' | 'ordered' | 'partially-received' | 'received' | 'cancelled';
214
+
215
+ export declare interface Resource {
216
+ id: string;
217
+ name: string;
218
+ type: ResourceType;
219
+ department?: string;
220
+ skills?: string[];
221
+ avatar?: string;
222
+ email?: string;
223
+ availability: ResourceAvailability;
224
+ costRate?: Money;
225
+ maxCapacity: number;
226
+ }
227
+
228
+ export declare interface ResourceAvailability {
229
+ workingDays: number[];
230
+ workingHours: {
231
+ start: string;
232
+ end: string;
233
+ };
234
+ exceptions?: AvailabilityException[];
235
+ }
236
+
237
+ export declare type ResourceType = 'human' | 'equipment' | 'room' | 'vehicle' | 'material';
238
+
239
+ export declare interface ResourceUtilization {
240
+ resourceId: string;
241
+ period: DateRange;
242
+ allocatedHours: number;
243
+ availableHours: number;
244
+ utilizationPercent: number;
245
+ overallocated: boolean;
246
+ }
247
+
248
+ export declare interface StockCount {
249
+ id: string;
250
+ date: Date;
251
+ status: StockCountStatus;
252
+ items: StockCountItem[];
253
+ userId?: string;
254
+ notes?: string;
255
+ }
256
+
257
+ export declare interface StockCountItem {
258
+ itemId: string;
259
+ expectedQuantity: number;
260
+ countedQuantity: number;
261
+ variance: number;
262
+ verified?: boolean;
263
+ }
264
+
265
+ export declare type StockCountStatus = 'draft' | 'in-progress' | 'completed' | 'cancelled';
266
+
267
+ export declare interface Supplier {
268
+ id: string;
269
+ name: string;
270
+ contactEmail?: string;
271
+ contactPhone?: string;
272
+ leadTime?: number;
273
+ }
274
+
275
+ export declare type TimeUnit = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';
276
+
277
+ export declare type TransactionType = 'receipt' | 'issue' | 'transfer' | 'adjustment' | 'return' | 'count' | 'write-off';
278
+
279
+ export declare interface WarehouseLocation {
280
+ warehouseId: string;
281
+ warehouseName: string;
282
+ zone?: string;
283
+ aisle?: string;
284
+ rack?: string;
285
+ shelf?: string;
286
+ bin?: string;
287
+ }
288
+
289
+ export { }