Restructure omni services and add Chatwoot research snapshot

This commit is contained in:
Ruslan Bakiev
2026-02-21 11:11:27 +07:00
parent edea7a0034
commit b73babbbf6
7732 changed files with 978203 additions and 32 deletions

View File

@@ -0,0 +1,24 @@
<script setup>
import { h, defineProps } from 'vue';
const props = defineProps({
country: { type: String, required: true },
squared: { type: Boolean, default: false },
});
const renderFlag = () => {
const classes = ['fi', `fi-${props.country.toLowerCase()}`, 'flex-shrink-0'];
if (props.squared) {
classes.push('fis');
}
return h('span', { class: classes });
};
</script>
<template>
<component :is="renderFlag" />
</template>
<style>
@import 'flag-icons/css/flag-icons.min.css';
</style>

View File

@@ -0,0 +1,93 @@
<script setup>
import { ref } from 'vue';
import Flag from '../Flag.vue';
import countries from 'shared/constants/countries';
const BasicTemplate = {
components: { Flag },
props: {
country: {
type: String,
default: 'us',
},
squared: {
type: Boolean,
default: false,
},
},
template: `
<div class="flex items-center gap-4 p-4 border rounded border-n-weak">
<Flag :country="country" :squared="squared" />
</div>
`,
};
const SizeVariants = {
components: { Flag },
setup() {
const isSquared = ref(false);
return { isSquared };
},
template: `
<div class="flex flex-col gap-4">
<label class="flex items-center gap-2">
<input type="checkbox" v-model="isSquared">
Squared flags
</label>
<div class="flex items-center gap-4 p-4 border rounded border-n-weak">
<Flag country="in" class="!size-4" :squared="isSquared" />
<Flag country="in" class="!size-6" :squared="isSquared" />
<Flag country="in" class="!size-8" :squared="isSquared" />
<Flag country="in" class="!size-10" :squared="isSquared" />
</div>
</div>
`,
};
const AllFlags = {
components: { Flag },
setup() {
const isSquared = ref(false);
return { countries, isSquared };
},
template: `
<div class="flex flex-col gap-4">
<label class="flex items-center gap-2">
<input type="checkbox" v-model="isSquared">
Squared flags
</label>
<div class="grid grid-cols-2 gap-4 p-4 border rounded border-n-strong md:grid-cols-3 lg:grid-cols-4">
<div
v-for="country in countries"
:key="country.id"
class="flex items-center gap-2 px-4 py-2 border rounded border-n-strong"
>
<Flag
:country="country.id"
:squared="isSquared"
class="size-6"
/>
<span class="text-sm">{{ country.name }}</span>
</div>
</div>
</div>
`,
};
</script>
<template>
<Story title="Components/Flag">
<Variant title="Basic Usage">
<BasicTemplate country="us" :squared="false" />
</Variant>
<Variant title="Size Variants">
<SizeVariants />
</Variant>
<Variant title="All Flags">
<AllFlags />
</Variant>
</Story>
</template>