@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.
- package/README.md +232 -0
- package/dist/index.cjs +1271 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +289 -0
- package/dist/index.mjs +1271 -0
- package/dist/index.mjs.map +1 -0
- package/dist/style.css +1404 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","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","_a","_b"],"mappings":"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"}
|