Copy the Chatwoot (v4.14.0) frontend runnable subset into frontend/ for customization: - app/javascript/ (Vue SPA: dashboard, widget, sdk, portal, superadmin) - app/views/ (ERB templates for vite-plugin-ruby entrypoint resolution) - app/helpers/, app/assets/ (Rails view helpers, static assets) - enterprise/ (Enterprise edition frontend overlay) - config/vite.json, vite.config.ts, bin/vite (Vite-Rails toolchain) - package.json, pnpm-lock.yaml, tailwind/postcss/eslint configs - Gemfile, Gemfile.lock (vite_rails gem for bin/vite binstub) Excluded Rails backend: controllers, models, services, jobs, mailers, policies, db, lib, spec, public, node_modules. Update references to the new frontend location: - .gitignore: exclude frontend build artifacts (node_modules, tmp, packs), keep frontend/bin/ and frontend/vendor/ via negation - backend/scripts/parity_frontend_smoke.sh: CHATWOOT_DIR default reference/chatwoot -> ../frontend - backend/scripts/parity_frontend_browser_smoke.mjs: same default update - AGENTS.md: add frontend section with Rails/Vite coupling notes - README: architecture tree includes frontend/
58 lines
1.1 KiB
Vue
58 lines
1.1 KiB
Vue
<template>
|
|
<div class="animation-container margin-top-1">
|
|
<div class="ai-typing--wrap">
|
|
<fluent-icon icon="wand" size="14" class="ai-typing--icon" />
|
|
<label>
|
|
{{ $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.AI_WRITING') }}
|
|
</label>
|
|
</div>
|
|
<span class="loader" />
|
|
<span class="loader" />
|
|
<span class="loader" />
|
|
</div>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
.animation-container {
|
|
position: relative;
|
|
display: flex;
|
|
.ai-typing--wrap {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
|
|
.ai-typing--icon {
|
|
@apply text-n-iris-11;
|
|
}
|
|
}
|
|
label {
|
|
@apply text-n-iris-11 ltr:mr-1 rtl:ml-1 inline-block;
|
|
}
|
|
.loader {
|
|
animation: bubble-scale 1.2s infinite;
|
|
@apply bg-n-iris-11 inline-block size-1.5 ltr:mr-1 rtl:ml-1 mt-3 rounded-full;
|
|
}
|
|
|
|
.loader:nth-child(2) {
|
|
animation-delay: 0.4s;
|
|
}
|
|
|
|
.loader:nth-child(3) {
|
|
animation-delay: 0.8s;
|
|
}
|
|
|
|
@keyframes bubble-scale {
|
|
0%,
|
|
100% {
|
|
transform: scale(1);
|
|
}
|
|
25% {
|
|
transform: scale(1.3);
|
|
}
|
|
50% {
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
}
|
|
</style>
|