import { defineComponent, ref, computed, unref, useSSRContext } from "vue"; import { ssrRenderAttrs, ssrInterpolate, ssrRenderClass, ssrRenderList, ssrIncludeBooleanAttr, ssrRenderAttr } from "vue/server-renderer"; import "/app/node_modules/hookable/dist/index.mjs"; import "/app/node_modules/klona/dist/index.mjs"; import { d as useI18n } from "../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 { t: $t } = useI18n(); const loading = ref(true); const error = ref(null); const roles = ref([]); const permissions = ref([]); const activeDomain = ref("__all__"); const filteredRoleIds = ref(/* @__PURE__ */ new Set()); const modifiedRoles = ref(/* @__PURE__ */ new Map()); ref(/* @__PURE__ */ new Map()); const saveNotification = ref(null); const domainOptions = computed(() => { const domains = new Set(permissions.value.map((p) => p.domain)); const options = [ { value: "__all__", label: $t("permissions.all_domains") } ]; for (const domain of Array.from(domains).sort()) { options.push({ value: domain, label: domain.charAt(0).toUpperCase() + domain.slice(1) }); } return options; }); const filteredDomains = computed(() => { const domains = new Set(permissions.value.map((p) => p.domain)); const sorted = Array.from(domains).sort(); if (activeDomain.value === "__all__") return sorted; return sorted.filter((d) => d === activeDomain.value); }); const filteredPermissions = computed(() => { if (activeDomain.value === "__all__") return permissions.value; return permissions.value.filter((p) => p.domain === activeDomain.value); }); const filteredRoles = computed(() => { if (filteredRoleIds.value.size === 0) return roles.value; return roles.value.filter((r) => filteredRoleIds.value.has(r.id)); }); const hasModifications = computed(() => { return modifiedRoles.value.size > 0; }); function roleHeaderClass(role) { if (role.rank >= 100) return "bg-purple-500/20 text-purple-300"; if (role.rank >= 80) return "bg-indigo-500/20 text-indigo-300"; if (role.rank >= 50) return "bg-cyan-500/20 text-cyan-300"; return "bg-slate-500/20 text-slate-300"; } function domainColorClass(domain) { const colorMap = { fleet: "text-emerald-400", user: "text-sky-400", finance: "text-amber-400", permissions: "text-purple-400", system: "text-rose-400", service: "text-teal-400", organization: "text-orange-400", vehicle: "text-cyan-400", subscription: "text-pink-400", moderation: "text-violet-400" }; return colorMap[domain] || "text-slate-400"; } function getCellClass(role, perm) { if (isRoleLocked(role)) { return isPermEnabled(role.id, perm.id) ? "bg-purple-900/10" : "bg-purple-900/5"; } if (isPermEnabled(role.id, perm.id)) return "bg-emerald-900/10"; return ""; } function formatPermissionLabel(perm) { return perm.code.replace(/:/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()); } function getToggleClass(role, perm) { const enabled = isPermEnabled(role.id, perm.id); const locked = isRoleLocked(role); const baseClasses = "peer-focus:outline-none peer-focus:ring-2"; if (locked) { if (enabled) { return `${baseClasses} bg-emerald-600 peer-focus:ring-emerald-500/50 after:translate-x-full after:border-white`; } return `${baseClasses} bg-slate-600`; } if (enabled) { return `${baseClasses} bg-emerald-600 peer-focus:ring-emerald-500/50 peer-checked:after:translate-x-full peer-checked:after:border-white`; } return `${baseClasses} bg-slate-600 peer-focus:ring-indigo-500/50 peer-checked:after:translate-x-full peer-checked:after:border-white peer-checked:bg-indigo-600`; } function getDomainPermissions(domain) { return filteredPermissions.value.filter((p) => p.domain === domain); } function isPermEnabled(roleId, permissionId) { if (modifiedRoles.value.has(roleId)) { const rolePerms = modifiedRoles.value.get(roleId); return rolePerms.has(permissionId); } const role = roles.value.find((r) => r.id === roleId); return role ? role.permission_ids.includes(permissionId) : false; } function isRoleLocked(role) { return role.is_system && role.rank >= 100; } return (_ctx, _push, _parent, _attrs) => { _push(`

${ssrInterpolate(unref($t)("permissions.title"))}

${ssrInterpolate(unref($t)("permissions.subtitle"))}

`); if (loading.value) { _push(`
${ssrInterpolate(unref($t)("permissions.loading"))}
`); } else if (error.value) { _push(`

${ssrInterpolate(unref($t)("permissions.error_title"))}

${ssrInterpolate(error.value)}

`); } else { _push(``); if (saveNotification.value) { _push(`
${ssrInterpolate(saveNotification.value.message)}
`); } else { _push(``); } _push(`
`); ssrRenderList(domainOptions.value, (domain) => { _push(``); }); _push(`
`); ssrRenderList(roles.value, (role) => { _push(``); }); _push(`
`); if (hasModifications.value) { _push(`
${ssrInterpolate(unref($t)("permissions.modified_count", { count: modifiedRoles.value.size }))}
`); } else { _push(``); } _push(`
`); ssrRenderList(filteredRoles.value, (role) => { _push(``); }); _push(``); ssrRenderList(filteredDomains.value, (domain) => { _push(``); ssrRenderList(filteredRoles.value, (role) => { _push(``); }); _push(``); ssrRenderList(getDomainPermissions(domain), (perm) => { _push(``); ssrRenderList(filteredRoles.value, (role) => { _push(``); }); _push(``); }); _push(``); }); _push(``); if (filteredPermissions.value.length === 0) { _push(`${ssrInterpolate(unref($t)("permissions.no_permissions"))}`); } else { _push(``); } _push(`
${ssrInterpolate(unref($t)("permissions.permission"))}
${ssrInterpolate(role.name)}Rank ${ssrInterpolate(role.rank)}`); if (role.is_system) { _push(`system`); } else { _push(``); } _push(`
${ssrInterpolate(domain)} (${ssrInterpolate(getDomainPermissions(domain).length)})
${ssrInterpolate(formatPermissionLabel(perm))}${ssrInterpolate(perm.code)}`); if (perm.description) { _push(`${ssrInterpolate(perm.description)}`); } else { _push(``); } _push(`
`); if (hasModifications.value) { _push(`
${ssrInterpolate(unref($t)("permissions.modified_count", { count: modifiedRoles.value.size }))}
`); } else { _push(``); } _push(``); } _push(``); }; } }); const _sfc_setup = _sfc_main.setup; _sfc_main.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/permissions/index.vue"); return _sfc_setup ? _sfc_setup(props, ctx) : void 0; }; export { _sfc_main as default }; //# sourceMappingURL=index-DgwDY6Ie.js.map