update frontend lib : remove histoire (obselete) + update vitest - #1815

This commit is contained in:
Laurent GAY
2025-10-24 13:00:15 +02:00
committed by setop
parent ffa3e0ebd7
commit d971fd77af
192 changed files with 4767 additions and 5300 deletions

View File

@@ -1,49 +0,0 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient, requestHandlers } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import CreateView from "@/views/Group/CreateView.vue";
import { CREATE_GROUP } from "@/graphql/group";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = () => {
const global_data = getMockClient([CREATE_GROUP]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(CreateView, {
props: {},
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("CreateView", () => {
it("Show simple", async () => {
const wrapper = generateWrapper();
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(0);
});
});

View File

@@ -0,0 +1,111 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import GroupCard from "@/components/Group/GroupCard.vue";
import { IGroup } from "@/types/actor";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const basicGroup: IGroup = {
name: "Framasoft",
preferredUsername: "framasoft",
avatar: null,
domain: "mobilizon.fr",
url: "",
summary: "",
suspended: false,
members: { total: 0, elements: [] },
followers: { total: 0, elements: [] },
};
const groupWithMedia: IGroup = {
...basicGroup,
banner: {
url: "https://mobilizon.fr/media/a8227a16cc80b3d20ff5ee549a29c1b20a0ca1547f8861129aae9f00c3c69d12.jpg?name=framasoft%27s%20banner.jpg",
},
avatar: {
url: "https://mobilizon.fr/media/890f5396ef80081a6b1b18a5db969746cf8bb340e8a4e657d665e41f6646c539.jpg?name=framasoft%27s%20avatar.jpg",
},
};
const groupWithFollowersOrMembers: IGroup = {
...groupWithMedia,
members: { total: 2, elements: [] },
followers: { total: 5, elements: [] },
summary:
"You can also use variant modifiers to target media queries like responsive breakpoints, dark mode, prefers-reduced-motion, and more. For example, use md:h-full to apply the h-full utility at only medium screen sizes and above.",
physicalAddress: {
description: "Nantes",
},
};
const generateWrapper = (props: any = {}) => {
const global_data = getMockClient([]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(GroupCard, {
props: props,
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("GroupCard", () => {
it("Show Empty", async () => {
const wrapper = generateWrapper({
group: basicGroup,
});
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
});
it("Show With media", async () => {
const wrapper = generateWrapper({
group: groupWithMedia,
});
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
});
it("Show with followers or members", async () => {
const wrapper = generateWrapper({
group: groupWithFollowersOrMembers,
});
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
});
it("Show Row mode", async () => {
const wrapper = generateWrapper({
group: groupWithFollowersOrMembers,
mode: "row",
});
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
});
});

View File

@@ -1,58 +0,0 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient, requestHandlers } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import GroupFollowers from "@/views/Group/GroupFollowers.vue";
import { GROUP_FOLLOWERS, UPDATE_FOLLOWER } from "@/graphql/followers";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = () => {
const global_data = getMockClient([GROUP_FOLLOWERS, UPDATE_FOLLOWER]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(GroupFollowers, {
props: {
preferredUsername: "my-group",
},
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("GroupFollowers", () => {
it("Show simple", async () => {
const wrapper = generateWrapper();
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_1).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_0).toHaveBeenCalledWith({
approved: true,
followersLimit: 10,
followersPage: 1,
name: "my-group",
});
});
});

View File

@@ -0,0 +1,120 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import GroupMemberCard from "@/components/Group/GroupMemberCard.vue";
import { IActor } from "@/types/actor";
import { IMember } from "@/types/actor/member.model";
import { MemberRole } from "@/types/enums";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = (props: any) => {
const global_data = getMockClient([]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(GroupMemberCard, {
props: props,
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
const baseActorAvatar = {
id: "",
name: "",
alt: "",
metadata: {},
url: "https://social.tcit.fr/system/accounts/avatars/000/000/001/original/a28c50ce5f2b13fd.jpg",
};
const basePerson: IActor = {
name: "Thomas Citharel",
preferredUsername: "tcit",
avatar: baseActorAvatar,
domain: null,
url: "",
summary: "",
suspended: false,
};
const basicGroup: IActor = {
name: "Framasoft",
preferredUsername: "framasoft",
avatar: {
url: "https://mobilizon.fr/media/ff5b2d425fb73e17fcbb56a1a032359ee0b21453c11af59e103e783817a32fdf.png?name=framasoft%27s%20avatar.png",
},
domain: "mobilizon.fr",
url: "",
summary: `<p><strong>La Fediverse</strong>, <strong>c'est la <em><u>Féd</u>ération qui englobe l'Un<u>ivers</u> des réseaux sociaux libres et décentralisés,</em> </strong>dont Mobilizon (évènements), Mastodon (microblog), Peertube (vidéos), Pixelfed (photos), Funkwhale (musique), Matrix (messagerie instantanée)... et tant d'autres font partie.</p><p><strong>Et "La Fediverse <em>Nantaise</em>" est un collectif cherchant à faire connaître localement tout le potentiel de ces réseaux ! :-)</strong></p>`,
suspended: false,
members: { total: 0, elements: [] },
followers: { total: 0, elements: [] },
};
const basicMember: IMember = {
parent: basicGroup as IActor,
actor: basePerson,
role: MemberRole.MEMBER,
};
const moderatorMember: IMember = {
parent: basicGroup,
actor: basePerson,
role: MemberRole.MODERATOR,
};
const adminMember: IMember = {
parent: basicGroup,
actor: basePerson,
role: MemberRole.ADMINISTRATOR,
};
describe("GroupMemberCard", () => {
it("Show simple member", async () => {
const wrapper = generateWrapper({
member: basicMember,
});
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
});
it("Show moderator", async () => {
const wrapper = generateWrapper({
member: moderatorMember,
});
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
});
it("Show administrator", async () => {
const wrapper = generateWrapper({
member: adminMember,
});
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
});
});

View File

@@ -1,73 +0,0 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient, requestHandlers } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import GroupMembers from "@/views/Group/GroupMembers.vue";
import {
INVITE_MEMBER,
GROUP_MEMBERS,
REMOVE_MEMBER,
UPDATE_MEMBER,
APPROVE_MEMBER,
} from "@/graphql/member";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = () => {
const global_data = getMockClient([
INVITE_MEMBER,
GROUP_MEMBERS,
REMOVE_MEMBER,
UPDATE_MEMBER,
APPROVE_MEMBER,
]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(GroupMembers, {
props: {
preferredUsername: "my-group",
},
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("GroupMembers", () => {
it("Show simple", async () => {
const wrapper = generateWrapper();
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_1).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_2).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_3).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_4).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_1).toHaveBeenCalledWith({
groupName: "my-group",
limit: 10,
page: 1,
roles: undefined,
});
});
});

View File

@@ -1,56 +0,0 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient, requestHandlers } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import GroupSettings from "@/views/Group/GroupSettings.vue";
import { FETCH_GROUP_PUBLIC } from "@/graphql/group";
import { DELETE_GROUP } from "@/graphql/group";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = () => {
const global_data = getMockClient([FETCH_GROUP_PUBLIC, DELETE_GROUP]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(GroupSettings, {
props: {
preferredUsername: "my-group",
},
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("GroupSettings", () => {
it("Show simple", async () => {
const wrapper = generateWrapper();
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_1).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_0).toHaveBeenCalledWith({
name: "my-group",
});
});
});

View File

@@ -1,79 +0,0 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient, requestHandlers } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import GroupView from "@/views/Group/GroupView.vue";
import { FETCH_GROUP_PUBLIC } from "@/graphql/group";
import { JOIN_GROUP } from "@/graphql/member";
import {
GROUP_MEMBERSHIP_SUBSCRIPTION_CHANGED,
PERSON_STATUS_GROUP,
} from "@/graphql/actor";
import {
FOLLOW_GROUP,
UNFOLLOW_GROUP,
UPDATE_GROUP_FOLLOW,
} from "@/graphql/followers";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = () => {
const global_data = getMockClient([
FETCH_GROUP_PUBLIC,
JOIN_GROUP,
GROUP_MEMBERSHIP_SUBSCRIPTION_CHANGED,
PERSON_STATUS_GROUP,
FOLLOW_GROUP,
UNFOLLOW_GROUP,
UPDATE_GROUP_FOLLOW,
]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(GroupView, {
props: {
preferredUsername: "my-group",
},
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("GroupView", () => {
it("Show simple", async () => {
const wrapper = generateWrapper();
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_1).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_2).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_3).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_4).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_5).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_6).toHaveBeenCalledTimes(0);
expect(requestHandlers.handle_0).toHaveBeenCalledWith({
name: "my-group",
afterDateTime: new Date("2022-02-02T02:04:00.000Z"),
});
});
});

View File

@@ -1,51 +0,0 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient, requestHandlers } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import MyGroups from "@/views/Group/MyGroups.vue";
import { LOGGED_USER_MEMBERSHIPS } from "@/graphql/actor";
import { LEAVE_GROUP } from "@/graphql/group";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = () => {
const global_data = getMockClient([LOGGED_USER_MEMBERSHIPS, LEAVE_GROUP]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(MyGroups, {
props: {},
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("MyGroups", () => {
it("Show simple", async () => {
const wrapper = generateWrapper();
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_1).toHaveBeenCalledTimes(0);
});
});

View File

@@ -1,49 +0,0 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, shallowMount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import SettingsView from "@/views/Group/SettingsView.vue";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = () => {
const global_data = getMockClient([]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return shallowMount(SettingsView, {
props: {
preferredUsername: "my-group",
},
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("SettingsView", () => {
it("Show simple", async () => {
const wrapper = generateWrapper();
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
});
});

View File

@@ -1,58 +0,0 @@
import { beforeEach, describe, it, expect } from "vitest";
import { enUS } from "date-fns/locale";
import { routes } from "@/router";
import { createRouter, createWebHistory, Router } from "vue-router";
import { config, mount } from "@vue/test-utils";
import { Oruga } from "@oruga-ui/oruga-next";
import flushPromises from "flush-promises";
import { getMockClient, requestHandlers } from "../../mocks/client";
import { htmlRemoveId } from "../../common";
import TimelineView from "@/views/Group/TimelineView.vue";
import { GROUP_TIMELINE } from "@/graphql/group";
config.global.plugins.push(Oruga);
let router: Router;
beforeEach(async () => {
router = createRouter({
history: createWebHistory(),
routes: routes,
});
// await router.isReady();
});
const generateWrapper = () => {
const global_data = getMockClient([GROUP_TIMELINE]);
global_data.provide.dateFnsLocale = enUS;
global_data.plugins = [router];
return mount(TimelineView, {
props: {
preferredUsername: "my-group",
},
global: {
...global_data,
stubs: {
RouterLink: false,
},
},
});
};
describe("TimelineView", () => {
it("Show simple", async () => {
const wrapper = generateWrapper();
await wrapper.vm.$nextTick();
await flushPromises();
expect(htmlRemoveId(wrapper.html())).toMatchSnapshot();
expect(requestHandlers.handle_0).toHaveBeenCalledTimes(1);
expect(requestHandlers.handle_0).toHaveBeenCalledWith({
author: undefined,
limit: 25,
page: 1,
preferredUsername: "my-group",
type: undefined,
});
});
});

View File

@@ -1,138 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`CreateView > Show simple 1`] = `
"<section class="container mx-auto">
<h1>Create a new group</h1>
<form>
<div data-oruga="field" class="o-field"><label for="group-display-name" class="o-field__label">Group display name</label>
<div class="o-field__body">
<div class="o-field o-field--addons">
<div data-oruga="input" class="o-input__wrapper o-input__wrapper--expanded"><input aria-required="true" required="" id="group-display-name" data-oruga-input="text" type="text" class="o-input" autocomplete="off">
<!---->
<!---->
<!---->
</div>
</div>
</div>
<!---->
</div>
<div class="field"><label class="label" for="group-preferred-username">Federated Group Name</label>
<div class="field-body">
<div data-oruga="field" class="o-field">
<!---->
<div class="o-field__body">
<div class="o-field o-field--addons">
<div data-oruga="input" class="o-input__wrapper o-input__wrapper--expanded"><input aria-required="true" required="" pattern="[a-z0-9_]+" id="group-preferred-username" data-oruga-input="text" type="text" class="o-input" autocomplete="off">
<!---->
<!---->
<!---->
</div>
<p class="control"><span class="button is-static">@localhost</span></p>
</div>
</div>
<p class="o-field__message">Only alphanumeric lowercased characters and underscores are supported.</p>
</div>
</div>
<!--v-if-->
</div>
<div data-oruga="field" class="o-field"><label for="group-summary" class="o-field__label">Description</label>
<div class="o-field__body">
<div class="o-field o-field--addons"></div>
</div>
<!---->
</div>
<div class="address-autocomplete">
<div data-oruga="field" class="o-field !-mt-2" id="FullAddressAutoComplete-o-field"><label for="full-address-autocomplete-1" class="o-field__label">Group address</label>
<div class="o-field__body">
<div class="o-field o-field--addons">
<!--v-if-->
<div data-oruga="autocomplete" class="o-drop o-drop--expanded o-drop--position-auto o-acp">
<div tabindex="-1" class="o-drop__trigger" aria-haspopup="listbox">
<div data-oruga="input" class="o-input__wrapper o-input__wrapper--expanded"><input dir="auto" class="FullAddressAutoComplete-o-autocomplete !mt-0 !h-full o-input o-input--iconspace-left" role="combobox" aria-autocomplete="list" aria-controls="" aria-expanded="false" id="full-address-autocomplete-1" data-oruga-input="text" type="text" autocomplete="off" placeholder="e.g. 10 Rue Jangot"><span class="o-icon o-input__icon-left" data-oruga="icon"><i class="mdi mdi-map-marker mdi-24px"></i></span>
<!---->
<!---->
</div>
</div>
<!--teleport start-->
<transition-stub name="fade" appear="false" persisted="false" css="true">
<!---->
</transition-stub>
<transition-stub name="fade" appear="false" persisted="false" css="true">
<div id="" tabindex="-1" class="o-drop__menu o-drop__menu--auto" style="max-height: 200px; overflow: auto; display: none;" role="listbox" aria-hidden="true" aria-modal="false">
<!---->
<!---->
<div class="o-drop__item o-drop__item--clickable o-acp__item o-acp__item--empty" role="listitem" tabindex="0" data-oruga="dropdown-item"></div>
<!---->
</div>
</transition-stub>
<!--teleport end-->
</div><button disabled="" type="button" class="o-btn o-btn--disabled reset-area !h-auto" role="button" data-oruga="button" title="Clear address field"><span class="o-btn__wrapper"><span class="o-icon o-btn__icon o-btn__icon-left" data-oruga="icon"><i class="mdi mdi-close mdi-24px"></i></span>
<!---->
<!----></span>
</button>
</div>
</div>
<!---->
</div>
<!--v-if-->
<!--v-if-->
</div>
<!--v-if-->
<!--v-if-->
<div class="field"><b class="field-label">Avatar</b>
<div><label class="o-upl !flex" data-oruga="upload">
<div class="o-upl__draggable" role="button" tabindex="0">
<div class="w-100 text-center p-4 rounded-xl border-dashed border-2 border-gray-600"><span class="mx-auto flex w-fit"><span aria-hidden="true" class="material-design-icon upload-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z"><!--v-if--></path></svg></span><span class="capitalize">Click to upload Avatar</span></span>
<!--v-if-->
<!--v-if-->
</div>
</div><input type="file" data-oruga-input="file" accept="image/gif,image/png,image/jpeg,image/webp">
</label></div>
<!--v-if-->
</div>
<div class="field"><b class="field-label">Banner</b>
<div><label class="o-upl !flex" data-oruga="upload">
<div class="o-upl__draggable" role="button" tabindex="0">
<div class="w-100 text-center p-4 rounded-xl border-dashed border-2 border-gray-600"><span class="mx-auto flex w-fit"><span aria-hidden="true" class="material-design-icon upload-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z"><!--v-if--></path></svg></span><span class="capitalize">Click to upload Banner</span></span>
<!--v-if-->
<!--v-if-->
</div>
</div><input type="file" data-oruga-input="file" accept="image/gif,image/png,image/jpeg,image/webp">
</label></div>
<!--v-if-->
</div>
<fieldset>
<legend class="field-label !mb-0 mt-2">Group visibility</legend><label class="o-radio o-radio--checked" data-oruga="radio" role="radio" aria-checked="true"><input type="radio" data-oruga-input="radio" class="o-radio__input o-radio__input--checked" name="groupVisibility" autocomplete="off" value="PUBLIC"><span class="o-radio__label">Visible everywhere on the web<br><small>The group will be publicly listed in search results and may be suggested in the explore section. Only public informations will be shown on it's page.</small></span></label><label class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input type="radio" data-oruga-input="radio" class="o-radio__input" name="groupVisibility" autocomplete="off" value="UNLISTED"><span class="o-radio__label">Only accessible through link<br><small>You'll need to transmit the group URL so people may access the group's profile. The group won't be findable in Mobilizon's search or regular search engines.</small></span></label>
</fieldset>
<fieldset>
<legend class="mt-2"><span class="field-label !mb-0">New members</span><span>Members will also access private sections like discussions, resources and restricted posts.</span></legend>
<div data-oruga="field" class="o-field">
<!---->
<div class="o-field__body">
<div class="o-field o-field--addons"><label class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input type="radio" data-oruga-input="radio" class="o-radio__input" name="groupOpenness" autocomplete="off" value="OPEN"><span class="o-radio__label">Anyone can join freely<br><small>Anyone wanting to be a member from your group will be able to from your group page.</small></span></label></div>
</div>
<!---->
</div>
<div data-oruga="field" class="o-field">
<!---->
<div class="o-field__body">
<div class="o-field o-field--addons"><label class="o-radio o-radio--checked" data-oruga="radio" role="radio" aria-checked="true"><input type="radio" data-oruga-input="radio" class="o-radio__input o-radio__input--checked" name="groupOpenness" autocomplete="off" value="MODERATED"><span class="o-radio__label">Moderate new members<br><small>Anyone can request being a member, but an administrator needs to approve the membership.</small></span></label></div>
</div>
<!---->
</div>
<div data-oruga="field" class="o-field">
<!---->
<div class="o-field__body">
<div class="o-field o-field--addons"><label class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input type="radio" data-oruga-input="radio" class="o-radio__input" name="groupOpenness" autocomplete="off" value="INVITE_ONLY"><span class="o-radio__label">Manually invite new members<br><small>The only way for your group to get new members is if an admininistrator invites them.</small></span></label></div>
</div>
<!---->
</div>
</fieldset>
<fieldset>
<legend class="mt-2"><span class="field-label !mb-0">Followers</span><span>Followers will receive new public events and posts.</span></legend><label class="o-chk" data-oruga="checkbox" role="checkbox" aria-checked="false"><input type="checkbox" data-oruga-input="checkbox" class="o-chk__input" autocomplete="off" true-value="true" false-value="false"><span class="o-chk__label">Manually approve new followers</span></label>
</fieldset><button type="submit" class="o-btn o-btn--primary mt-3" role="button" data-oruga="button"><span class="o-btn__wrapper"><!----><span class="o-btn__label">Create my group</span>
<!----></span>
</button>
</form>
</section>"
`;

View File

@@ -0,0 +1,79 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`GroupCard > Show Empty 1`] = `
"<a href="/@framasoft@mobilizon.fr" class="mbz-card snap-center shrink-0 dark:bg-mbz-purple dark:text-white rounded-lg shadow-lg flex items-center flex-col sm:max-w-xs w-[18rem] shrink-0 flex flex-col">
<div class="flex-none p-2 md:p-4"><span aria-hidden="true" class="material-design-icon account-group-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="128" height="128" viewBox="0 0 24 24"><path d="M12,5.5A3.5,3.5 0 0,1 15.5,9A3.5,3.5 0 0,1 12,12.5A3.5,3.5 0 0,1 8.5,9A3.5,3.5 0 0,1 12,5.5M5,8C5.56,8 6.08,8.15 6.53,8.42C6.38,9.85 6.8,11.27 7.66,12.38C7.16,13.34 6.16,14 5,14A3,3 0 0,1 2,11A3,3 0 0,1 5,8M19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14C17.84,14 16.84,13.34 16.34,12.38C17.2,11.27 17.62,9.85 17.47,8.42C17.92,8.15 18.44,8 19,8M5.5,18.25C5.5,16.18 8.41,14.5 12,14.5C15.59,14.5 18.5,16.18 18.5,18.25V20H5.5V18.25M0,20V18.5C0,17.11 1.89,15.94 4.45,15.6C3.86,16.28 3.5,17.22 3.5,18.25V20H0M24,20H20.5V18.25C20.5,17.22 20.14,16.28 19.55,15.6C22.11,15.94 24,17.11 24,18.5V20Z"><!--v-if--></path></svg></span></div>
<div class="py-2 px-2 md:px-4 flex flex-col h-full justify-between w-full">
<div class="flex gap-1 mb-2">
<div class="overflow-hidden flex-auto">
<h3 class="text-2xl leading-5 line-clamp-3 font-bold text-violet-3 dark:text-white" dir="auto">Framasoft</h3><span class="block truncate">@framasoft@mobilizon.fr</span>
</div>
</div>
<div class="mb-2 line-clamp-3" dir="auto"></div>
<div>
<!--v-if-->
<!--v-if-->
</div>
</div>
</a>"
`;
exports[`GroupCard > Show Row mode 1`] = `
"<a href="/@framasoft@mobilizon.fr" class="mbz-card snap-center shrink-0 dark:bg-mbz-purple dark:text-white rounded-lg shadow-lg flex items-center flex-col sm:flex-row">
<div class="flex-none p-2 md:p-4">
<figure class=""><img class="rounded-full" src="https://mobilizon.fr/media/890f5396ef80081a6b1b18a5db969746cf8bb340e8a4e657d665e41f6646c539.jpg?name=framasoft%27s%20avatar.jpg" alt="" height="128" width="128"></figure>
</div>
<div class="py-2 px-2 md:px-4 flex flex-col h-full justify-between w-full sm:flex-1">
<div class="flex gap-1 mb-2">
<div class="overflow-hidden flex-auto">
<h3 class="text-2xl leading-5 line-clamp-3 font-bold text-violet-3 dark:text-white" dir="auto">Framasoft</h3><span class="block truncate">@framasoft@mobilizon.fr</span>
</div>
</div>
<div class="mb-2 line-clamp-3" dir="auto">You can also use variant modifiers to target media queries like responsive breakpoints, dark mode, prefers-reduced-motion, and more. For example, use md:h-full to apply the h-full utility at only medium screen sizes and above.</div>
<div>
<div class="truncate flex gap-1" dir="auto" title="Nantes, undefined"><span aria-hidden="true" class="material-design-icon map-marker-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z"><!--v-if--></path></svg></span><span>Nantes</span></div>
<p class="flex gap-1"><span aria-hidden="true" class="material-design-icon account-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"><!--v-if--></path></svg></span> 7 members or followers</p>
</div>
</div>
</a>"
`;
exports[`GroupCard > Show With media 1`] = `
"<a href="/@framasoft@mobilizon.fr" class="mbz-card snap-center shrink-0 dark:bg-mbz-purple dark:text-white rounded-lg shadow-lg flex items-center flex-col sm:max-w-xs w-[18rem] shrink-0 flex flex-col">
<div class="flex-none p-2 md:p-4">
<figure class=""><img class="rounded-full" src="https://mobilizon.fr/media/890f5396ef80081a6b1b18a5db969746cf8bb340e8a4e657d665e41f6646c539.jpg?name=framasoft%27s%20avatar.jpg" alt="" height="128" width="128"></figure>
</div>
<div class="py-2 px-2 md:px-4 flex flex-col h-full justify-between w-full">
<div class="flex gap-1 mb-2">
<div class="overflow-hidden flex-auto">
<h3 class="text-2xl leading-5 line-clamp-3 font-bold text-violet-3 dark:text-white" dir="auto">Framasoft</h3><span class="block truncate">@framasoft@mobilizon.fr</span>
</div>
</div>
<div class="mb-2 line-clamp-3" dir="auto"></div>
<div>
<!--v-if-->
<!--v-if-->
</div>
</div>
</a>"
`;
exports[`GroupCard > Show with followers or members 1`] = `
"<a href="/@framasoft@mobilizon.fr" class="mbz-card snap-center shrink-0 dark:bg-mbz-purple dark:text-white rounded-lg shadow-lg flex items-center flex-col sm:max-w-xs w-[18rem] shrink-0 flex flex-col">
<div class="flex-none p-2 md:p-4">
<figure class=""><img class="rounded-full" src="https://mobilizon.fr/media/890f5396ef80081a6b1b18a5db969746cf8bb340e8a4e657d665e41f6646c539.jpg?name=framasoft%27s%20avatar.jpg" alt="" height="128" width="128"></figure>
</div>
<div class="py-2 px-2 md:px-4 flex flex-col h-full justify-between w-full">
<div class="flex gap-1 mb-2">
<div class="overflow-hidden flex-auto">
<h3 class="text-2xl leading-5 line-clamp-3 font-bold text-violet-3 dark:text-white" dir="auto">Framasoft</h3><span class="block truncate">@framasoft@mobilizon.fr</span>
</div>
</div>
<div class="mb-2 line-clamp-3" dir="auto">You can also use variant modifiers to target media queries like responsive breakpoints, dark mode, prefers-reduced-motion, and more. For example, use md:h-full to apply the h-full utility at only medium screen sizes and above.</div>
<div>
<div class="truncate flex gap-1" dir="auto" title="Nantes, undefined"><span aria-hidden="true" class="material-design-icon map-marker-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z"><!--v-if--></path></svg></span><span>Nantes</span></div>
<p class="flex gap-1"><span aria-hidden="true" class="material-design-icon account-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"><!--v-if--></path></svg></span> 7 members or followers</p>
</div>
</div>
</a>"
`;

View File

@@ -1,11 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`GroupFollowers > Show simple 1`] = `
"<div>
<!--v-if-->
<transition-stub name="fade" appear="false" persisted="false" css="true">
<!---->
</transition-stub>
<!--v-if-->
</div>"
`;

View File

@@ -0,0 +1,123 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`GroupMemberCard > Show administrator 1`] = `
"<div class="rounded shadow-lg bg-white dark:bg-mbz-purple dark:text-white">
<div class="bg-mbz-yellow-alt-50 text-black flex items-center gap-1 p-2 rounded-t-lg" dir="auto">
<figure class=""><img class="rounded-xl" src="https://social.tcit.fr/system/accounts/avatars/000/000/001/original/a28c50ce5f2b13fd.jpg" alt="" width="24" height="24"></figure> Thomas Citharel (@tcit)
</div>
<div class="flex items-center gap-2 p-2 pr-4" dir="auto">
<div class="flex-1">
<div class="p-2 flex gap-2">
<div class="">
<figure class="h-12 w-12"><img class="rounded-full w-full h-full object-cover" src="https://mobilizon.fr/media/ff5b2d425fb73e17fcbb56a1a032359ee0b21453c11af59e103e783817a32fdf.png?name=framasoft%27s%20avatar.png" alt="" width="48" height="48"></figure>
</div>
<div class="" dir="auto"><a href="/@framasoft@mobilizon.fr" class="">
<h2 class="mt-0">Framasoft</h2>
<div class="flex flex-col items-start"><span class="text-sm">@framasoft@mobilizon.fr</span><span data-v-6955ca87="" class="rounded-md truncate text-sm text-black px-2 py-1 bg-mbz-info dark:text-black">Administrator</span></div>
</a></div>
</div>
<div class="mt-3 prose dark:prose-invert lg:prose-xl prose-p:m-0 line-clamp-2">
<p><strong>La Fediverse</strong>, <strong>c'est la <em><u>Féd</u>ération qui englobe l'Un<u>ivers</u> des réseaux sociaux libres et décentralisés,</em> </strong>dont Mobilizon (évènements), Mastodon (microblog), Peertube (vidéos), Pixelfed (photos), Funkwhale (musique), Matrix (messagerie instantanée)... et tant d'autres font partie.</p>
<p><strong>Et "La Fediverse <em>Nantaise</em>" est un collectif cherchant à faire connaître localement tout le potentiel de ces réseaux ! :-)</strong></p>
</div>
</div>
<div>
<div data-oruga="dropdown" class="o-drop o-drop--position-bottom-left">
<div tabindex="0" class="o-drop__trigger" aria-haspopup="true"><span class="cursor-pointer material-design-icon dots-horizontal-icon cursor-pointer" aria-hidden="true" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z"><!--v-if--></path></svg></span></div>
<!--teleport start-->
<transition-stub name="fade" appear="false" persisted="false" css="true">
<!---->
</transition-stub>
<transition-stub name="fade" appear="false" persisted="false" css="true">
<div class="o-drop__menu o-drop__menu--bottom-left" role="list" aria-hidden="true" aria-modal="true" style="display: none;">
<div class="o-drop__item o-drop__item--clickable inline-flex gap-1" role="listitem" tabindex="0" data-oruga="dropdown-item"><span aria-hidden="true" class="material-design-icon exit-to-app-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19,3H5C3.89,3 3,3.89 3,5V9H5V5H19V19H5V15H3V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M10.08,15.58L11.5,17L16.5,12L11.5,7L10.08,8.41L12.67,11H3V13H12.67L10.08,15.58Z"><!--v-if--></path></svg></span> Leave</div>
</div>
</transition-stub>
<!--teleport end-->
</div>
</div>
</div>
</div>"
`;
exports[`GroupMemberCard > Show moderator 1`] = `
"<div class="rounded shadow-lg bg-white dark:bg-mbz-purple dark:text-white">
<div class="bg-mbz-yellow-alt-50 text-black flex items-center gap-1 p-2 rounded-t-lg" dir="auto">
<figure class=""><img class="rounded-xl" src="https://social.tcit.fr/system/accounts/avatars/000/000/001/original/a28c50ce5f2b13fd.jpg" alt="" width="24" height="24"></figure> Thomas Citharel (@tcit)
</div>
<div class="flex items-center gap-2 p-2 pr-4" dir="auto">
<div class="flex-1">
<div class="p-2 flex gap-2">
<div class="">
<figure class="h-12 w-12"><img class="rounded-full w-full h-full object-cover" src="https://mobilizon.fr/media/ff5b2d425fb73e17fcbb56a1a032359ee0b21453c11af59e103e783817a32fdf.png?name=framasoft%27s%20avatar.png" alt="" width="48" height="48"></figure>
</div>
<div class="" dir="auto"><a href="/@framasoft@mobilizon.fr" class="">
<h2 class="mt-0">Framasoft</h2>
<div class="flex flex-col items-start"><span class="text-sm">@framasoft@mobilizon.fr</span><span data-v-6955ca87="" class="rounded-md truncate text-sm text-black px-2 py-1 bg-mbz-info dark:text-black">Moderator</span></div>
</a></div>
</div>
<div class="mt-3 prose dark:prose-invert lg:prose-xl prose-p:m-0 line-clamp-2">
<p><strong>La Fediverse</strong>, <strong>c'est la <em><u>Féd</u>ération qui englobe l'Un<u>ivers</u> des réseaux sociaux libres et décentralisés,</em> </strong>dont Mobilizon (évènements), Mastodon (microblog), Peertube (vidéos), Pixelfed (photos), Funkwhale (musique), Matrix (messagerie instantanée)... et tant d'autres font partie.</p>
<p><strong>Et "La Fediverse <em>Nantaise</em>" est un collectif cherchant à faire connaître localement tout le potentiel de ces réseaux ! :-)</strong></p>
</div>
</div>
<div>
<div data-oruga="dropdown" class="o-drop o-drop--position-bottom-left">
<div tabindex="0" class="o-drop__trigger" aria-haspopup="true"><span class="cursor-pointer material-design-icon dots-horizontal-icon cursor-pointer" aria-hidden="true" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z"><!--v-if--></path></svg></span></div>
<!--teleport start-->
<transition-stub name="fade" appear="false" persisted="false" css="true">
<!---->
</transition-stub>
<transition-stub name="fade" appear="false" persisted="false" css="true">
<div class="o-drop__menu o-drop__menu--bottom-left" role="list" aria-hidden="true" aria-modal="true" style="display: none;">
<div class="o-drop__item o-drop__item--clickable inline-flex gap-1" role="listitem" tabindex="0" data-oruga="dropdown-item"><span aria-hidden="true" class="material-design-icon exit-to-app-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19,3H5C3.89,3 3,3.89 3,5V9H5V5H19V19H5V15H3V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M10.08,15.58L11.5,17L16.5,12L11.5,7L10.08,8.41L12.67,11H3V13H12.67L10.08,15.58Z"><!--v-if--></path></svg></span> Leave</div>
</div>
</transition-stub>
<!--teleport end-->
</div>
</div>
</div>
</div>"
`;
exports[`GroupMemberCard > Show simple member 1`] = `
"<div class="rounded shadow-lg bg-white dark:bg-mbz-purple dark:text-white">
<div class="bg-mbz-yellow-alt-50 text-black flex items-center gap-1 p-2 rounded-t-lg" dir="auto">
<figure class=""><img class="rounded-xl" src="https://social.tcit.fr/system/accounts/avatars/000/000/001/original/a28c50ce5f2b13fd.jpg" alt="" width="24" height="24"></figure> Thomas Citharel (@tcit)
</div>
<div class="flex items-center gap-2 p-2 pr-4" dir="auto">
<div class="flex-1">
<div class="p-2 flex gap-2">
<div class="">
<figure class="h-12 w-12"><img class="rounded-full w-full h-full object-cover" src="https://mobilizon.fr/media/ff5b2d425fb73e17fcbb56a1a032359ee0b21453c11af59e103e783817a32fdf.png?name=framasoft%27s%20avatar.png" alt="" width="48" height="48"></figure>
</div>
<div class="" dir="auto"><a href="/@framasoft@mobilizon.fr" class="">
<h2 class="mt-0">Framasoft</h2>
<div class="flex flex-col items-start"><span class="text-sm">@framasoft@mobilizon.fr</span>
<!--v-if-->
</div>
</a></div>
</div>
<div class="mt-3 prose dark:prose-invert lg:prose-xl prose-p:m-0 line-clamp-2">
<p><strong>La Fediverse</strong>, <strong>c'est la <em><u>Féd</u>ération qui englobe l'Un<u>ivers</u> des réseaux sociaux libres et décentralisés,</em> </strong>dont Mobilizon (évènements), Mastodon (microblog), Peertube (vidéos), Pixelfed (photos), Funkwhale (musique), Matrix (messagerie instantanée)... et tant d'autres font partie.</p>
<p><strong>Et "La Fediverse <em>Nantaise</em>" est un collectif cherchant à faire connaître localement tout le potentiel de ces réseaux ! :-)</strong></p>
</div>
</div>
<div>
<div data-oruga="dropdown" class="o-drop o-drop--position-bottom-left">
<div tabindex="0" class="o-drop__trigger" aria-haspopup="true"><span class="cursor-pointer material-design-icon dots-horizontal-icon cursor-pointer" aria-hidden="true" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z"><!--v-if--></path></svg></span></div>
<!--teleport start-->
<transition-stub name="fade" appear="false" persisted="false" css="true">
<!---->
</transition-stub>
<transition-stub name="fade" appear="false" persisted="false" css="true">
<div class="o-drop__menu o-drop__menu--bottom-left" role="list" aria-hidden="true" aria-modal="true" style="display: none;">
<div class="o-drop__item o-drop__item--clickable inline-flex gap-1" role="listitem" tabindex="0" data-oruga="dropdown-item"><span aria-hidden="true" class="material-design-icon exit-to-app-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19,3H5C3.89,3 3,3.89 3,5V9H5V5H19V19H5V15H3V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M10.08,15.58L11.5,17L16.5,12L11.5,7L10.08,8.41L12.67,11H3V13H12.67L10.08,15.58Z"><!--v-if--></path></svg></span> Leave</div>
</div>
</transition-stub>
<!--teleport end-->
</div>
</div>
</div>
</div>"
`;

View File

@@ -1,11 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`GroupMembers > Show simple 1`] = `
"<div>
<!--v-if-->
<transition-stub name="fade" appear="false" persisted="false" css="true">
<!---->
</transition-stub>
<!--v-if-->
</div>"
`;

View File

@@ -1,19 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`GroupSettings > Show simple 1`] = `
"<div>
<!--v-if-->
<transition-stub name="fade" appear="false" persisted="false" css="true">
<!---->
</transition-stub>
<transition-stub name="fade" appear="false" persisted="false" css="true">
<article class="o-notification o-notification--top" data-oruga="notification">
<!---->
<div class="o-notification__wrapper">
<!---->
<div class="o-notification__content">You are not an administrator for this group.</div>
</div>
</article>
</transition-stub>
</div>"
`;

View File

@@ -1,25 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`GroupView > Show simple 1`] = `
"<div data-v-63850a71="" class="container mx-auto is-widescreen">
<!--v-if-->
<transition-stub data-v-63850a71="" name="fade" appear="false" persisted="false" css="true">
<article class="o-notification o-notification--danger o-notification--top" data-oruga="notification">
<!---->
<div class="o-notification__wrapper">
<!---->
<div class="o-notification__content">No group found</div>
</div>
</article>
</transition-stub>
<!--v-if-->
<!--v-if-->
<!--v-if-->
<div data-v-63850a71="" class="my-2">
<!--v-if-->
</div>
<!--v-if-->
<!--v-if-->
<!--v-if-->
</div>"
`;

View File

@@ -1,25 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`MyGroups > Show simple 1`] = `
"<section data-v-59f508e2="" class="container mx-auto px-1 mb-6">
<h1 data-v-59f508e2="" class="title">My groups</h1>
<p data-v-59f508e2="">Groups are spaces for coordination and preparation to better organize events and manage your community.</p>
<div data-v-59f508e2="" class="flex my-3"><a data-v-59f508e2="" href="/groups/create" class="o-btn o-btn--primary" role="button" data-oruga="button"><span class="o-btn__wrapper"><!----><span class="o-btn__label">Create group</span>
<!----></span>
</a></div>
<transition-stub data-v-59f508e2="" name="fade" appear="false" persisted="false" css="true">
<!---->
</transition-stub>
<!--v-if-->
<!--v-if-->
<section data-v-59f508e2="" class="text-center not-found">
<div data-v-59f508e2="" class="">
<div data-v-59f508e2="" class="">
<div data-v-59f508e2="" class="text-center prose dark:prose-invert max-w-full">
<p data-v-59f508e2="">You are not part of any group. Do you wish to <a data-v-59f508e2="" href="/groups/create" class="">create a group</a> or <a data-v-59f508e2="" href="/search?contentType=GROUPS" class="">explore the groups</a>?</p>
</div>
</div>
</div>
</section>
</section>"
`;

View File

@@ -1,17 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`SettingsView > Show simple 1`] = `
"<div class="container mx-auto" preferredusername="my-group">
<h1 class="">Settings</h1>
<div class="flex flex-wrap gap-2">
<aside class="sm:max-w-xs flex-1 min-w-[320px]">
<ul>
<setting-menu-section-stub title="Settings" to="[object Object]"></setting-menu-section-stub>
</ul>
</aside>
<div class="flex-1">
<router-view-stub name="default"></router-view-stub>
</div>
</div>
</div>"
`;

View File

@@ -1,203 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`TimelineView > Show simple 1`] = `
"<div data-v-4ef926d4="" class="container mx-auto section">
<!--v-if-->
<section data-v-4ef926d4="" class="timeline">
<div data-v-4ef926d4="" data-oruga="field" class="o-field">
<!---->
<div class="o-field__body">
<div class="o-field o-field--addons"><label data-v-4ef926d4="" class="o-radio o-radio--checked" data-oruga="radio" role="radio" aria-checked="true"><input class="pr-4 o-radio__input o-radio__input--checked" type="radio" data-oruga-input="radio" autocomplete="off"><span class="o-radio__label"><span data-v-4ef926d4="" aria-hidden="true" class="material-design-icon timeline-text-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M4 2V8H2V2H4M2 22H4V16H2V22M5 12C5 10.9 4.11 10 3 10C1.9 10 1 10.9 1 12C1 13.11 1.9 14 3 14C4.11 14 5 13.11 5 12M24 6V18C24 19.11 23.11 20 22 20H10C8.9 20 8 19.11 8 18V14L6 12L8 10V6C8 4.89 8.9 4 10 4H22C23.11 4 24 4.89 24 6M19 13H11V15H19V13M21 9H11V11H21V9Z"><!--v-if--></path></svg></span> All activities</span></label><label data-v-4ef926d4="" class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input class="pr-4 o-radio__input" type="radio" data-oruga-input="radio" autocomplete="off" value="MEMBER"><span class="o-radio__label"><span data-v-4ef926d4="" class="o-icon" data-oruga="icon"><i class="mdi mdi-account-multiple-plus mdi-24px"></i></span> Members</span></label><label data-v-4ef926d4="" class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input class="pr-4 o-radio__input" type="radio" data-oruga-input="radio" autocomplete="off" value="GROUP"><span class="o-radio__label"><span data-v-4ef926d4="" class="o-icon" data-oruga="icon"><i class="mdi mdi-cog mdi-24px"></i></span> Settings</span></label><label data-v-4ef926d4="" class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input class="pr-4 o-radio__input" type="radio" data-oruga-input="radio" autocomplete="off" value="EVENT"><span class="o-radio__label"><span data-v-4ef926d4="" class="o-icon" data-oruga="icon"><i class="mdi mdi-calendar mdi-24px"></i></span> Events</span></label><label data-v-4ef926d4="" class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input class="pr-4 o-radio__input" type="radio" data-oruga-input="radio" autocomplete="off" value="POST"><span class="o-radio__label"><span data-v-4ef926d4="" class="o-icon" data-oruga="icon"><i class="mdi mdi-bullhorn mdi-24px"></i></span> Posts</span></label><label data-v-4ef926d4="" class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input class="pr-4 o-radio__input" type="radio" data-oruga-input="radio" autocomplete="off" value="DISCUSSION"><span class="o-radio__label"><span data-v-4ef926d4="" class="o-icon" data-oruga="icon"><i class="mdi mdi-chat mdi-24px"></i></span> Discussions</span></label><label data-v-4ef926d4="" class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input type="radio" data-oruga-input="radio" class="o-radio__input" autocomplete="off" value="RESOURCE"><span class="o-radio__label"><span data-v-4ef926d4="" class="o-icon" data-oruga="icon"><i class="mdi mdi-link mdi-24px"></i></span> Resources</span></label></div>
</div>
<!---->
</div>
<div data-v-4ef926d4="" data-oruga="field" class="o-field">
<!---->
<div class="o-field__body">
<div class="o-field o-field--addons"><label data-v-4ef926d4="" class="o-radio o-radio--checked" data-oruga="radio" role="radio" aria-checked="true"><input class="pr-4 o-radio__input o-radio__input--checked" type="radio" data-oruga-input="radio" autocomplete="off"><span class="o-radio__label"><span data-v-4ef926d4="" aria-hidden="true" class="material-design-icon timeline-text-icon" role="img"><svg fill="currentColor" class="material-design-icon__svg" width="24" height="24" viewBox="0 0 24 24"><path d="M4 2V8H2V2H4M2 22H4V16H2V22M5 12C5 10.9 4.11 10 3 10C1.9 10 1 10.9 1 12C1 13.11 1.9 14 3 14C4.11 14 5 13.11 5 12M24 6V18C24 19.11 23.11 20 22 20H10C8.9 20 8 19.11 8 18V14L6 12L8 10V6C8 4.89 8.9 4 10 4H22C23.11 4 24 4.89 24 6M19 13H11V15H19V13M21 9H11V11H21V9Z"><!--v-if--></path></svg></span> All activities</span></label><label data-v-4ef926d4="" class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input class="pr-4 o-radio__input" type="radio" data-oruga-input="radio" autocomplete="off" value="SELF"><span class="o-radio__label"><span data-v-4ef926d4="" class="o-icon" data-oruga="icon"><i class="mdi mdi-account mdi-24px"></i></span> From yourself</span></label><label data-v-4ef926d4="" class="o-radio" data-oruga="radio" role="radio" aria-checked="false"><input class="pr-4 o-radio__input" type="radio" data-oruga-input="radio" autocomplete="off" value="BY"><span class="o-radio__label"><span data-v-4ef926d4="" class="o-icon" data-oruga="icon"><i class="mdi mdi-account-multiple mdi-24px"></i></span> By others</span></label></div>
</div>
<!---->
</div>
<transition-group-stub data-v-4ef926d4="" name="timeline-list" tag="div" appear="false" persisted="false" css="true">
<div data-v-4ef926d4="" class="day">
<div data-v-4ef926d4="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 48px; width: 300px;"></div>
</div>
<ul data-v-4ef926d4="" class="before:opacity-10">
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
</ul>
</div>
<div data-v-4ef926d4="" class="day">
<div data-v-4ef926d4="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 48px; width: 300px;"></div>
</div>
<ul data-v-4ef926d4="" class="before:opacity-10">
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
<li data-v-4ef926d4="">
<div data-v-56a583cf="" data-v-4ef926d4="" class="activity-item"><span data-v-56a583cf=""><div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left"><div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated" style="height: 32px; width: 32px; border-radius: 50%;"></div></div></span>
<div data-v-56a583cf="" class="subject">
<div data-v-56a583cf="" class="prose dark:prose-invert">
<p data-v-56a583cf="">
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
<div data-v-56a583cf="" data-oruga="skeleton" class="o-sklt o-sklt--left datetime">
<div class="o-sklt__item o-sklt__item--rounded o-sklt__item--animated"></div>
</div>
</p>
</div>
</div>
</div>
</li>
</ul>
</div>
</transition-group-stub>
<!---->
<!---->
<div data-v-4ef926d4="" class="observer"></div>
<!--v-if-->
</section>
</div>"
`;