oceanhelm 0.0.1

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":"oceanhelm.es.js","sources":["../src/components/ConfigurableSidebar.vue","../src/components/VesselList.vue","../src/components/DashHead.vue","../src/components/OceanHelmMaintenance.vue","../src/components/ActivityLogs.vue","../src/components/CrewManagement.vue","../src/utils/sidebarConfig.js","../src/utils/permissions.js","../src/index.js"],"sourcesContent":["<template>\n <nav id=\"sidebar\" :class=\"sidebarClasses\">\n <!-- Logo Section -->\n <div class=\"logo d-flex align-items-center left\" v-if=\"showLogo\">\n <i :class=\"logoIcon\" class=\"me-2\"></i>\n <span>{{ brandName }}</span>\n </div>\n \n <!-- Navigation Items -->\n <ul class=\"list-unstyled components mt-4\">\n <li \n v-for=\"(item, index) in filteredMenuItems\" \n :key=\"index\"\n :class=\"{ 'active': item.active, 'dropdown': item.type === 'dropdown' }\"\n @click=\"handleItemClick(item)\"\n >\n <!-- Regular Link -->\n <a \n v-if=\"item.type === 'link'\" \n :href=\"item.href || '#'\"\n @click.prevent=\"handleNavigation(item)\"\n >\n <i :class=\"item.icon\" v-if=\"item.icon\"></i> \n {{ item.label }}\n </a>\n \n <!-- Button/Action -->\n <a \n v-else-if=\"item.type === 'button'\" \n @click.prevent=\"handleAction(item)\"\n style=\"cursor: pointer;\"\n >\n <i :class=\"item.icon\" v-if=\"item.icon\"></i> \n {{ item.label }}\n </a>\n \n <!-- Dropdown -->\n <template v-else-if=\"item.type === 'dropdown'\">\n <a \n class=\"dropdown-toggle\" \n type=\"button\" \n data-bs-toggle=\"dropdown\" \n aria-expanded=\"false\"\n >\n <i :class=\"item.icon\" v-if=\"item.icon\"></i> \n {{ item.label }}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuLink\">\n <a \n v-for=\"(subItem, subIndex) in item.children\" \n :key=\"subIndex\"\n class=\"dropdown-item black\" \n @click.prevent=\"handleAction(subItem)\"\n style=\"cursor: pointer;\"\n >\n {{ subItem.label }}\n </a>\n </div>\n </template>\n \n <!-- Separator -->\n <div \n v-else-if=\"item.type === 'separator'\" \n class=\"dropdown-divider\"\n ></div>\n \n <!-- Static Text -->\n <a v-else-if=\"item.type === 'text'\">\n {{ item.label }}\n </a>\n </li>\n </ul>\n \n <!-- Custom Slot for Additional Content -->\n <slot name=\"footer\"></slot>\n </nav>\n </template>\n \n <script>\n export default {\n name: 'ConfigurableSidebar',\n \n props: {\n // Brand configuration\n brandName: {\n type: String,\n default: 'OceanHelm'\n },\n logoIcon: {\n type: String,\n default: 'bi bi-water'\n },\n showLogo: {\n type: Boolean,\n default: true\n },\n \n // Menu items configuration\n menuItems: {\n type: Array,\n required: true,\n default: () => []\n },\n \n // User profile for role-based filtering\n userProfile: {\n type: Object,\n default: () => ({})\n },\n \n // Sidebar behavior\n responsive: {\n type: Boolean,\n default: true\n },\n \n // Custom classes\n customClasses: {\n type: String,\n default: ''\n },\n \n // Permission checker function\n permissionChecker: {\n type: Function,\n default: null\n }\n },\n \n computed: {\n sidebarClasses() {\n return this.customClasses;\n },\n \n filteredMenuItems() {\n return this.menuItems.filter(item => this.hasPermission(item));\n }\n },\n \n mounted() {\n if (this.responsive) {\n this.initializeResponsiveBehavior();\n }\n },\n \n methods: {\n // Permission checking\n hasPermission(item) {\n // Use custom permission checker if provided\n if (this.permissionChecker) {\n return this.permissionChecker(item, this.userProfile);\n }\n \n // Default role-based checking\n if (!item.roles || item.roles.length === 0) {\n return true; // No role restriction\n }\n \n return item.roles.includes(this.userProfile.role);\n },\n \n // Navigation handling\n handleNavigation(item) {\n this.$emit('navigate', item);\n \n // Default behavior if no custom handler\n if (item.href && !item.preventDefault) {\n if (item.external) {\n window.open(item.href, '_blank');\n } else {\n this.$router?.push(item.href);\n }\n }\n },\n \n // Action handling\n handleAction(item) {\n this.$emit('action', item);\n },\n \n // Item click handling\n handleItemClick(item) {\n this.$emit('item-click', item);\n \n if (item.type === 'dropdown') {\n // Handle dropdown specific logic if needed\n }\n },\n \n // Responsive behavior\n initializeResponsiveBehavior() {\n const sidebarToggle = document.getElementById('sidebarToggle');\n const sidebar = document.getElementById('sidebar');\n const content = document.getElementById('content');\n \n if (!sidebarToggle || !sidebar || !content) return;\n \n // Initial state for desktop\n if (window.innerWidth >= 768) {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n }\n \n // Toggle functionality\n sidebarToggle.addEventListener('click', () => {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n });\n \n // Close sidebar on outside click (mobile)\n document.addEventListener('click', (event) => {\n const isClickInsideSidebar = sidebar.contains(event.target);\n const isClickOnToggleBtn = sidebarToggle.contains(event.target);\n \n if (!isClickInsideSidebar && !isClickOnToggleBtn && \n window.innerWidth < 768 && \n sidebar.classList.contains('active')) {\n sidebar.classList.remove('active');\n content.classList.remove('active');\n }\n });\n }\n },\n \n emits: ['navigate', 'action', 'item-click']\n }\n </script>\n \n <style scoped>\n .left {\n margin-left: 20px;\n }\n \n .black {\n color: black !important;\n }\n \n /* Add any other necessary styles */\n </style>","<template>\n <!-- Fleet Summary -->\n <div class=\"row mb-3\">\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-primary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-check-circle-fill text-primary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Active Vessels</h6>\n <h3 class=\"mt-2 mb-0\">{{ activeVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-secondary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-pause-circle-fill text-secondary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Inactive</h6>\n <h3 class=\"mt-2 mb-0\">{{ inactiveVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <!-- Register New Fleet -->\n <div class=\"col-md-4\" v-if=\"canAddVessel\">\n <div class=\"card border-0 shadow-sm\" @click=\"handleAddVessel\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-success bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-patch-plus-fill text-success fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Add New Vessel</h6>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <h4 class=\"mb-4\"><i class=\"bi bi-ship me-2\"></i>Registered Vessels</h4>\n \n <!-- Loading State -->\n <div v-if=\"loading\" class=\"text-center py-4\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n <p class=\"mt-2\">Loading vessels...</p>\n </div>\n \n <!-- Empty State -->\n <div v-else-if=\"!vessels.length\" class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Empty Fleet!</h4>\n <p>You have an empty fleet, you have not added any vessel yet.</p>\n <hr>\n <p class=\"mb-0\">Click on the add vessel button above, to start adding vessels to your fleet</p>\n </div>\n \n <!-- Vessel Cards -->\n <div v-else class=\"row\">\n <div class=\"col-lg-6\" v-for=\"vessel in vessels\" :key=\"vessel.registrationNumber || vessel.id\">\n <div class=\"vessel-card\" @click=\"handleVesselClick(vessel)\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"vessel-icon left\">\n <i class=\"fas fa-ship\"></i>\n </div>\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <h5 class=\"card-title mb-0\">{{ vessel.name }}</h5>\n <span :class=\"['vessel-status', statusClass(vessel.status)]\">{{ vessel.status }}</span>\n </div>\n <div class=\"row\">\n <div class=\"col-6\">\n <small class=\"text-muted\">Registration #:</small>\n <p class=\"mb-0\">{{ vessel.registrationNumber }}</p>\n </div>\n <div class=\"col-6\">\n <small class=\"text-muted\">Next Maintenance:</small>\n <p class=\"mb-0\">{{ vessel.nextMaintenance || 'Not scheduled' }}</p>\n </div>\n </div>\n </div>\n </div>\n <div class=\"action-icon left delete\">\n <i class=\"bi bi-trash\" @click.stop=\"handleDeleteVessel(vessel)\"></i>\n </div>\n <button class=\"btn btn-primary\" @click.stop=\"handleToggleStatus(vessel)\">\n {{ vessel.status === 'Active' ? 'Mark Inactive' : 'Mark Active' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VesselList',\n \n props: {\n // Required props\n vessels: {\n type: Array,\n required: true,\n default: () => []\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n },\n \n // Optional props\n loading: {\n type: Boolean,\n default: false\n },\n currentRoute: {\n type: String,\n default: 'dashboard' // 'dashboard', 'maintenanceroute', 'crewroute'\n },\n \n // Configuration props\n config: {\n type: Object,\n default: () => ({\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableStatusToggle: true,\n showCertifications: true\n })\n }\n },\n \n emits: [\n 'vessel-add',\n 'vessel-click', \n 'vessel-edit',\n 'vessel-delete',\n 'vessel-toggle-status',\n 'vessel-navigate',\n 'access-denied'\n ],\n \n computed: {\n activeVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Active\").length;\n },\n \n inactiveVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Inactive\").length;\n },\n \n canAddVessel() {\n return this.config.enableAdd && \n (this.userProfile.role === 'owner' || this.userProfile.role === 'staff');\n }\n },\n \n methods: {\n // Event handlers that emit to parent\n handleAddVessel() {\n if (!this.canAddVessel) {\n this.handleAccessDenied('add vessel');\n return;\n }\n this.$emit('vessel-add');\n },\n \n handleVesselClick(vessel) {\n const navigationData = {\n vessel,\n route: this.currentRoute,\n id: vessel.registrationNumber,\n name: vessel.name\n };\n \n if (this.currentRoute === 'dashboard') {\n this.$emit('vessel-click', vessel);\n } else {\n this.$emit('vessel-navigate', navigationData);\n }\n },\n \n handleDeleteVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('delete vessel');\n return;\n }\n \n if (!this.config.enableDelete) {\n return;\n }\n \n this.$emit('vessel-delete', vessel);\n },\n \n handleToggleStatus(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('change vessel status');\n return;\n }\n \n if (!this.config.enableStatusToggle) {\n return;\n }\n \n this.$emit('vessel-toggle-status', vessel);\n },\n \n handleEditVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('edit vessel');\n return;\n }\n \n if (!this.config.enableEdit) {\n return;\n }\n \n this.$emit('vessel-edit', vessel);\n },\n \n handleAccessDenied(action) {\n this.$emit('access-denied', { action, userProfile: this.userProfile });\n },\n \n // Utility methods (keep these in component as they're UI-related)\n statusClass(status) {\n const normalized = status?.toLowerCase() || '';\n return `status-${normalized}`;\n },\n \n grantAccess(vessel) {\n const { role, vessel: userVessel } = this.userProfile;\n \n return role === 'owner' || \n role === 'staff' || \n (role === 'captain' && userVessel === vessel.name);\n },\n \n getDaysToExpiry(expiry_date) {\n if (!expiry_date) return null;\n \n const today = new Date();\n const expiry = new Date(expiry_date);\n const diffTime = expiry - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n return diffDays;\n },\n\n getExpiryClass(expiry_date) {\n const days = this.getDaysToExpiry(expiry_date);\n if (days === null) return '';\n if (days < 30) return 'cert-critical';\n if (days < 90) return 'cert-warning';\n return '';\n }\n }\n}\n</script>\n\n<style>\n.left {\n margin-left: 20px;\n}\n\n.vessel-card {\n background: white;\n border-radius: 10px;\n box-shadow: 0 8px 16px rgba(0, 105, 192, 0.15);\n transition: all 0.3s ease;\n margin-bottom: 20px;\n overflow: hidden;\n border-left: 4px solid var(--accent-color);\n}\n\n.vessel-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 12px 20px rgba(0, 105, 192, 0.2);\n}\n\n.vessel-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 50px;\n height: 50px;\n background-color: #e3f2fd;\n border-radius: 10px;\n color: var(--accent-color);\n font-size: 24px;\n margin-right: 15px;\n}\n\n.black {\n color: black !important;\n}\n\n.action-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border-radius: 20px;\n color: var(--accent-color);\n font-size: 16px;\n margin-right: 15px;\n margin-top: 20px;\n margin-bottom: 10px;\n}\n\n.delete {\n background-color: var(--danger);\n}\n\n.edit {\n background-color: var(--success);\n}\n\n.vessel-status {\n display: inline-block;\n padding: 5px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active {\n background-color: #e8f5e9;\n color: #2e7d32;\n}\n\n.status-maintenance {\n background-color: #fff8e1;\n color: #f57f17;\n}\n\n.status-inactive {\n background-color: #f5f5f5;\n color: #757575;\n}\n</style>","<template>\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <h2 style=\"margin-left: 20px;\">{{ name }}</h2>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary me-2\" @click=\"addUser()\" v-if=\"this.userProfile.role == 'owner'\">\n <i class=\"bi bi-bell\"></i>\n <span class=\"badge bg-danger\">1</span>\n </button>\n <button class=\"btn btn-outline-primary\" @click=\"loggedIn()\">\n <i class=\"bi bi-person-circle\"></i>\n </button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DashHead',\n \n props: {\n name: {\n type: String,\n required: true\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n }\n },\n\n emits: [\n 'add-user',\n 'logged-in'\n ],\n\n methods: {\n addUser() {\n this.$emit('add-user');\n },\n loggedIn() {\n this.$emit('logged-in');\n }\n }\n}\n</script>\n\n<style>\n.page-header {\n margin-bottom: 30px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 15px;\n}\n</style>","<template>\n <div v-if=\"ready\">\n <div>\n <nav v-show=\"!showReport\">\n <button v-for=\"section in sections\" :key=\"section.id\" class=\"nav-btn\"\n :class=\"{ active: activeSection === section.id }\" @click=\"handleSectionClick(section)\">\n {{ section.icon }} {{ section.name }}\n </button>\n </nav>\n \n <div class=\"content\" v-show=\"!showReport\">\n <!-- Maintenance Tasks Form -->\n <section :class=\"['form-section', { active: activeSection === 'maintenance' }]\"\n v-show=\"activeSection === 'maintenance'\">\n <h2>🛠️ Maintenance Tasks</h2>\n <!-- Loading indicator -->\n <div class=\"loading-container\" v-if=\"isLoading\">\n <div class=\"loading-spinner\"></div>\n <p>Loading checklist...</p>\n </div>\n <form v-if=\"!isLoading\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h1>Maintenance Checklist</h1>\n <button v-if=\"showAddTaskButton\" class=\"btn btn-outline-custom\" @click.prevent=\"addTask()\">\n Manually Add Task\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n\n <div class=\"progress-container\">\n <div class=\"progress-info\">\n Progress: {{ progress }}% ({{ completedCount.length }}/{{ checklists.length }})\n </div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: progress + '%' }\"></div>\n </div>\n </div>\n\n <ul class=\"checklist\">\n <li v-for=\"checklist in checklists\" :key=\"checklist.id\" class=\"checklist-item\">\n <div class=\"checkbox\" :class=\"{ 'checked': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n <span v-if=\"checklist.completed\">✓</span>\n </div>\n <span class=\"task-text\" :class=\"{ 'completed': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n {{ checklist.text }}\n </span>\n <button v-if=\"showAddTaskButton\" class=\"delete-btn\" @click=\"deleteTask(checklist.id)\"\n title=\"Delete task\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n\n <div v-if=\"after\">\n <label>Upload Image Evidence</label>\n <ul class=\"checklist\">\n <li class=\"checklist-item\">\n <span class=\"task-text\">\n Image Evidence Already Uploaded\n </span>\n <button type=\"button\" class=\"delete-btn\" @click=\"deleteEvidence()\"\n title=\"Delete Image\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"form-group\" v-else :key=\"refreshKey || 'default'\">\n <label>Upload Image Evidence</label>\n <p>You can only upload one image evidence here.</p>\n <div class=\"attachment-area\">\n <p>{{ fileText }}</p>\n <input type=\"file\" id=\"evidence-files\" class=\"file-input\" @change=\"handleImg\">\n <label for=\"evidence-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"status\" v-if=\"completedCount === checklists.length\">\n All tasks completed! ✅\n </div>\n\n <button class=\"reset-button\" @click.prevent=\"resetTasks\">{{ checklistButtonLabel }}</button>\n </div>\n </form>\n </section>\n\n <!-- Maintenance Schedule Form -->\n <section :class=\"['form-section', { active: activeSection === 'schedule' }]\"\n v-show=\"activeSection === 'schedule'\">\n <h2>📅 Maintenance Schedule</h2>\n <form>\n <div class=\"form-group\">\n <label for=\"task-name\">Task Name</label>\n <input type=\"text\" id=\"task-name\" v-model=\"form.taskName\" required>\n </div>\n\n <div class=\"form-group\">\n <label for=\"task-description\">Description</label>\n <textarea id=\"task-description\" v-model=\"form.description\" required></textarea>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"maintenance-type\">Maintenance Type</label>\n <select id=\"maintenance-type\" v-model=\"form.maintenanceType\" required>\n <option value=\"\">-- Select Type --</option>\n <option value=\"preventive\">Preventive</option>\n <option value=\"corrective\">Corrective</option>\n <option value=\"predictive\">Predictive</option>\n <option value=\"condition\">Condition-Based</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label for=\"component\">Component/System</label>\n <select id=\"component\" v-model=\"form.component\" required>\n <option value=\"\">-- Select Component --</option>\n <option value=\"engine\">Engine</option>\n <option value=\"hull\">Hull</option>\n <option value=\"electronics\">Electronics</option>\n <option value=\"deck\">Deck Machinery</option>\n <option value=\"plumbing\">Plumbing</option>\n <option value=\"electrical\">Electrical</option>\n <option value=\"hvac\">HVAC</option>\n <option value=\"safety\">Safety Systems</option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"form.component === 'Other'\" type=\"text\"\n placeholder=\"Enter custom component/system\" v-model=\"form.customComponent\"\n style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"priority\">Priority</label>\n <select id=\"priority\" v-model=\"form.priority\" required>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"critical\">Critical</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <input type=\"text\" id=\"status\" v-model=\"form.status\" readonly>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"estimated-hours\">Estimated Hours</label>\n <input type=\"number\" id=\"estimated-hours\" v-model=\"form.estimatedHours\" min=\"0\" step=\"0.5\">\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"assigned-to\">Assigned To</label>\n <select id=\"assigned-to\" v-model=\"form.assignedTo\">\n <option value=\"\">-- Select Personnel --</option>\n <option v-for=\"member in vesselCrew\" :key=\"member.id\"\n :value=\"`${member.name} - ${member.role}`\">\n {{ member.name }} - {{ member.role }}\n </option>\n </select>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"recurrence-type\">Recurrence</label>\n <select id=\"recurrence-type\" v-model=\"form.recurrence\" required>\n <option value=\"once\">One-time</option>\n <option value=\"daily\">Daily</option>\n <option value=\"weekly\">Weekly</option>\n <option value=\"monthly\">Monthly</option>\n <option value=\"quarterly\">Quarterly</option>\n <option value=\"semi-annual\">Semi-annually</option>\n <option value=\"annual\">Annually</option>\n <option value=\"custom\">Custom Interval</option>\n </select>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"last-performed\">Last Performed Date</label>\n <input type=\"date\" id=\"last-performed\" v-model=\"form.lastPerformed\">\n </div>\n\n <div class=\"form-group\">\n <label for=\"next-due\">Due Date</label>\n <input type=\"date\" id=\"next-due\" v-model=\"form.nextDue\" required>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Notifications</label>\n <div class=\"checkbox-group\">\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-email\" v-model=\"form.notifyEmail\">\n <label for=\"notify-email\">Email Notification</label>\n </div>\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-sms\" v-model=\"form.notifySms\">\n <label for=\"notify-sms\">SMS Notification</label>\n </div>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"reminder-days\">Reminder (Days Before)</label>\n <select id=\"reminder-days\" v-model=\"form.reminderDays\">\n <option value=\"1\">1 day</option>\n <option value=\"3\">3 days</option>\n <option value=\"7\">1 week</option>\n <option value=\"14\">2 weeks</option>\n <option value=\"30\">1 month</option>\n </select>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"schedule-notes\">Notes</label>\n <textarea id=\"schedule-notes\" v-model=\"form.notes\"></textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Attachments</label>\n <div class=\"attachment-area\">\n <p>{{ imgText }}</p>\n <input type=\"file\" id=\"maintenance-files\" class=\"file-input\" @change=\"handleFiles\" multiple>\n <label for=\"maintenance-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-primary\" @click.prevent=\"saveSchedule\"\n :disabled=\"isSaving\">\n {{ isSaving ? 'Saving...' : 'Save Schedule' }}\n </button>\n </div>\n </form>\n </section>\n\n <!-- Inventory Form -->\n <section :class=\"['form-section', { active: activeSection === 'inventory' }]\"\n v-show=\"activeSection === 'inventory'\">\n <h2>All Maintenance</h2>\n <div class=\"task-table-wrapper\">\n <!-- Filters and Controls -->\n <div class=\"table-controls\">\n <div class=\"filters\">\n <button :class=\"{ active: activeFilter === 'due' }\" @click=\"setFilter('due')\">Due</button>\n <button :class=\"{ active: activeFilter === 'all' }\" @click=\"setFilter('all')\">All</button>\n <button :class=\"{ active: activeFilter === 'completed' }\"\n @click=\"setFilter('completed')\">Completed</button>\n <input type=\"text\" v-model=\"searchQuery\" placeholder=\"Search...\" />\n </div>\n </div>\n\n <!-- Task Table -->\n <table class=\"task-table\">\n <thead>\n <tr>\n <th>Equipment</th>\n <th>Task Name</th>\n <th>Assigned To</th>\n <th>Intervals</th>\n <th>Remaining</th>\n <th>Next Due</th>\n <th>Status</th>\n <th>Action</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"task in filteredTasks\" :key=\"task.id\">\n <td>{{ task.component }}</td>\n <td>{{ task.taskName }}</td>\n <td>{{ task.assignedTo }}</td>\n <td>{{ task.recurrence }}</td>\n <td>{{ task.remainingDays }}</td>\n <td>{{ task.nextDue }}</td>\n <td>\n <span :class=\"['status-badge', task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </td>\n <td>\n <button @click=\"printMaintenance(task.component)\" v-if=\"task.status === 'Completed'\"\n class=\"status-action\">Print</button>\n <button @click=\"showMaintenance(task.component)\" v-else\n class=\"status-action\">Start</button>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Empty schedule -->\n <div v-if=\"!tasks.length\">\n <div class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Such Empty!!!</h4>\n <p>You have no maintenance, because you have not scheduled any for this ship.</p>\n <hr>\n <p class=\"mb-0\">Navigate to the schedule tab, to start scheduling. Or click on this button\n to\n <button type=\"button\" class=\"btn btn-primary\"\n @click=\"switchSchedule()\">Schedule</button>\n </p>\n </div>\n </div>\n </div>\n </section>\n </div>\n\n <div class=\"report-container\" ref=\"reportContainer\" v-show=\"showReport\">\n <div class=\"header\">\n <div class=\"report-title\">MAINTENANCE TASK REPORT</div>\n </div>\n\n <div class=\"report-info\">\n <div class=\"info-box\">\n <div class=\"info-label\">Report Generated:</div>\n <div>{{ reportDate }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Report ID:</div>\n <div>{{ reportId }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Total Tasks:</div>\n <div>{{ maintenanceTasks.length }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Generated By:</div>\n <div>OceanHelm System</div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📊 Task Summary</div>\n <div class=\"summary-grid\">\n <div class=\"summary-card\">\n <div class=\"summary-number\">1</div>\n <div class=\"summary-label\">Completed</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Pending</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Overdue</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">{{ totalEstimatedHours }}</div>\n <div class=\"summary-label\">Total Hours</div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">🔧 Maintenance Tasks</div>\n <div v-for=\"task in maintenanceTasks\" :key=\"task.taskName\"\n :class=\"['task-item', getTaskStatusClass(task)]\">\n\n <div class=\"task-header\">\n <div>\n <div class=\"task-title\">\n {{ task.taskName }}\n <span :class=\"['maintenance-type', 'type-' + task.maintenanceType]\">\n {{ task.maintenanceType }}\n </span>\n </div>\n <div class=\"task-component\">Component: {{ task.component }}</div>\n </div>\n <span :class=\"['status-badge', 'status-' + task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </div>\n\n <div class=\"task-details\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Assigned To</div>\n <div class=\"detail-value\">{{ task.assignedTo }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Estimated Hours</div>\n <div class=\"detail-value\">{{ task.estimatedHours }} hours</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Last Performed</div>\n <div class=\"detail-value\">{{ formatDate(task.lastPerformed) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Next Due</div>\n <div class=\"detail-value\">{{ formatDate(task.nextDue) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Recurrence</div>\n <div class=\"detail-value\">{{ task.recurrence }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Remaining Days</div>\n <div class=\"detail-value\">{{ task.remainingDays }} days</div>\n </div>\n </div>\n\n <div v-if=\"task.description\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Description</div>\n <div class=\"detail-value\">{{ task.description }}</div>\n </div>\n\n <div v-if=\"task.notes\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Notes</div>\n <div class=\"detail-value\">{{ task.notes }}</div>\n </div>\n\n <div v-if=\"task.checklistProgress && task.checklistProgress.length > 0\" class=\"checklist-progress\">\n <div class=\"detail-label\">Checklist Progress</div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: getChecklistProgress(task) + '%' }\"></div>\n </div>\n <div style=\"font-size: 0.9em; color: #666; margin-top: 5px;\">\n {{ getCompletedChecklistItems(task) }} of {{ task.checklistProgress.length }} items\n completed\n ({{ getChecklistProgress(task) }}%)\n </div>\n <div class=\"checklist-items\">\n <div v-for=\"(item, index) in task.checklistProgress\" :key=\"index\" class=\"checklist-item\">\n <span class=\"checklist-icon\">{{ item.completed ? '✅' : '⭕' }}</span>\n <span>{{ item.text || 'Checklist Item ' + (index + 1) }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📋 Recommendations</div>\n <div class=\"info-box\">\n <ul>\n <li v-for=\"recommendation in generateRecommendations()\" :key=\"recommendation\">\n {{ recommendation }}\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div><strong>Report Generated By</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">OceanHelm Maintenance System</div>\n </div>\n <div class=\"signature-box\">\n <div><strong>Date</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">{{ reportDate }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'OceanHelmMaintenance',\n props: {\n vesselInfo: {\n type: Object,\n required: true\n },\n tasks: {\n type: Array,\n default: () => []\n },\n vesselCrew: {\n type: Array,\n default: () => []\n },\n companyInfo: {\n type: Object,\n default: () => ({})\n },\n userProfile: {\n type: Object,\n required: true\n }\n },\n emits: [\n 'dashboard-navigate',\n 'load-checklist',\n 'save-schedule',\n 'update-task',\n 'upload-file',\n 'delete-evidence',\n 'access-denied',\n 'show-message',\n 'generate-checklist'\n ],\n data() {\n return {\n ready: true,\n isSaving: false,\n after: null,\n lastSection: '',\n currentTask: '',\n imgText: 'Choose file to upload',\n fileText: 'Drag and drop files here or',\n fileattachments: {},\n refreshKey: 0,\n activeSection: 'inventory',\n sections: [\n { id: 'schedule', name: 'Schedule', icon: '📅' },\n { id: 'inventory', name: 'All Maintenance', icon: '♻️' },\n {\n id: 'dashboard', \n name: 'Dashboard', \n icon: '☰', \n onClick: () => this.$emit('dashboard-navigate')\n }\n ],\n activeFilter: 'all',\n searchQuery: '',\n checklists: [],\n isLoading: false,\n form: {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n email: '',\n remainingDays: null,\n attachments: {}\n },\n maintenanceTasks: [],\n showReport: false,\n reportDate: new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n }),\n reportId: 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase(),\n };\n },\n watch: {\n 'form.lastPerformed': 'calculateNextDue',\n 'form.recurrence': 'calculateNextDue',\n 'form.nextDue': function (newDate) {\n this.calculateRemainingDays();\n }\n },\n computed: {\n filteredTasks() {\n let result = [...this.tasks];\n if (this.activeFilter === 'all') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon' || task.status === 'Completed');\n }\n else if (this.activeFilter === 'due') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon');\n } else if (this.activeFilter === 'completed') {\n result = result.filter(task => task.status === 'Completed');\n }\n\n if (this.searchQuery) {\n const query = this.searchQuery.toLowerCase();\n result = result.filter(task =>\n task.component.toLowerCase().includes(query) ||\n task.taskName.toLowerCase().includes(query) ||\n task.assignedTo.toLowerCase().includes(query)\n );\n }\n\n return result;\n },\n completedCount() {\n return this.checklists.filter(item => item.completed);\n },\n progress() {\n return Math.round((this.completedCount.length / this.checklists.length) * 100);\n },\n checklistButtonLabel() {\n return this.lastSection === 'schedule' ? 'Approve Maintenance' : 'Save Checklist';\n },\n showAddTaskButton() {\n return this.checklistButtonLabel !== 'Save Checklist';\n },\n totalEstimatedHours() {\n return this.maintenanceTasks.reduce((total, task) => total + (task.estimatedHours || 0), 0);\n },\n },\n methods: {\n grantAccess(vessel) {\n const profile = this.userProfile;\n return profile.role === 'owner' || \n profile.role === 'staff' || \n (profile.role === 'captain' && profile.vessel === vessel);\n },\n deepAccess() {\n const profile = this.userProfile;\n if (profile.role === 'owner' || profile.role === 'captain') {\n return true;\n } else {\n this.$emit('access-denied', 'You do not have access to do this');\n return false;\n }\n },\n deleteTask(taskId) {\n this.checklists = this.checklists.filter(checklist => checklist.id !== taskId);\n },\n addTask(event) {\n if (event) event.preventDefault();\n \n this.$emit('show-message', {\n type: 'prompt',\n title: 'Add New Task',\n message: 'Enter the task details',\n callback: (result) => {\n if (result) {\n const newTask = {\n id: Date.now(),\n text: result,\n completed: false\n };\n this.checklists.push(newTask);\n }\n }\n });\n },\n setFilter(filter) {\n this.activeFilter = filter;\n },\n loadChecklist(taskComponent) {\n this.isLoading = true;\n this.$emit('generate-checklist', {\n component: taskComponent,\n callback: (checklist) => {\n this.checklists = checklist.map(item => ({\n ...item,\n completed: false\n }));\n this.isLoading = false;\n }\n });\n },\n showMaintenance(taskComponent) {\n if (this.deepAccess()) {\n const task = this.tasks.find(t => t.component === taskComponent);\n\n if (task && task.checklistProgress) {\n this.checklists = [...task.checklistProgress];\n } else {\n this.loadChecklist(taskComponent);\n }\n\n this.after = task?.after;\n this.currentTask = taskComponent;\n this.lastSection = 'inventory';\n this.activeSection = 'maintenance';\n }\n },\n printMaintenance(taskComponent) {\n const task = this.tasks.find(t => t.component === taskComponent);\n this.maintenanceTasks = [task];\n this.loadMaintenanceData();\n\n this.showReport = true;\n\n this.$nextTick(() => {\n setTimeout(() => {\n window.print();\n this.showReport = false;\n }, 100);\n });\n },\n switchSchedule() {\n if (this.deepAccess()) {\n this.activeSection = 'schedule';\n }\n },\n handleFiles(event) {\n this.imgText = event.target.files[0].name;\n this.form.attachments = {\n file: event.target.files[0]\n };\n },\n handleImg(event) {\n this.fileText = event.target.files[0].name;\n this.fileattachments = {\n file: event.target.files[0]\n };\n },\n validateForm() {\n const requiredFields = [\n 'taskName',\n 'description',\n 'maintenanceType',\n 'component',\n 'priority',\n 'estimatedHours',\n 'recurrence',\n 'lastPerformed',\n 'assignedTo'\n ];\n\n for (const field of requiredFields) {\n if (!this.form[field]) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Missing info',\n message: `Please fill in the required field: ${field}`\n });\n return false;\n }\n }\n\n return true;\n },\n handleSectionClick(section) {\n this.activeSection = section.id;\n if (typeof section.onClick === 'function') {\n section.onClick();\n }\n },\n calculateNextDue() {\n const date = this.form.lastPerformed ? new Date(this.form.lastPerformed) : null;\n const recurrence = this.form.recurrence;\n\n if (!date || !recurrence) return;\n\n let nextDate = new Date(date);\n\n switch (recurrence) {\n case 'daily':\n nextDate.setDate(nextDate.getDate() + 1);\n break;\n case 'weekly':\n nextDate.setDate(nextDate.getDate() + 7);\n break;\n case 'monthly':\n nextDate.setMonth(nextDate.getMonth() + 1);\n break;\n case 'quarterly':\n nextDate.setMonth(nextDate.getMonth() + 3);\n break;\n case 'semi-annual':\n nextDate.setMonth(nextDate.getMonth() + 6);\n break;\n case 'annual':\n nextDate.setFullYear(nextDate.getFullYear() + 1);\n break;\n case 'once':\n case 'custom':\n return;\n }\n\n this.form.nextDue = nextDate.toISOString().split('T')[0];\n },\n calculateRemainingDays() {\n if (!this.form.nextDue) {\n this.form.remainingDays = null;\n return;\n }\n\n const today = new Date();\n const nextDueDate = new Date(this.form.nextDue);\n\n today.setHours(0, 0, 0, 0);\n nextDueDate.setHours(0, 0, 0, 0);\n\n const diffTime = nextDueDate - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n this.form.remainingDays = `${diffDays} Days`;\n },\n async saveSchedule() {\n this.isSaving = true;\n \n if (!this.validateForm()) {\n this.isSaving = false;\n return;\n }\n\n const taskData = { ...this.form };\n\n if (this.form.component === 'Other' && this.form.customComponent) {\n taskData.component = this.form.customComponent;\n }\n\n taskData.email = this.companyInfo.email;\n\n // Check for duplicate component\n const hasDuplicateComponent = this.tasks.some(task => task.component === taskData.component);\n\n if (hasDuplicateComponent) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Duplicate Component',\n message: `A task with the component \"${taskData.component}\" already exists in maintenance`\n });\n this.isSaving = false;\n return;\n }\n\n delete taskData.customComponent;\n\n this.$emit('save-schedule', {\n taskData,\n file: taskData.attachments.file,\n callback: (success) => {\n this.isSaving = false;\n if (success) {\n this.loadChecklist(taskData.component);\n this.lastSection = 'schedule';\n this.currentTask = taskData.component;\n this.resetForm();\n this.activeSection = 'maintenance';\n }\n }\n });\n },\n resetForm() {\n this.form = {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n remainingDays: null,\n attachments: {}\n };\n },\n toggleTask(task) {\n task.completed = !task.completed;\n },\n async resetTasks() {\n const allCompleted = this.checklists.every(item => item.completed);\n const status = allCompleted ? 'Completed' : 'In Progress';\n \n const updateData = {\n checklistProgress: [...this.checklists],\n status,\n component: this.currentTask,\n after: this.after\n };\n\n this.$emit('update-task', {\n updateData,\n file: this.fileattachments.file,\n callback: (success, updatedAfter) => {\n if (success) {\n if (updatedAfter) {\n this.after = updatedAfter;\n }\n this.fileattachments = {};\n this.fileText = 'Drag and drop files here or';\n this.refreshKey += 1;\n this.activeSection = 'inventory';\n }\n }\n });\n },\n loadMaintenanceData() {\n this.reportId = 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase();\n this.reportDate = new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n },\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n return new Date(dateString).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n },\n getTaskStatusClass(task) {\n if (task.status === 'Completed') return 'completed';\n if (task.status === 'Overdue') return 'overdue';\n if (task.status === 'In Progress') return 'in-progress';\n return 'pending';\n },\n getChecklistProgress(task) {\n if (!task.checklistProgress || task.checklistProgress.length === 0) return 0;\n const completed = task.checklistProgress.filter(item => item.completed).length;\n return Math.round((completed / task.checklistProgress.length) * 100);\n },\n getCompletedChecklistItems(task) {\n if (!task.checklistProgress) return 0;\n return task.checklistProgress.filter(item => item.completed).length;\n },\n generateRecommendations() {\n return [\n 'Maintain regular communication with assigned technicians',\n 'Ensure all safety protocols are followed during maintenance activities',\n 'Update task progress and notes in real-time for accurate reporting'\n ];\n },\n deleteEvidence() {\n this.$emit('delete-evidence', {\n currentTask: this.currentTask,\n callback: (success) => {\n if (success) {\n this.after = null;\n this.fileText = 'Drag and drop files here or';\n this.fileattachments = {};\n this.refreshKey += 1;\n }\n }\n });\n }\n }\n};\n</script>\n\n<style>\n.progress-container {\n margin-bottom: 20px;\n}\n\n.progress-bar {\n background-color: #e9ecef;\n border-radius: 4px;\n height: 10px;\n margin-top: 8px;\n}\n\n.progress-fill {\n background-color: #00a8e8;\n height: 100%;\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.checklist {\n list-style-type: none;\n padding: 0;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 10px 0;\n border-bottom: 1px solid #eee;\n cursor: pointer;\n}\n\n.checkbox {\n margin-right: 15px;\n width: 20px;\n height: 20px;\n border: 2px solid #00a8e8;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.checkbox.checked {\n background-color: #00a8e8;\n color: white;\n}\n\n.task-text {\n flex-grow: 1;\n}\n\n.task-text.completed {\n text-decoration: line-through;\n color: #6c757d;\n}\n\n.status {\n margin-top: 20px;\n font-weight: bold;\n text-align: center;\n}\n\n.reset-button {\n background-color: #005792;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n margin-top: 20px;\n font-weight: bold;\n}\n\n.btn-outline-custom {\n color: #005792;\n /* your custom text color */\n border: 2px solid #005792;\n /* your custom border color */\n background-color: transparent;\n padding: 8px 16px;\n border-radius: 4px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.3s, color 0.3s;\n}\n\n.btn-outline-custom:hover {\n background-color: #005792;\n /* custom hover background */\n color: white;\n /* text color on hover */\n}\n\n.reset-button:hover {\n background-color: #003d5b;\n}\n\nheader {\n background-color: var(--maitprimary);\n color: white;\n padding: 1rem;\n text-align: center;\n border-radius: 5px 5px 0 0;\n}\n\nnav {\n background-color: var(--maitsecondary);\n padding: 10px;\n display: flex;\n justify-content: center;\n}\n\nnav button {\n background-color: var(--maitsecondary);\n color: white;\n border: none;\n padding: 10px 20px;\n margin: 0 5px;\n cursor: pointer;\n font-weight: bold;\n border-radius: 3px;\n transition: background-color 0.3s;\n}\n\nnav button:hover,\nnav button.active {\n background-color: var(--maitprimary);\n}\n\n.content {\n background-color: white;\n padding: 20px;\n border-radius: 0 0 5px 5px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n\nh2 {\n color: var(--dark);\n margin-bottom: 20px;\n border-bottom: 2px solid var(--light);\n padding-bottom: 10px;\n}\n\n.form-section {\n display: none;\n animation: fadeIn 0.5s;\n}\n\n.form-section.active {\n display: block;\n}\n\n.form-row {\n margin-bottom: 15px;\n}\n\n.form-group {\n margin-bottom: 20px;\n}\n\nlabel {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: var(--dark);\n}\n\ninput,\nselect,\ntextarea {\n width: 100%;\n padding: 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 16px;\n}\n\n.input-group {\n display: flex;\n gap: 10px;\n}\n\n.input-group>div {\n flex: 1;\n}\n\ntextarea {\n height: 120px;\n resize: vertical;\n}\n\n.btn {\n padding: 10px 20px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 16px;\n font-weight: bold;\n transition: background-color 0.3s;\n}\n\n.btn-primary {\n background-color: var(--maitprimary);\n color: white;\n}\n\n.btn-primary:hover {\n background-color: var(--dark);\n}\n\n.btn-success {\n background-color: var(--success);\n color: white;\n}\n\n.btn-success:hover {\n background-color: #219653;\n}\n\n.action-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 5px 10px;\n border-radius: 15px;\n font-size: 14px;\n font-weight: bold;\n color: white;\n}\n\n.status-pending {\n background-color: var(--warning);\n}\n\n.status-progress {\n background-color: var(--accent);\n}\n\n.status-completed {\n background-color: var(--success);\n}\n\n.attachment-area {\n border: 2px dashed #ddd;\n padding: 20px;\n text-align: center;\n border-radius: 5px;\n margin-bottom: 20px;\n}\n\n.file-input {\n display: none;\n}\n\n.file-label {\n display: inline-block;\n padding: 10px 20px;\n background-color: var(--accent);\n color: white;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.file-label:hover {\n background-color: var(--maitsecondary);\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.form-section h3 {\n margin-top: 30px;\n margin-bottom: 15px;\n color: var(--maitsecondary);\n}\n\n.checkbox-group {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-top: 10px;\n}\n\n.checkbox-item {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.checkbox-item input {\n width: auto;\n}\n\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n}\n\n.status-action {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n background-color: var(--maitprimary);\n}\n\n.status-badge.overdue {\n background-color: red;\n}\n\n.status-badge.soon {\n background-color: orange;\n}\n\n/* Wrapper layout */\n.task-table-wrapper {\n font-family: 'Inter', sans-serif;\n padding: 1rem;\n}\n\n/* Controls section */\n.table-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n flex-wrap: wrap;\n gap: 1rem;\n}\n\n.filters {\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n}\n\n.filters button,\n.filters input {\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: 1px solid #ccc;\n background-color: #f5f5f5;\n font-weight: 500;\n cursor: pointer;\n}\n\n.filters button.active {\n background-color: #002f6c;\n color: white;\n}\n\n.filters input {\n border: 1px solid #bbb;\n}\n\n.filter-badge {\n background-color: #eee;\n color: #333;\n}\n\n/* Print and Add buttons */\n.table-controls>div:last-child button {\n padding: 0.5rem 1rem;\n border: 1px solid var(--maitprimary);\n border-radius: 6px;\n background-color: white;\n color: var(--maitprimary);\n ;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.table-controls>div:last-child button:last-child {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n/* Table */\n.task-table {\n width: 100%;\n border-collapse: collapse;\n box-shadow: 0 0 0 1px #ccc;\n}\n\n.task-table thead {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n.task-table th,\n.task-table td {\n padding: 0.75rem;\n text-align: left;\n border-bottom: 1px solid #eee;\n white-space: pre-line;\n /* so \\n works */\n}\n\n.task-table tbody tr:hover {\n background-color: #f9f9f9;\n}\n\n/* Status badges */\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 6px;\n font-weight: bold;\n font-size: 0.85rem;\n color: white;\n display: inline-block;\n text-align: center;\n min-width: 90px;\n}\n\n.status-badge.complete {\n background-color: #4dffd0;\n}\n\n.status-badge.soon {\n background-color: #ffa500;\n}\n\n.status-badge.completed {\n background-color: #4caf50;\n}\n\n.delete-btn {\n background: none;\n border: none;\n color: #dc3545;\n cursor: pointer;\n padding: 6px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n opacity: 1;\n margin-left: 8px;\n flex-shrink: 0;\n transform: scale(1.1);\n}\n\n.checklist-item:hover .delete-btn {\n opacity: 1;\n}\n\n.delete-btn:hover {\n background-color: #dc3545;\n color: white;\n transform: scale(1.1);\n}\n\n.delete-btn:active {\n transform: scale(0.95);\n}\n\n.print-only-container {\n text-align: center;\n}\n\n.initial-print-btn {\n background: linear-gradient(135deg, #0066cc, #004499);\n color: white;\n border: none;\n padding: 20px 40px;\n font-size: 1.3em;\n border-radius: 12px;\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 6px 20px rgba(0, 102, 204, 0.3);\n display: flex;\n align-items: center;\n gap: 15px;\n margin: 0 auto;\n}\n\n.initial-print-btn:hover {\n background: linear-gradient(135deg, #004499, #003366);\n transform: translateY(-3px);\n box-shadow: 0 8px 25px rgba(0, 102, 204, 0.4);\n}\n\n.initial-print-btn:active {\n transform: translateY(0);\n}\n\n.company-branding {\n margin-bottom: 30px;\n}\n\n.company-logo {\n font-size: 3em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.company-tagline {\n font-size: 1.1em;\n color: #666;\n}\n\n/* Report Styles - Hidden Initially */\n.report-container {\n display: none;\n max-width: 900px;\n margin: 0 auto;\n background: white;\n padding: 30px;\n border-radius: 10px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.header {\n text-align: center;\n border-bottom: 3px solid #0066cc;\n padding-bottom: 20px;\n margin-bottom: 30px;\n}\n\n.report-logo {\n font-size: 2.5em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.report-title {\n font-size: 1.8em;\n color: #333;\n margin: 10px 0;\n}\n\n.report-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.info-box {\n background: #f8f9fa;\n padding: 15px;\n border-radius: 8px;\n border-left: 4px solid #0066cc;\n}\n\n.info-box ul li {\n margin-left: 15px;\n}\n\n.info-label {\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 5px;\n}\n\n.section {\n margin-bottom: 30px;\n}\n\n.section-title {\n font-size: 1.3em;\n font-weight: bold;\n color: #0066cc;\n border-bottom: 2px solid #e9ecef;\n padding-bottom: 10px;\n margin-bottom: 15px;\n}\n\n.task-item {\n background: #f8f9fa;\n margin: 15px 0;\n padding: 20px;\n border-radius: 8px;\n border-left: 4px solid #28a745;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n}\n\n.task-item.pending {\n border-left-color: #ffc107;\n}\n\n.task-item.overdue {\n border-left-color: #dc3545;\n}\n\n.task-item.in-progress {\n border-left-color: #17a2b8;\n}\n\n.task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 15px;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.task-title {\n font-size: 1.2em;\n font-weight: bold;\n color: #333;\n}\n\n.task-component {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.8em;\n font-weight: bold;\n text-transform: uppercase;\n}\n\n.status-completed {\n background: #d4edda;\n color: #155724;\n}\n\n.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-overdue {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-in-progress {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.task-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin: 15px 0;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-weight: bold;\n font-size: 0.85em;\n color: #0066cc;\n margin-bottom: 3px;\n}\n\n.detail-value {\n font-size: 0.95em;\n color: #333;\n}\n\n.checklist-progress {\n margin-top: 15px;\n}\n\n.progress-bar {\n width: 100%;\n height: 20px;\n background: #e9ecef;\n border-radius: 10px;\n overflow: hidden;\n margin: 10px 0;\n}\n\n.progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #28a745, #20c997);\n transition: width 0.3s ease;\n}\n\n.checklist-items {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 10px;\n margin-top: 10px;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 8px;\n background: white;\n border-radius: 5px;\n font-size: 0.9em;\n}\n\n.checklist-icon {\n margin-right: 8px;\n font-size: 1.1em;\n}\n\n.summary-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 15px;\n margin: 20px 0;\n}\n\n.summary-card {\n background: white;\n padding: 20px;\n border-radius: 8px;\n text-align: center;\n border: 2px solid #e9ecef;\n}\n\n.summary-number {\n font-size: 2em;\n font-weight: bold;\n color: #0066cc;\n}\n\n.summary-label {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.signature-section {\n margin-top: 40px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n}\n\n.signature-box {\n padding-top: 10px;\n text-align: center;\n}\n\n.maintenance-type {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: bold;\n text-transform: uppercase;\n margin-left: 10px;\n}\n\n.type-corrective {\n background: #fff3cd;\n color: #856404;\n}\n\n.type-preventive {\n background: #d4edda;\n color: #155724;\n}\n\n.type-predictive {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n/* Print Styles */\n@media print {\n body {\n background: white;\n padding: 0;\n display: block;\n }\n\n .print-only-container {\n display: none !important;\n }\n\n .report-container {\n display: block !important;\n box-shadow: none;\n padding: 0;\n margin: 0;\n max-width: none;\n }\n}\n</style>","<template>\n <div class=\"activity-logs\">\n <!-- Header -->\n <div class=\"header\">\n <h1>Activity Logs</h1>\n <p>Monitor and track all system activities in real-time</p>\n </div>\n \n <!-- Controls -->\n <div class=\"controls\">\n <div class=\"search-box\">\n <input\n type=\"text\"\n placeholder=\"Search activities, users, or actions...\"\n :value=\"searchTerm\"\n @input=\"$emit('update:searchTerm', $event.target.value)\"\n />\n </div>\n <select\n class=\"filter-select\"\n :value=\"selectedFilter\"\n @change=\"$emit('update:selectedFilter', $event.target.value)\"\n >\n <option value=\"all\">All Activities</option>\n <option value=\"login\">Login</option>\n <option value=\"logout\">Logout</option>\n <option value=\"create\">Create</option>\n <option value=\"update\">Update</option>\n <option value=\"delete\">Delete</option>\n <option value=\"view\">View</option>\n </select>\n <button class=\"btn btn-primary\" @click=\"$emit('refresh')\">🔄 Refresh</button>\n <button class=\"btn btn-secondary\" @click=\"$emit('download')\">📥 Download Report</button>\n </div>\n \n <!-- Stats -->\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <h3>Total Activities</h3>\n <div class=\"value\">{{ totalActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Today's Activities</h3>\n <div class=\"value\">{{ todayActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Active Users</h3>\n <div class=\"value\">{{ activeUsers }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Important</h3>\n <div class=\"badge-danger\">\n Logs are deleted at the end of every month, please download a copy\n </div>\n </div>\n </div>\n \n <!-- Logs Table -->\n <div class=\"logs-container\">\n <div v-if=\"loading\" class=\"loading\">\n <div class=\"spinner\"></div>\n <p>Loading activity logs...</p>\n </div>\n \n <div v-else-if=\"logs.length === 0\" class=\"no-logs\">\n <h3>No activities found</h3>\n <p>Try adjusting your search or filter criteria</p>\n </div>\n \n <div v-else>\n <table class=\"logs-table\">\n <thead>\n <tr>\n <th>Timestamp</th>\n <th>User Name</th>\n <th>Action</th>\n <th>Details</th>\n <th>Section</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"log in paginatedLogs\" :key=\"log.id\">\n <td>{{ formatDate(log.timestamp) }}</td>\n <td>\n <div>{{ log.user_name }}</div>\n <small style=\"color: gray\">{{ log.email }}</small>\n </td>\n <td>\n <span class=\"activity-badge\" :class=\"getBadgeClass(log.action)\">\n {{ log.action }}\n </span>\n </td>\n <td>\n {{ log.details.status }}\n <div v-for=\"(change, key) in log.details.information\" :key=\"key\">\n <strong>{{ key }}: </strong>\n <small style=\"color: gray\">\n {{ change.from || \"\" }} → {{ change.to || change }}\n </small>\n </div>\n </td>\n <td>{{ log.table_name }}</td>\n </tr>\n </tbody>\n </table>\n \n <!-- Pagination -->\n <div class=\"pagination\">\n <button @click=\"$emit('change-page', currentPage - 1)\" :disabled=\"currentPage === 1\">\n Previous\n </button>\n <button\n v-for=\"page in totalPages\"\n :key=\"page\"\n @click=\"$emit('change-page', page)\"\n :class=\"{ active: currentPage === page }\"\n >\n {{ page }}\n </button>\n <button @click=\"$emit('change-page', currentPage + 1)\" :disabled=\"currentPage === totalPages\">\n Next\n </button>\n </div>\n </div>\n </div>\n </div>\n </template>\n \n <script>\n export default {\n name: \"ActivityLogs\",\n props: {\n loading: Boolean,\n searchTerm: String,\n selectedFilter: String,\n logs: Array,\n paginatedLogs: Array,\n totalActivities: Number,\n todayActivities: Number,\n activeUsers: Number,\n totalPages: Number,\n currentPage: Number,\n },\n emits: [\"update:searchTerm\", \"update:selectedFilter\", \"refresh\", \"download\", \"change-page\"],\n methods: {\n formatDate(timestamp) {\n return new Date(timestamp).toLocaleString();\n },\n getBadgeClass(action) {\n const classes = {\n login: \"badge-login\",\n logout: \"badge-logout\",\n create: \"badge-create\",\n update: \"badge-update\",\n delete: \"badge-delete\",\n view: \"badge-view\",\n };\n return classes[action] || \"badge-view\";\n },\n },\n };\n </script>\n \n<style>\n.header {\n background: linear-gradient(135deg, var(--dashprimary-color), var(--dashsecondary-color));\n color: white;\n padding: 2rem 0;\n margin-bottom: 2rem;\n border-radius: 12px;\n box-shadow: 0 10px 30px rgba(52, 153, 64, 0.3);\n}\n\n.header h1 {\n font-size: 2.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n text-align: center;\n}\n\n.header p {\n text-align: center;\n opacity: 0.9;\n font-size: 1.1rem;\n}\n\n.controls {\n display: flex;\n gap: 1rem;\n margin-bottom: 2rem;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.search-box {\n flex: 1;\n min-width: 250px;\n position: relative;\n}\n\n.search-box input {\n width: 100%;\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n transition: all 0.3s ease;\n}\n\n.search-box input:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.filter-select {\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n background: white;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.btn {\n padding: 12px 24px;\n border: none;\n border-radius: 8px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-primary {\n background: var(--primary);\n color: white;\n}\n\n.btn-primary:hover {\n background: var(--primary-dark);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(52, 153, 64, 0.3);\n}\n\n.btn-secondary {\n background: var(--secondary);\n color: var(--dark);\n}\n\n.btn-secondary:hover {\n background: #e6a200;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(244, 180, 0, 0.3);\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n}\n\n.stat-card {\n background: white;\n padding: 1.5rem;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n transition: transform 0.3s ease;\n}\n\n.stat-card:hover {\n transform: translateY(-2px);\n}\n\n.stat-card h3 {\n color: var(--gray);\n font-size: 0.9rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 0.5rem;\n}\n\n.stat-card .value {\n font-size: 2rem;\n font-weight: 700;\n color: var(--dashsecondary-color);\n}\n\n.logs-container {\n background: white;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n}\n\n.logs-header {\n background: var(--light);\n padding: 1.5rem;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.logs-header h2 {\n color: var(--dark);\n font-size: 1.3rem;\n font-weight: 600;\n}\n\n.logs-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.logs-table th,\n.logs-table td {\n padding: 1rem;\n text-align: left;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.logs-table th {\n background: var(--light);\n font-weight: 600;\n color: var(--dark);\n font-size: 0.9rem;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table tr:hover {\n background: #f8f9fa;\n}\n\n.activity-badge {\n padding: 4px 12px;\n border-radius: 20px;\n font-size: 0.8rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.badge-login {\n background: var(--success);\n color: white;\n}\n\n.badge-logout {\n background: var(--gray);\n color: white;\n}\n\n.badge-create {\n background: var(--dashprimary-color);\n color: white;\n}\n\n.badge-update {\n background: var(--warning);\n color: white;\n}\n\n.badge-delete {\n background: var(--danger);\n color: white;\n}\n\n.badge-danger {\n color: var(--danger);\n}\n\n.badge-view {\n background: var(--maitsecondary);\n color: white;\n}\n\n.pagination {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 0.5rem;\n padding: 1.5rem;\n background: var(--light);\n}\n\n.pagination button {\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n background: white;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.pagination button:hover {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button.active {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.no-logs {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.no-logs h3 {\n font-size: 1.5rem;\n margin-bottom: 1rem;\n}\n\n.loading {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.spinner {\n border: 3px solid #f3f3f3;\n border-top: 3px solid var(--primary);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin: 0 auto 1rem;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@media (max-width: 768px) {\n .controls {\n flex-direction: column;\n align-items: stretch;\n }\n\n .search-box {\n min-width: 100%;\n }\n\n .stats-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table {\n font-size: 0.9rem;\n }\n\n .logs-table th,\n .logs-table td {\n padding: 0.5rem;\n }\n}\n</style>","<template>\n <div class=\"crew-management\">\n <!-- Wave background -->\n <div class=\"wave-bg\" v-if=\"config.showWaveBackground\"></div>\n\n <div class=\"crew-section\">\n <div class=\"section-header\">\n <h2>{{ sectionTitle }}</h2>\n <button \n class=\"btn btn-primary\" \n @click=\"handleToggleAddForm\"\n v-if=\"canAddCrew\"\n >\n {{ showAddForm ? 'Cancel' : '+ Add Crew Member' }}\n </button>\n </div>\n\n <!-- Search and Filter -->\n <div class=\"search-filter\">\n <input \n type=\"text\" \n placeholder=\"Search crew by name or role...\" \n v-model=\"searchQuery\"\n @input=\"handleSearch\"\n >\n <select v-model=\"filterStatus\" @change=\"handleFilter\">\n <option value=\"all\">All Statuses</option>\n <option value=\"available\">Available</option>\n <option value=\"onduty\">On Duty</option>\n <option value=\"unavailable\">Unavailable</option>\n </select>\n </div>\n\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"loading-state\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading crew...</span>\n </div>\n <p>Loading crew members...</p>\n </div>\n\n <!-- Crew Grid -->\n <div class=\"crew-grid\" v-else-if=\"filteredCrew.length > 0\">\n <div \n v-for=\"member in filteredCrew\" \n :key=\"member.id\" \n class=\"crew-card\"\n :class=\"{ 'unavailable': member.status === 'unavailable' }\"\n >\n <div :class=\"['status-badge', getStatusClass(member.status)]\">\n {{ formatStatus(member.status) }}\n </div>\n \n <div class=\"crew-name\">{{ member.name }}</div>\n <div class=\"crew-role\">{{ member.role }}</div>\n \n <!-- Certifications -->\n <div class=\"crew-certifications\">\n <div \n v-for=\"cert in member.certifications\" \n :key=\"cert.name\" \n class=\"certification-tag\" \n :class=\"getCertificationClass(cert.expiryDate)\"\n @click=\"handleViewCertification(cert, member)\"\n >\n {{ cert.name }}\n </div>\n <i \n class=\"bi bi-patch-plus-fill icon\" \n @click=\"handleAddCertification(member)\"\n v-if=\"canEditCrew\"\n ></i>\n </div>\n \n <!-- Crew Details -->\n <div class=\"crew-availability\">\n <strong>Embarkation Date:</strong> {{ member.nextShift || 'Not Scheduled' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard (in days):</strong> {{ member.onBoard || 'Not Scheduled' }}\n </div>\n \n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <div v-if=\"member.vessel\" class=\"status-available crew-availability vcard\">\n Vessel: {{ member.vessel }}\n </div>\n <div v-else class=\"status-unavailable crew-availability vcard\">\n Vessel: Unassigned\n </div>\n <button \n class=\"btn btn-primary\"\n @click=\"handleAssignShift(member)\"\n v-if=\"canAssignShift\"\n >\n Assign Shift\n </button>\n </div>\n \n <!-- Delete Button -->\n <i \n class=\"bi bi-trash icon delete-icon\" \n @click=\"handleDeleteCrew(member)\"\n v-if=\"canDeleteCrew\"\n ></i>\n </div>\n </div>\n\n <!-- No Results -->\n <div v-else-if=\"!loading\" class=\"no-results\">\n {{ crew.length === 0 ? 'No crew members found.' : 'No crew members found matching your search criteria.' }}\n </div>\n\n <!-- Add Crew Form -->\n <div class=\"add-crew-form\" v-if=\"showAddForm\">\n <h2>Add New Crew Member</h2>\n \n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-name\">Full Name *</label>\n <input \n type=\"text\" \n id=\"crew-name\" \n v-model=\"newCrew.name\"\n :class=\"{ 'error': formErrors.name }\"\n >\n <div v-if=\"formErrors.name\" class=\"error-message\">{{ formErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"crew-role\">Role/Position *</label>\n <select id=\"crew-role\" v-model=\"newCrew.role\">\n <option v-for=\"role in availableRoles\" :key=\"role\" :value=\"role\">\n {{ role }}\n </option>\n <option value=\"Other\">Other</option>\n </select>\n <input \n v-if=\"newCrew.role === 'Other'\" \n type=\"text\" \n placeholder=\"Enter custom role\" \n v-model=\"newCrew.customRole\"\n style=\"margin-top: 8px;\"\n >\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-status\">Status *</label>\n <select id=\"crew-status\" v-model=\"newCrew.status\">\n <option value=\"available\">Available</option>\n <option value=\"onduty\">On Duty</option>\n <option value=\"unavailable\">Unavailable</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"crew-email\">Email Address *</label>\n <input \n type=\"email\" \n id=\"crew-email\" \n v-model=\"newCrew.email\"\n :class=\"{ 'error': formErrors.email }\"\n >\n <div v-if=\"formErrors.email\" class=\"error-message\">{{ formErrors.email }}</div>\n </div>\n </div>\n\n <!-- Certifications Section -->\n <div class=\"certification-section\">\n <h3>Certifications</h3>\n <div v-for=\"(cert, index) in newCrew.certifications\" :key=\"index\" class=\"certification-entry\">\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Certification Name</label>\n <input type=\"text\" v-model=\"cert.name\" placeholder=\"Enter certification name\">\n </div>\n <div class=\"form-group\">\n <label>Expiry Date</label>\n <input type=\"date\" v-model=\"cert.expiryDate\">\n </div>\n <div class=\"form-group\">\n <button \n type=\"button\" \n class=\"btn btn-danger btn-sm\" \n @click=\"removeCertification(index)\" \n v-if=\"newCrew.certifications.length > 1\"\n >\n Remove\n </button>\n </div>\n </div>\n </div>\n \n <button type=\"button\" class=\"btn btn-secondary btn-sm\" @click=\"addCertificationEntry\">\n + Add More Certification\n </button>\n </div>\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-notes\">Notes</label>\n <textarea id=\"crew-notes\" rows=\"3\" v-model=\"newCrew.notes\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleAddCrewMember\">Add Crew Member</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'CrewManagement',\n \n props: {\n // Required props\n crew: {\n type: Array,\n required: true,\n default: () => []\n },\n vesselName: {\n type: String,\n default: ''\n },\n userProfile: {\n type: Object,\n default: () => ({ role: 'viewer' })\n },\n \n // Optional props\n loading: {\n type: Boolean,\n default: false\n },\n availableRoles: {\n type: Array,\n default: () => ['Captain', 'First Officer', 'Engineer', 'Deckhand', 'Mechanic', 'Cook']\n },\n \n // Configuration props\n config: {\n type: Object,\n default: () => ({\n showWaveBackground: true,\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableAssignShift: true,\n enableCertificationManagement: true\n })\n }\n },\n \n emits: [\n 'crew-add',\n 'crew-edit',\n 'crew-delete',\n 'crew-assign-shift',\n 'crew-add-certification',\n 'crew-view-certification',\n 'search-changed',\n 'filter-changed',\n 'access-denied'\n ],\n \n data() {\n return {\n searchQuery: '',\n filterStatus: 'all',\n showAddForm: false,\n formErrors: {},\n newCrew: {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'available',\n nextShift: '',\n certifications: [{ name: '', expiryDate: '' }],\n notes: '',\n email: '',\n onBoard: ''\n }\n }\n },\n \n computed: {\n sectionTitle() {\n return this.vesselName ? `Current Crew for ${this.vesselName}` : 'All Fleet Crew'\n },\n \n filteredCrew() {\n return this.crew.filter(member => {\n const matchesSearch = this.searchQuery === '' || \n member.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n member.role.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n (member.vessel && member.vessel.toLowerCase().includes(this.searchQuery.toLowerCase()))\n \n const matchesStatus = this.filterStatus === 'all' || member.status === this.filterStatus\n \n return matchesSearch && matchesStatus\n })\n },\n \n canAddCrew() {\n return this.config.enableAdd && this.hasPermission('add')\n },\n \n canEditCrew() {\n return this.config.enableEdit && this.hasPermission('edit')\n },\n \n canDeleteCrew() {\n return this.config.enableDelete && this.hasPermission('delete')\n },\n \n canAssignShift() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n }\n },\n \n methods: {\n // Permission checking\n hasPermission(action) {\n const { role } = this.userProfile\n const permissions = {\n 'owner': ['add', 'edit', 'delete', 'assign', 'view'],\n 'staff': ['add', 'edit', 'assign', 'view'],\n 'captain': ['assign', 'view'],\n 'viewer': ['view']\n }\n return permissions[role]?.includes(action) || false\n },\n \n // Event handlers\n handleToggleAddForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'add crew', userProfile: this.userProfile })\n return\n }\n this.showAddForm = !this.showAddForm\n if (!this.showAddForm) {\n this.resetForm()\n }\n },\n \n handleSearch() {\n this.$emit('search-changed', this.searchQuery)\n },\n \n handleFilter() {\n this.$emit('filter-changed', this.filterStatus)\n },\n \n handleAddCrewMember() {\n if (!this.validateForm()) {\n return\n }\n \n const validCertifications = this.newCrew.certifications.filter(cert => \n cert.name.trim() !== '' && cert.expiryDate !== ''\n )\n \n const finalRole = this.newCrew.role === 'Other' ? this.newCrew.customRole : this.newCrew.role\n \n const newMember = {\n name: this.newCrew.name,\n role: finalRole,\n status: this.newCrew.status,\n certifications: validCertifications,\n notes: this.newCrew.notes,\n vessel: this.vesselName,\n email: this.newCrew.email,\n onBoard: this.newCrew.onBoard,\n nextShift: this.newCrew.nextShift\n }\n \n this.$emit('crew-add', newMember)\n this.resetForm()\n this.showAddForm = false\n },\n \n handleCancelForm() {\n this.showAddForm = false\n this.resetForm()\n },\n \n handleDeleteCrew(member) {\n if (!this.canDeleteCrew) {\n this.$emit('access-denied', { action: 'delete crew', userProfile: this.userProfile })\n return\n }\n \n this.$emit('crew-delete', member)\n },\n \n handleAssignShift(member) {\n if (!this.canAssignShift) {\n this.$emit('access-denied', { action: 'assign shift', userProfile: this.userProfile })\n return\n }\n \n this.$emit('crew-assign-shift', member)\n },\n \n handleAddCertification(member) {\n if (!this.canEditCrew) {\n this.$emit('access-denied', { action: 'add certification', userProfile: this.userProfile })\n return\n }\n \n this.$emit('crew-add-certification', member)\n },\n \n handleViewCertification(certification, member) {\n this.$emit('crew-view-certification', { certification, member })\n },\n \n // Form management\n resetForm() {\n this.newCrew = {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'available',\n nextShift: '',\n certifications: [{ name: '', expiryDate: '' }],\n notes: '',\n email: '',\n onBoard: ''\n }\n this.formErrors = {}\n },\n \n validateForm() {\n this.formErrors = {}\n \n const requiredFields = {\n name: 'Full Name',\n email: 'Email Address'\n }\n \n // Check required fields\n Object.keys(requiredFields).forEach(field => {\n if (!this.newCrew[field] || this.newCrew[field].trim() === '') {\n this.formErrors[field] = `${requiredFields[field]} is required`\n }\n })\n \n // Validate email format\n if (this.newCrew.email && !this.isValidEmail(this.newCrew.email)) {\n this.formErrors.email = 'Please enter a valid email address'\n }\n \n // Validate custom role\n if (this.newCrew.role === 'Other' && (!this.newCrew.customRole || this.newCrew.customRole.trim() === '')) {\n this.formErrors.customRole = 'Custom role is required when \"Other\" is selected'\n }\n \n return Object.keys(this.formErrors).length === 0\n },\n \n isValidEmail(email) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n },\n \n addCertificationEntry() {\n this.newCrew.certifications.push({ name: '', expiryDate: '' })\n },\n \n removeCertification(index) {\n this.newCrew.certifications.splice(index, 1)\n },\n \n // Utility methods\n formatStatus(status) {\n return status ? status.charAt(0).toUpperCase() + status.slice(1) : ''\n },\n \n getStatusClass(status) {\n const statusMap = {\n 'available': 'status-available',\n 'onduty': 'status-onduty',\n 'unavailable': 'status-unavailable'\n }\n return statusMap[status] || ''\n },\n \n getCertificationClass(expiryDate) {\n const status = this.getExpiryStatus(expiryDate)\n const classMap = {\n 'expired': 'text-danger',\n 'expiringSoon': 'text-warning',\n 'valid': 'text-success'\n }\n return classMap[status] || ''\n },\n \n getExpiryStatus(dateStr) {\n if (!dateStr) return 'none'\n\n const expiry = new Date(dateStr)\n const today = new Date()\n const oneMonthFromNow = new Date()\n oneMonthFromNow.setMonth(today.getMonth() + 1)\n\n if (expiry <= today) return 'expired'\n if (expiry <= oneMonthFromNow) return 'expiringSoon'\n return 'valid'\n }\n }\n}\n</script>\n\n<style>\nh1,\nh2 {\n color: #005792;\n}\n\n.crew-section {\n margin-bottom: 30px;\n}\n\n.crew-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.crew-card {\n background-color: #f8f9fa;\n border-radius: 6px;\n padding: 15px;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08);\n border-left: 4px solid #00a8e8;\n position: relative;\n}\n\n.crew-card.unavailable {\n border-left-color: #dc3545;\n opacity: 0.8;\n}\n\n.crew-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 5px;\n color: #005792;\n}\n\n.crew-role {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 10px;\n}\n\n.crew-certifications,\n.crew-availability {\n font-size: 0.85em;\n margin: 5px 0;\n}\n\n.certification-tag {\n display: inline-block;\n background-color: #e6f7ff;\n color: #005792;\n border-radius: 4px;\n padding: 2px 8px;\n margin-right: 5px;\n margin-bottom: 5px;\n font-size: 0.85em;\n}\n\n.status-badge {\n position: absolute;\n top: 15px;\n right: 15px;\n font-size: 0.75em;\n padding: 3px 8px;\n border-radius: 12px;\n font-weight: bold;\n}\n\n.status-available {\n background-color: #d4edda;\n color: #155724;\n}\n\n.status-unavailable {\n background-color: #f8d7da;\n color: #721c24;\n}\n\n.status-onduty {\n background-color: #cce5ff;\n color: #004085;\n}\n\n.action-buttons {\n display: flex;\n justify-content: space-between;\n margin-top: 15px;\n}\n\n.btn {\n padding: 6px 12px;\n border-radius: 4px;\n border: none;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n}\n\n.btn-primary {\n background-color: #005792;\n color: white;\n}\n\n.btn-primary:hover {\n background-color: #004675;\n}\n\n.btn-secondary {\n background-color: #e9ecef;\n color: #495057;\n}\n\n.btn-secondary:hover {\n background-color: #dde2e6;\n}\n\n.search-filter {\n display: flex;\n margin-bottom: 20px;\n gap: 10px;\n}\n\n.search-filter input,\n.search-filter select {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.search-filter input {\n flex-grow: 1;\n}\n\n.search-filter select {\n width: 30%;\n}\n\n.add-crew-form {\n background-color: #f8f9fa;\n padding: 20px;\n border-radius: 6px;\n margin-top: 30px;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-bottom: 15px;\n}\n\n.form-group {\n flex: 1;\n min-width: 200px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: #495057;\n}\n\n.text-danger {\n color: red;\n font-weight: bolder;\n}\n\n.text-warning {\n color: orange;\n font-weight: bolder;\n}\n\n.text-success {\n color: green;\n font-weight: bolder;\n}\n\n.icon {\n font-size: 20px;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n width: 100%;\n padding: 8px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.no-results {\n text-align: center;\n padding: 20px;\n color: #6c757d;\n}\n\n.section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.vcard {\n border-radius: 6px;\n padding: 5px;\n}\n\n#content.active {\n margin-left: var(--sidebar-width);\n width: calc(100% - var(--sidebar-width));\n}\n</style>","// ===== src/utils/sidebarConfig.js =====\nexport const createSidebarConfig = (options = {}) => {\n return {\n brandName: options.brandName || 'OceanHelm',\n logoIcon: options.logoIcon || 'bi bi-water',\n showLogo: options.showLogo !== false,\n responsive: options.responsive !== false,\n ...options\n }\n}\n\nexport const defaultMenuItems = [\n {\n type: 'link',\n label: 'Dashboard',\n icon: 'bi bi-speedometer2',\n href: '/app/dashboard',\n active: true\n },\n {\n type: 'link',\n label: 'Activity Log',\n icon: 'bi bi-activity',\n href: '/activity-log',\n roles: ['owner'] // Role-based visibility\n },\n {\n type: 'text',\n label: 'Services'\n },\n {\n type: 'button',\n label: 'Maintenance',\n icon: 'bi bi-tools',\n action: 'maintenance'\n },\n {\n type: 'dropdown',\n label: 'Crew Management',\n icon: 'bi bi-people',\n children: [\n {\n label: 'All Crew',\n action: 'crew-all',\n roles: ['owner', 'staff']\n },\n {\n type: 'separator'\n },\n {\n label: 'Get Crew by Vessel',\n action: 'crew-by-vessel'\n }\n ]\n },\n {\n type: 'link',\n label: 'Inventory Management',\n icon: 'bi bi-clipboard-data',\n href: '/app/inventory'\n },\n {\n type: 'link',\n label: 'Requisition Processing',\n icon: 'bi bi-calendar-check',\n href: '/app/requisition'\n },\n {\n type: 'button',\n label: 'Voyage Manager',\n icon: 'fas fa-ship',\n action: 'coming-soon'\n },\n {\n type: 'button',\n label: 'Settings',\n icon: 'bi bi-gear',\n action: 'settings',\n roles: ['owner', 'staff']\n },\n {\n type: 'button',\n label: 'Help & Support',\n icon: 'bi bi-question-circle',\n action: 'help'\n }\n]","// ===== src/utils/permissions.js =====\nexport const defaultPermissionChecker = (item, userProfile) => {\n // No role restrictions\n if (!item.roles || item.roles.length === 0) {\n return true\n }\n\n // Check if user role is in allowed roles\n return item.roles.includes(userProfile?.role)\n}","// src/index.js - Library entry point\nimport ConfigurableSidebar from './components/ConfigurableSidebar.vue'\nimport VesselList from './components/VesselList.vue'\nimport DashHead from './components/DashHead.vue' \nimport OceanHelmMaintenance from './components/OceanHelmMaintenance.vue'\nimport ActivityLogs from './components/ActivityLogs.vue'\nimport CrewManagement from './components/CrewManagement.vue'\nimport { createSidebarConfig, defaultMenuItems } from './utils/sidebarConfig'\nimport { defaultPermissionChecker } from './utils/permissions'\n\n// Export main components\nexport { ConfigurableSidebar, VesselList, DashHead, CrewManagement, ActivityLogs, OceanHelmMaintenance }\n\n// Export utilities\nexport { createSidebarConfig, defaultMenuItems, defaultPermissionChecker }\n\n// Export types for TypeScript users\nexport * from './types'\n\n// Default export for plugin-style usage\nexport default {\n install(app, options = {}) {\n app.component('ConfigurableSidebar', ConfigurableSidebar)\n app.component('VesselList', VesselList)\n app.component('DashHead', DashHead)\n app.component('ActivityLogs', ActivityLogs)\n app.component('CrewManagement', CrewManagement)\n app.component('DashHead', OceanHelmMaintenance)\n\n // Provide global configuration\n app.provide('sidebarConfig', options)\n }\n}"],"names":["_sfc_main","item","_a","sidebarToggle","sidebar","content","event","isClickInsideSidebar","isClickOnToggleBtn","_hoisted_2","_createElementBlock","$options","$props","_openBlock","_hoisted_1","_createElementVNode","_normalizeClass","_Fragment","_renderList","index","$event","_withModifiers","_toDisplayString","_hoisted_6","_hoisted_7","subItem","subIndex","_hoisted_8","_hoisted_9","_hoisted_10","_renderSlot","_ctx","vessel","navigationData","action","status","role","userVessel","expiry_date","today","diffTime","days","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_cache","args","_hoisted_11","_hoisted_13","_hoisted_26","_hoisted_12","newDate","result","task","query","total","profile","taskId","checklist","newTask","filter","taskComponent","t","requiredFields","field","section","date","recurrence","nextDate","nextDueDate","diffDays","taskData","success","updateData","updatedAfter","dateString","completed","_hoisted_25","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_57","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_85","_hoisted_87","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_97","$data","_withDirectives","_hoisted_14","_vModelText","_vModelSelect","member","_hoisted_32","_vModelCheckbox","_hoisted_48","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_58","_hoisted_84","_hoisted_86","_hoisted_88","_normalizeStyle","recommendation","timestamp","log","_createTextVNode","change","key","page","matchesSearch","matchesStatus","validCertifications","cert","finalRole","newMember","certification","email","expiryDate","dateStr","expiry","oneMonthFromNow","createSidebarConfig","options","defaultMenuItems","defaultPermissionChecker","userProfile","app","ConfigurableSidebar","VesselList","DashHead","ActivityLogs","CrewManagement","OceanHelmMaintenance"],"mappings":"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"}