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/
56 lines
1.1 KiB
Vue
56 lines
1.1 KiB
Vue
<script>
|
|
import { mapGetters } from 'vuex';
|
|
|
|
export default {
|
|
components: {},
|
|
props: {
|
|
action: {
|
|
type: Object,
|
|
default: () => {},
|
|
},
|
|
isSelected: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
},
|
|
emits: ['optionSelect'],
|
|
computed: {
|
|
...mapGetters({
|
|
widgetColor: 'appConfig/getWidgetColor',
|
|
}),
|
|
},
|
|
methods: {
|
|
onClick() {
|
|
this.$emit('optionSelect', this.action);
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<li
|
|
class="option"
|
|
:class="{ 'is-selected': isSelected }"
|
|
:style="{ borderColor: widgetColor }"
|
|
>
|
|
<button class="option-button button" @click="onClick">
|
|
<span :style="{ color: widgetColor }">{{ action.title }}</span>
|
|
</button>
|
|
</li>
|
|
</template>
|
|
|
|
<style scoped lang="scss">
|
|
.option {
|
|
@apply rounded-[5rem] border border-solid border-n-brand ltr:float-left rtl:float-right m-1 max-w-full;
|
|
|
|
.option-button {
|
|
@apply bg-transparent border-0 cursor-pointer h-auto leading-normal ltr:text-left rtl:text-right whitespace-normal rounded-[2rem] min-h-[2.5rem];
|
|
|
|
span {
|
|
display: inline-block;
|
|
vertical-align: middle;
|
|
}
|
|
}
|
|
}
|
|
</style>
|