import { defineComponent, ref, computed, useSSRContext } from "vue"; import { ssrRenderAttrs, ssrInterpolate, ssrRenderClass, ssrRenderList, ssrIncludeBooleanAttr } from "vue/server-renderer"; import "/app/node_modules/hookable/dist/index.mjs"; import "/app/node_modules/klona/dist/index.mjs"; import "../server.mjs"; import "/app/node_modules/ofetch/dist/node.mjs"; import "#internal/nuxt/paths"; import "/app/node_modules/unctx/dist/index.mjs"; import "/app/node_modules/h3/dist/index.mjs"; import "pinia"; import "/app/node_modules/defu/dist/defu.mjs"; import "vue-router"; import "/app/node_modules/ufo/dist/index.mjs"; import "/app/node_modules/cookie-es/dist/index.mjs"; import "/app/node_modules/destr/dist/index.mjs"; import "/app/node_modules/ohash/dist/index.mjs"; import "/app/node_modules/@unhead/vue/dist/index.mjs"; import "@vue/devtools-api"; const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "index", __ssrInlineRender: true, setup(__props) { const loading = ref(true); const error = ref(null); const featureFlags = ref({ tier: "free", features: {}, expires_at: null }); const permissionMatrix = ref([]); const allActions = ref([]); const modifiedPermissions = ref(/* @__PURE__ */ new Map()); ref(/* @__PURE__ */ new Map()); const saveNotification = ref(null); const featureEntries = computed(() => { return Object.entries(featureFlags.value.features || {}); }); const hasModifications = computed(() => { return modifiedPermissions.value.size > 0; }); const tierBadgeClass = computed(() => { const tier = featureFlags.value.tier; if (tier === "enterprise") return "bg-purple-500/20 text-purple-300"; if (tier === "premium") return "bg-amber-500/20 text-amber-300"; return "bg-slate-500/20 text-slate-300"; }); const superadminPerms = [ { key: "user_mgmt", label: "User Management", enabled: true }, { key: "billing_admin", label: "Billing Administration", enabled: true }, { key: "robot_config", label: "Robot Configuration", enabled: true }, { key: "system_logs", label: "System Logs Access", enabled: true }, { key: "api_keys", label: "API Key Management", enabled: false } ]; const garagePerms = [ { key: "vehicle_crud", label: "Vehicle CRUD", enabled: true }, { key: "service_booking", label: "Service Booking", enabled: true }, { key: "customer_view", label: "Customer Data View", enabled: true }, { key: "report_export", label: "Report Export", enabled: false }, { key: "bulk_import", label: "Bulk Import", enabled: false } ]; function isPermEnabled(group, key) { const mapKey = `${group}:${key}`; if (modifiedPermissions.value.has(mapKey)) { return modifiedPermissions.value.get(mapKey); } const perms = group === "superadmin" ? superadminPerms : garagePerms; const perm = perms.find((p) => p.key === key); return perm ? perm.enabled : false; } function formatFeatureLabel(key) { return key.replace(/^cost_category:/, "").replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()); } function formatDate(dateStr) { try { const d = new Date(dateStr); return d.toLocaleDateString("en-GB", { day: "numeric", month: "short", year: "numeric" }); } catch { return dateStr; } } function hasPermission(role, action) { return role.actions.includes(action); } return (_ctx, _push, _parent, _attrs) => { _push(`
${ssrInterpolate(_ctx.$t("permissions.subtitle"))}
${ssrInterpolate(error.value)}
${ssrInterpolate(_ctx.$t("permissions.superadmin_desc"))}
${ssrInterpolate(_ctx.$t("permissions.garages_desc"))}
${ssrInterpolate(_ctx.$t("permissions.feature_flags_desc", { tier: featureFlags.value.tier || "free" }))}
${ssrInterpolate(_ctx.$t("permissions.rbac_desc"))}
| ${ssrInterpolate(_ctx.$t("permissions.action"))} | `); ssrRenderList(permissionMatrix.value, (role) => { _push(`${ssrInterpolate(role.role)} | `); }); _push(`
|---|---|
| ${ssrInterpolate(action)} | `); ssrRenderList(permissionMatrix.value, (role) => { _push(``); if (hasPermission(role, action)) { _push(``); } else { _push(``); } _push(` | `); }); _push(`