@bettertogether/community-engine-vue 0.1.6 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -1
- package/dist/assets/BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js +1 -0
- package/dist/assets/BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js +3 -0
- package/dist/assets/BFormSelect.vue_vue_type_script_setup_true_lang-BigptVap-B_HbOOZR.js +1 -0
- package/dist/assets/BRow.vue_vue_type_script_setup_true_lang-69TY75-8-DJdEdyx7.js +1 -0
- package/dist/assets/Communities-Cx4tT-bx.js +1 -0
- package/dist/assets/Communities-n33ssuUH.css +1 -0
- package/dist/assets/CommunityConversation-bBkYBs2k.css +1 -0
- package/dist/assets/CommunityConversation-jHAnv_Ps.js +1 -0
- package/dist/assets/CommunityConversations-rEDGS7To.js +1 -0
- package/dist/assets/CommunityEvent-CUdT0aT4.js +1 -0
- package/dist/assets/CommunityEvents-rsOgcxQr.js +1 -0
- package/dist/assets/CommunityHome-ChuTE2Nz.js +1 -0
- package/dist/assets/CommunityJoaTu-CpLIY_83.js +1 -0
- package/dist/assets/CommunityMembers-C3UtzQGp.css +1 -0
- package/dist/assets/CommunityMembers-DKf74ltl.js +1 -0
- package/dist/assets/CommunityPage-C5x23iQl.css +1 -0
- package/dist/assets/CommunityPage-CRYg9-rW.js +1 -0
- package/dist/assets/CommunityPages-IsLTNFC3.js +1 -0
- package/dist/assets/CommunityPost-BOnqqxVs.js +1 -0
- package/dist/assets/CommunityPost-BRYtkDSY.css +1 -0
- package/dist/assets/CommunityPosts-DY1olmcU.js +1 -0
- package/dist/assets/Error404-D10VQARe.js +1 -0
- package/dist/assets/EventCard-vfutXTdg.js +1 -0
- package/dist/assets/EventList-ChtehYcJ.js +1 -0
- package/dist/assets/ExtensionSlot-DJKbrq4c.js +1 -0
- package/dist/assets/PostList-BuHrBBqX.css +1 -0
- package/dist/assets/PostList-DYFgxlE8.js +1 -0
- package/dist/assets/SyncBadge-B1JBsdUk.js +1 -0
- package/dist/assets/SyncBadge-FNO-QLuu.css +1 -0
- package/dist/assets/UserPasswordNew-D_Djldm9.css +1 -0
- package/dist/assets/UserPasswordNew-al9bNBTZ.js +1 -0
- package/dist/assets/UserPasswordReset-42zs98RW.js +1 -0
- package/dist/assets/UserPasswordReset-D_6OQDZY.css +1 -0
- package/dist/assets/UserResendConfirmation-CGavYB81.js +1 -0
- package/dist/assets/UserResendConfirmation-DNTHcaar.css +1 -0
- package/dist/assets/UserSignIn-BIRb0HkV.js +1 -0
- package/dist/assets/UserSignIn-C-Pol8OD.css +1 -0
- package/dist/assets/UserSignUp-ChkKQAd2.css +1 -0
- package/dist/assets/UserSignUp-Df6o3vlO.js +1 -0
- package/dist/assets/better-together-logo-61cxo5d5.png +0 -0
- package/dist/assets/index-BFt-JKVh.css +5 -0
- package/dist/assets/index-COo3Jb7v.js +1088 -0
- package/dist/assets/nodefs-Bfyh92qg.js +1 -0
- package/dist/assets/opfs-ahp-BLzlXf6u.js +3 -0
- package/dist/assets/pglite-BdRI_ZYT.wasm +0 -0
- package/dist/assets/pglite-COscPi1Y.data +0 -0
- package/dist/assets/usePages-DDjDQRCy.js +1 -0
- package/dist/assets/usePosts-Bf2Ccwr4.js +1 -0
- package/{public → dist}/index.html +9 -19
- package/package.json +57 -45
- package/src/BtApp.vue +34 -43
- package/src/components/BtBrandingLogo.vue +10 -18
- package/src/components/BtHeader.vue +34 -84
- package/src/components/BtMainContent.vue +12 -43
- package/src/components/BtNavBar.vue +25 -38
- package/src/components/BtNavItem.vue +25 -58
- package/src/components/BtNavUser.vue +65 -86
- package/src/components/BtProfileForm.vue +48 -39
- package/src/components/BtUserNewPasswordForm.vue +52 -74
- package/src/components/BtUserResendConfirmationForm.vue +45 -83
- package/src/components/BtUserResetPasswordForm.vue +45 -77
- package/src/components/BtUserSignInForm.vue +59 -75
- package/src/components/BtUserSignUpForm.vue +90 -103
- package/src/components/CommunityForm.vue +47 -39
- package/src/components/community/CommunityCard.vue +113 -0
- package/src/components/community/CommunityHeader.vue +91 -0
- package/src/components/community/CommunityList.vue +59 -0
- package/src/components/community/MemberRoleRow.vue +107 -0
- package/src/components/conversation/ConversationCard.vue +49 -0
- package/src/components/conversation/ConversationDetail.vue +53 -0
- package/src/components/conversation/ConversationList.vue +51 -0
- package/src/components/conversation/MessageForm.vue +45 -0
- package/src/components/conversation/MessageItem.vue +43 -0
- package/src/components/conversation/MessageList.vue +39 -0
- package/src/components/event/EventCard.vue +82 -0
- package/src/components/event/EventForm.vue +99 -0
- package/src/components/event/EventList.vue +47 -0
- package/src/components/invitation/InvitationCard.vue +56 -0
- package/src/components/invitation/InvitationForm.vue +70 -0
- package/src/components/invitation/InvitationList.vue +51 -0
- package/src/components/joatu/AgreementCard.vue +57 -0
- package/src/components/joatu/AgreementList.vue +51 -0
- package/src/components/joatu/OfferCard.vue +65 -0
- package/src/components/joatu/OfferForm.vue +82 -0
- package/src/components/joatu/OfferList.vue +51 -0
- package/src/components/joatu/RequestCard.vue +65 -0
- package/src/components/joatu/RequestForm.vue +82 -0
- package/src/components/joatu/RequestList.vue +51 -0
- package/src/components/page/PageCard.vue +55 -0
- package/src/components/page/PageDetail.vue +35 -0
- package/src/components/page/PageList.vue +51 -0
- package/src/components/person/MemberList.vue +61 -0
- package/src/components/person/PersonAvatar.vue +54 -0
- package/src/components/person/PersonCard.vue +47 -0
- package/src/components/post/PostCard.vue +105 -0
- package/src/components/post/PostDetail.vue +98 -0
- package/src/components/post/PostForm.vue +84 -0
- package/src/components/post/PostList.vue +53 -0
- package/src/components/role/BlockButton.vue +44 -0
- package/src/components/role/RoleBadge.vue +19 -0
- package/src/components/role/RoleGate.vue +62 -0
- package/src/components/role/RoleSelector.vue +29 -0
- package/src/components/shared/ExtensionSlot.vue +27 -0
- package/src/components/sync/OfflineBanner.vue +49 -0
- package/src/components/sync/SyncBadge.vue +108 -0
- package/src/components/sync/SyncStatusBar.vue +121 -0
- package/src/composables/useCommunities.js +19 -0
- package/src/composables/useConversations.js +5 -0
- package/src/composables/useEvents.js +28 -0
- package/src/composables/useInvitations.js +10 -0
- package/src/composables/useJoaTuAgreements.js +11 -0
- package/src/composables/useJoaTuOffers.js +10 -0
- package/src/composables/useJoaTuRequests.js +10 -0
- package/src/composables/useMembers.js +30 -0
- package/src/composables/useMessages.js +5 -0
- package/src/composables/useNotifications.js +5 -0
- package/src/composables/usePages.js +6 -0
- package/src/composables/usePersonBlocks.js +65 -0
- package/src/composables/usePosts.js +27 -0
- package/src/composables/useResource.js +137 -0
- package/src/composables/useRoles.js +94 -0
- package/src/composables/useSyncStatus.js +22 -0
- package/src/composables/useToaster.js +20 -0
- package/src/context.js +18 -0
- package/src/db/client.js +343 -0
- package/src/db/migrations/001_initial.sql +131 -0
- package/src/db/migrations/003_conversations_invitations_pages_joatu.sql +76 -0
- package/src/db/sync.js +276 -0
- package/src/endpoints/BtApiAuth.js +1 -1
- package/src/endpoints/BtApiV1.js +1 -1
- package/src/extension.js +45 -0
- package/src/i18n/index.js +103 -0
- package/src/i18n/locales/en.json +275 -0
- package/src/i18n/locales/es.json +275 -0
- package/src/i18n/locales/fr.json +223 -0
- package/src/i18n/locales/uk.json +275 -0
- package/src/index.js +168 -22
- package/src/layouts/CommunityLayout.vue +89 -0
- package/src/main.js +16 -12
- package/src/mixins/error-handling.js +6 -15
- package/src/mixins/toaster.js +15 -10
- package/src/pages/Communities.vue +59 -0
- package/src/pages/Error404.vue +10 -14
- package/src/pages/Home.vue +11 -18
- package/src/pages/Me.vue +39 -59
- package/src/pages/UserPasswordNew.vue +12 -68
- package/src/pages/UserPasswordReset.vue +15 -64
- package/src/pages/UserResendConfirmation.vue +39 -113
- package/src/pages/UserSignIn.vue +18 -67
- package/src/pages/UserSignUp.vue +15 -64
- package/src/pages/community/CommunityConversation.vue +31 -0
- package/src/pages/community/CommunityConversations.vue +18 -0
- package/src/pages/community/CommunityEvent.vue +39 -0
- package/src/pages/community/CommunityEvents.vue +58 -0
- package/src/pages/community/CommunityHome.vue +49 -0
- package/src/pages/community/CommunityJoaTu.vue +115 -0
- package/src/pages/community/CommunityMembers.vue +23 -0
- package/src/pages/community/CommunityPage.vue +31 -0
- package/src/pages/community/CommunityPages.vue +25 -0
- package/src/pages/community/CommunityPost.vue +28 -0
- package/src/pages/community/CommunityPosts.vue +58 -0
- package/src/pages/community/CommunitySettingsPage.vue +117 -0
- package/src/pages/community/RoleManagerPage.vue +93 -0
- package/src/plugins/bootstrap-vue.js +5 -5
- package/src/plugins/font-awesome.js +3 -2
- package/src/plugins/index.js +9 -4
- package/src/plugins/progress.js +16 -0
- package/src/pwa/index.js +156 -0
- package/src/pwa/sw-helpers.js +130 -0
- package/src/router/communityRoutes.js +78 -0
- package/src/router/index.js +30 -144
- package/src/slot-registry.js +15 -0
- package/src/stores/auth.js +134 -0
- package/src/stores/communities.js +59 -0
- package/src/stores/index.js +5 -0
- package/src/stores/menus.js +14 -0
- package/src/stores/people.js +48 -0
- package/src/stores/sync.js +93 -0
- package/src/stylesheets/sync-indicators.scss +34 -0
- package/.env.sample +0 -1
- package/.eslintrc.js +0 -51
- package/.gitlab-ci.yml +0 -14
- package/.travis/.rbenv-gemsets +0 -1
- package/.travis/.ruby-version +0 -1
- package/.travis.yml +0 -31
- package/babel.config.js +0 -5
- package/cypress.json +0 -3
- package/deploy/build.sh +0 -8
- package/eslint.config.js +0 -16
- package/postcss.config.js +0 -5
- package/src/eslint.config.js +0 -16
- package/src/forms/BtProfileFormSchema.js +0 -19
- package/src/forms/BtUserConfirmationFormSchema.js +0 -20
- package/src/forms/BtUserNewPasswordFormSchema.js +0 -29
- package/src/forms/BtUserResetPasswordFormSchema.js +0 -20
- package/src/forms/BtUserSignInFormSchema.js +0 -29
- package/src/forms/BtUserSignUpFormSchema.js +0 -63
- package/src/forms/CommunityFormSchema.js +0 -19
- package/src/plugins/vue-form-generator.js +0 -4
- package/src/plugins/vue-loading.js +0 -10
- package/src/registerServiceWorker.js +0 -32
- package/src/store/index.js +0 -32
- package/src/store/modules/authentication.js +0 -170
- package/src/store/modules/communities.js +0 -98
- package/src/store/modules/community-engine.js +0 -14
- package/src/store/modules/menus.js +0 -52
- package/src/store/modules/people.js +0 -88
- package/tests/e2e/.eslintrc.js +0 -12
- package/tests/e2e/plugins/index.js +0 -26
- package/tests/e2e/specs/home.js +0 -8
- package/tests/e2e/support/commands.js +0 -25
- package/tests/e2e/support/index.js +0 -20
- package/tests/unit/.eslintrc.js +0 -5
- package/tests/unit/example.spec.js +0 -13
- package/vue.config.js +0 -11
- package/webpack.config.js +0 -28
- /package/{public → dist}/_redirects +0 -0
- /package/{public → dist}/favicon.ico +0 -0
- /package/{public → dist}/img/favicon.ico +0 -0
- /package/{public → dist}/img/icons/android-chrome-192x192.png +0 -0
- /package/{public → dist}/img/icons/android-chrome-384x384.png +0 -0
- /package/{public → dist}/img/icons/apple-touch-icon.png +0 -0
- /package/{public → dist}/img/icons/favicon-16x16.png +0 -0
- /package/{public → dist}/img/icons/favicon-32x32.png +0 -0
- /package/{public → dist}/img/icons/favicon.ico +0 -0
- /package/{public → dist}/img/icons/mstile-150x150.png +0 -0
- /package/{public → dist}/img/icons/safari-pinned-tab.svg +0 -0
- /package/{public → dist}/robots.txt +0 -0
package/README.md
CHANGED
|
@@ -1,2 +1,141 @@
|
|
|
1
1
|
# Community Engine Vue
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
Vue 2 plugin for the [Better Together Community Engine](https://bebettertogether.ca) platform. Provides shared components, Vuex store modules, Vue Router routes, and API clients for Better Together host applications.
|
|
4
|
+
|
|
5
|
+
> **Note:** This package targets Vue 2. A Vue 3 migration is planned — see [Migration Plan](#vue-3-migration-plan).
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
yarn add @bettertogether/community-engine-vue
|
|
11
|
+
# or
|
|
12
|
+
npm install @bettertogether/community-engine-vue
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
Register the plugin in your app's entry point:
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
import Vue from 'vue'
|
|
21
|
+
import CommunityEngineVue from '@bettertogether/community-engine-vue'
|
|
22
|
+
|
|
23
|
+
Vue.use(CommunityEngineVue)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Router integration
|
|
27
|
+
|
|
28
|
+
Import and spread the provided routes into your own router:
|
|
29
|
+
|
|
30
|
+
```js
|
|
31
|
+
import { BtRoutes } from '@bettertogether/community-engine-vue'
|
|
32
|
+
|
|
33
|
+
const router = new VueRouter({
|
|
34
|
+
mode: 'history',
|
|
35
|
+
routes: [
|
|
36
|
+
...BtRoutes,
|
|
37
|
+
// your app's own routes
|
|
38
|
+
],
|
|
39
|
+
})
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Store integration
|
|
43
|
+
|
|
44
|
+
Import and merge the provided store modules and plugins:
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
import { BtStoreModules, BtStorePlugins } from '@bettertogether/community-engine-vue'
|
|
48
|
+
|
|
49
|
+
export default new Vuex.Store({
|
|
50
|
+
modules: { ...BtStoreModules },
|
|
51
|
+
plugins: [...BtStorePlugins],
|
|
52
|
+
})
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Environment Variables
|
|
56
|
+
|
|
57
|
+
| Variable | Default | Description |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| `VUE_APP_BETTER_TOGETHER_API_URI` | `http://localhost:3000` | Base URL of the Community Engine Rails API |
|
|
60
|
+
|
|
61
|
+
## Exported API Surface
|
|
62
|
+
|
|
63
|
+
### Components
|
|
64
|
+
|
|
65
|
+
| Component | Description |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `BtHeader` | App header with branding and navigation |
|
|
68
|
+
| `BtNavBar` | Navigation bar |
|
|
69
|
+
| `BtNavItem` | Individual nav link |
|
|
70
|
+
| `BtNavUser` | Authenticated user menu |
|
|
71
|
+
| `BtBrandingLogo` | Logo component |
|
|
72
|
+
| `BtMainContent` | Main layout wrapper / router-view host |
|
|
73
|
+
| `BtUserSignInForm` | Login form |
|
|
74
|
+
| `BtUserSignUpForm` | Registration form |
|
|
75
|
+
| `BtUserResetPasswordForm` | Password reset request form |
|
|
76
|
+
| `BtUserNewPasswordForm` | New password form (token-based) |
|
|
77
|
+
| `BtUserResendConfirmationForm` | Resend confirmation email form |
|
|
78
|
+
| `BtProfileForm` | User profile editing form |
|
|
79
|
+
| `CommunityForm` | Community creation/editing form |
|
|
80
|
+
|
|
81
|
+
### Vuex Store Modules
|
|
82
|
+
|
|
83
|
+
All modules are namespaced under `CommunityEngine/`:
|
|
84
|
+
|
|
85
|
+
| Module | Namespace | Description |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| Authentication | `CommunityEngine/Authentication` | Login state, current user |
|
|
88
|
+
| Communities | `CommunityEngine/Communities` | Community data |
|
|
89
|
+
| Menus | `CommunityEngine/Menus` | Header and nav menu items |
|
|
90
|
+
| People | `CommunityEngine/People` | User/person profiles |
|
|
91
|
+
|
|
92
|
+
### Router Routes (`BtRoutes`)
|
|
93
|
+
|
|
94
|
+
| Path | Name |
|
|
95
|
+
|---|---|
|
|
96
|
+
| `/` | Home |
|
|
97
|
+
| `/me` | Me (user profile) |
|
|
98
|
+
| `/users/sign-in` | Sign In |
|
|
99
|
+
| `/users/sign-up` | Sign Up |
|
|
100
|
+
| `/users/password/reset` | Reset Password |
|
|
101
|
+
| `/users/password/new` | New Password |
|
|
102
|
+
| `/users/confirmation/resend` | Resend Confirmation |
|
|
103
|
+
| `/users/confirmation` | Account Confirmation |
|
|
104
|
+
|
|
105
|
+
## Development
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Install dependencies
|
|
109
|
+
yarn install
|
|
110
|
+
|
|
111
|
+
# Start dev server
|
|
112
|
+
yarn serve
|
|
113
|
+
|
|
114
|
+
# Build for production
|
|
115
|
+
yarn build
|
|
116
|
+
|
|
117
|
+
# Run E2E tests
|
|
118
|
+
yarn test:e2e
|
|
119
|
+
|
|
120
|
+
# Run unit tests
|
|
121
|
+
yarn test:unit
|
|
122
|
+
|
|
123
|
+
# Lint
|
|
124
|
+
yarn lint
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Vue 3 Migration Plan
|
|
128
|
+
|
|
129
|
+
Migration to Vue 3 is planned. Key changes will include:
|
|
130
|
+
|
|
131
|
+
- Vue 2 → Vue 3 (with `@vue/compat` bridge phase)
|
|
132
|
+
- Vuex → Pinia
|
|
133
|
+
- Vue Router 3 → Vue Router 4
|
|
134
|
+
- BootstrapVue 2 → BootstrapVue Next (or Oruga + Bootstrap 5)
|
|
135
|
+
- Webpack (Vue CLI) → Vite
|
|
136
|
+
- Options API → Composition API (`<script setup>`)
|
|
137
|
+
- Auth guards rewritten as reactive Pinia-based `beforeEach` callbacks
|
|
138
|
+
|
|
139
|
+
## License
|
|
140
|
+
|
|
141
|
+
LGPL-3.0-or-later
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{N as f,O as v,o as m,d as y,w as l,e as B,aj as C,a2 as n,f as a,y as _,Q as b,ak as g,A as o,q as h,al as O}from"./index-COo3Jb7v.js";const V=f({__name:"BBadge",props:{dotIndicator:{type:Boolean,default:!1},pill:{type:Boolean,default:!1},placement:{default:void 0},tag:{default:"span"},active:{type:Boolean,default:void 0},activeClass:{default:void 0},disabled:{type:Boolean,default:void 0},exactActiveClass:{default:void 0},href:{default:void 0},icon:{type:Boolean,default:void 0},noRel:{type:Boolean},opacity:{default:void 0},opacityHover:{default:void 0},prefetch:{type:Boolean},prefetchOn:{},noPrefetch:{type:Boolean},prefetchedClass:{},rel:{default:void 0},replace:{type:Boolean,default:void 0},routerComponentName:{default:void 0},stretched:{type:Boolean,default:!1},target:{default:void 0},to:{default:void 0},underlineOffset:{default:void 0},underlineOffsetHover:{default:void 0},underlineOpacity:{default:void 0},underlineOpacityHover:{default:void 0},underlineVariant:{default:void 0},variant:{default:"secondary"},bgVariant:{default:null},textVariant:{default:null}},setup(s){const e=v(s,"BBadge"),{computedLink:d,computedLinkProps:r}=g(e,["active","activeClass","append","disabled","href","rel","replace","routerComponentName","target","to","opacity","opacityHover","underlineVariant","underlineOffset","underlineOffsetHover","underlineOpacity","underlineOpacityHover","icon"]),i=o(()=>d.value?h:e.tag),p=o(()=>{const t=e.placement??(e.dotIndicator?"top-end":void 0);return["position-absolute","translate-middle",{"start-0 top-0":t==="top-start","start-0 top-50":t==="start","start-0 top-100":t==="bottom-start","start-50 top-0":t==="top","start-50 top-100":t==="bottom","start-100 top-0":t==="top-end","start-100 top-50":t==="end","start-100 top-100":t==="bottom-end"}]}),u=O(e),c=o(()=>[u.value,e.placement!==void 0||e.dotIndicator===!0?p.value:void 0,{active:e.active,disabled:e.disabled,"rounded-pill":e.pill,"p-2 border border-light rounded-circle":e.dotIndicator,"text-decoration-none":d.value}]);return(t,H)=>(m(),y(b(i.value),n({class:["badge",c.value]},a(r)),{default:l(()=>[B(C,n({skip:a(e).dotIndicator!==!0,tag:"span"},a(e).dotIndicator?{class:"visually-hidden"}:{}),{default:l(()=>[_(t.$slots,"default")]),_:3},16,["skip"])]),_:3},16,["class"]))}});export{V as _};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{A as n,U as I,N as g,O as b,Y as N,o as r,d as s,f as e,P as h,Q as x,a8 as z,w as u,y as c,i as f,t as p,E as B,ac as H,e as R,am as F,a2 as S,al as k,an as j,ao as T}from"./index-COo3Jb7v.js";const D=d=>{const i=(t,a)=>{const o=a===null?"":`-${a}`;return t==="circle"?`rounded${o}-circle`:t==="pill"?`rounded${o}-pill`:typeof t=="number"||t==="0"||t==="1"||t==="2"||t==="3"||t==="4"||t==="5"?`rounded${o}-${t}`:t==="none"?`rounded${o}-0`:t==="sm"?`rounded${o}-1`:t==="lg"?`rounded${o}-5`:`rounded${o}`};return n(()=>{const t=I(d);return{[`${i(t.rounded,null)}`]:!!t.rounded,[`${i(t.roundedTop,"top")}`]:!!t.roundedTop,[`${i(t.roundedBottom,"bottom")}`]:!!t.roundedBottom,[`${i(t.roundedStart,"start")}`]:!!t.roundedStart,[`${i(t.roundedEnd,"end")}`]:!!t.roundedEnd}})},G=g({__name:"BImg",props:{blank:{type:Boolean,default:!1},blankColor:{default:"transparent"},block:{type:Boolean,default:!1},fluid:{type:Boolean,default:!1},fluidGrow:{type:Boolean,default:!1},height:{default:void 0},tag:{default:"img"},lazy:{type:Boolean,default:!1},sizes:{default:void 0},src:{default:void 0},srcset:{default:void 0},thumbnail:{type:Boolean,default:!1},width:{default:void 0},placement:{default:void 0},rounded:{type:[Boolean,String,Number],default:!1},roundedTop:{type:[Boolean,String,Number],default:void 0},roundedBottom:{type:[Boolean,String,Number],default:void 0},roundedStart:{type:[Boolean,String,Number],default:void 0},roundedEnd:{type:[Boolean,String,Number],default:void 0}},setup(d){const t=b(d,"BImg"),a=N(()=>t.height??NaN),o=N(()=>t.width??NaN),_=D(()=>({rounded:t.rounded,roundedTop:t.roundedTop,roundedBottom:t.roundedBottom,roundedStart:t.roundedStart,roundedEnd:t.roundedEnd})),V=n(()=>typeof t.srcset=="string"?t.srcset.split(",").filter(l=>l).join(","):Array.isArray(t.srcset)?t.srcset.filter(l=>l).join(","):void 0),$=n(()=>typeof t.sizes=="string"?t.sizes.split(",").filter(l=>l).join(","):Array.isArray(t.sizes)?t.sizes.filter(l=>l).join(","):void 0),m=n(()=>{const l=Number.isNaN(o.value)?void 0:o.value,v=Number.isNaN(a.value)?void 0:a.value;if(t.blank){if(l!==void 0&&v===void 0)return{height:l,width:l};if(l===void 0&&v!==void 0)return{height:v,width:v};if(l===void 0&&v===void 0)return{height:1,width:1}}return{width:l,height:v}}),C=n(()=>E(m.value.width,m.value.height,t.blankColor)),y=n(()=>({"float-start":t.placement==="start","float-end":t.placement==="end","mx-auto":t.placement==="center"})),w=n(()=>[_.value,y.value,{"img-thumbnail":t.thumbnail,"img-fluid":t.fluid||t.fluidGrow,"w-100":t.fluidGrow,"d-block":t.block||t.placement==="center"}]),E=(l,v,P)=>`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`<svg width="${l}" height="${v}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${l} ${v}" preserveAspectRatio="none">
|
|
2
|
+
<rect width="100%" height="100%" style="fill:${P};"></rect>
|
|
3
|
+
</svg>`)}`;return(l,v)=>(r(),s(x(e(t).tag),{class:h([w.value,"b-img"]),src:e(t).blank?C.value:e(t).src,width:m.value.width||void 0,height:m.value.height||void 0,srcset:e(t).blank?void 0:V.value,sizes:e(t).blank?void 0:$.value,loading:e(t).lazy?"lazy":"eager"},null,8,["class","src","width","height","srcset","sizes","loading"]))}}),U=g({__name:"BCardImg",props:{placement:{default:"top"},blank:{type:Boolean,default:void 0},blankColor:{default:void 0},block:{type:Boolean,default:void 0},fluid:{type:Boolean,default:void 0},fluidGrow:{type:Boolean,default:void 0},height:{default:void 0},tag:{},lazy:{type:Boolean,default:void 0},sizes:{default:void 0},src:{default:void 0},srcset:{default:void 0},thumbnail:{type:Boolean,default:void 0},width:{default:void 0},rounded:{type:[Boolean,String,Number],default:void 0},roundedTop:{type:[Boolean,String,Number],default:void 0},roundedBottom:{type:[Boolean,String,Number],default:void 0},roundedStart:{type:[Boolean,String,Number],default:void 0},roundedEnd:{type:[Boolean,String,Number],default:void 0}},setup(d){const t=b(d,"BCardImg"),a=n(()=>({"card-img-top":t.placement==="top","card-img-end":t.placement==="end","card-img-bottom":t.placement==="bottom","card-img-start":t.placement==="start","card-img":t.placement==="overlay"})),o=n(()=>j(t,["placement"]));return(_,V)=>(r(),s(G,S(o.value,{class:a.value}),null,16,["class"]))}}),A=g({__name:"BCardHeadFoot",props:{borderVariant:{default:null},tag:{default:"div"},text:{default:void 0},variant:{default:null},bgVariant:{default:null},textVariant:{default:null}},setup(d){const t=k(d);return(a,o)=>(r(),s(x(a.tag),{class:h(e(t))},{default:u(()=>[c(a.$slots,"default",{},()=>[f(p(a.text),1)])]),_:3},8,["class"]))}}),W=g({__name:"BCardHeader",props:{borderVariant:{default:void 0},tag:{default:"div"},text:{default:void 0},variant:{default:void 0},bgVariant:{default:void 0},textVariant:{default:void 0}},setup(d){const t=b(d,"BCardHeader");return(a,o)=>(r(),s(A,S({class:"card-header"},e(t)),{default:u(()=>[c(a.$slots,"default")]),_:3},16))}}),O=g({__name:"BCardTitle",props:{tag:{default:"h4"},text:{default:void 0}},setup(d){const t=b(d,"BCardTitle");return(a,o)=>(r(),s(x(e(t).tag),{class:"card-title"},{default:u(()=>[c(a.$slots,"default",{},()=>[f(p(e(t).text),1)])]),_:3}))}}),Q=g({__name:"BCardSubtitle",props:{text:{default:void 0},tag:{default:"h6"},textVariant:{default:"body-secondary"}},setup(d){const t=b(d,"BCardSubtitle"),a=k(t);return(o,_)=>(r(),s(x(e(t).tag),{class:h(["card-subtitle mb-2",e(a)])},{default:u(()=>[c(o.$slots,"default",{},()=>[f(p(e(t).text),1)])]),_:3},8,["class"]))}}),Y=g({__name:"BCardBody",props:{overlay:{type:Boolean,default:!1},subtitle:{default:void 0},subtitleTag:{default:"h4"},subtitleTextVariant:{default:void 0},tag:{default:"div"},text:{default:void 0},title:{default:void 0},titleTag:{default:"h4"},variant:{default:null},bgVariant:{default:null},textVariant:{default:null}},setup(d){const t=b(d,"BCardBody"),a=z(),o=n(()=>!T(a.title)),_=n(()=>!T(a.subtitle)),V=k(t),$=n(()=>[V.value,t.overlay?"card-img-overlay":"card-body"]);return(m,C)=>(r(),s(x(e(t).tag),{class:h($.value)},{default:u(()=>[e(t).title||o.value?(r(),s(O,{key:0,tag:e(t).titleTag},{default:u(()=>[c(m.$slots,"title",{},()=>[f(p(e(t).title),1)])]),_:3},8,["tag"])):B("",!0),e(t).subtitle||_.value?(r(),s(Q,{key:1,tag:e(t).subtitleTag,"text-variant":e(t).subtitleTextVariant},{default:u(()=>[c(m.$slots,"subtitle",{},()=>[f(p(e(t).subtitle),1)])]),_:3},8,["tag","text-variant"])):B("",!0),c(m.$slots,"default",{},()=>[f(p(e(t).text),1)])]),_:3},8,["class"]))}}),q=g({__name:"BCardFooter",props:{borderVariant:{default:void 0},tag:{default:"div"},text:{default:void 0},variant:{default:void 0},bgVariant:{default:void 0},textVariant:{default:void 0}},setup(d){const t=b(d,"BCardFooter");return(a,o)=>(r(),s(A,S({class:"card-footer"},e(t)),{default:u(()=>[c(a.$slots,"default",{},()=>[f(p(e(t).text),1)])]),_:3},16))}}),K=g({__name:"BCard",props:{align:{default:void 0},bodyBgVariant:{default:void 0},bodyClass:{default:void 0},bodyTag:{default:"div"},bodyText:{default:""},bodyTextVariant:{default:void 0},borderVariant:{default:null},footer:{default:void 0},footerBgVariant:{default:void 0},footerBorderVariant:{default:void 0},footerClass:{default:void 0},footerTag:{default:"div"},footerTextVariant:{default:void 0},footerVariant:{default:null},header:{default:void 0},headerBgVariant:{default:void 0},headerBorderVariant:{default:void 0},headerClass:{default:void 0},headerTag:{default:"div"},headerTextVariant:{default:void 0},headerVariant:{default:null},imgAlt:{default:void 0},imgPlacement:{default:"top"},imgHeight:{default:void 0},imgSrc:{default:void 0},imgWidth:{default:void 0},noBody:{type:Boolean,default:!1},subtitle:{default:void 0},subtitleTag:{default:"h6"},subtitleTextVariant:{default:"body-secondary"},tag:{default:"div"},title:{default:void 0},titleTag:{default:"h4"},variant:{default:null},bgVariant:{default:null},textVariant:{default:null}},setup(d){const t=b(d,"BCard"),a=z(),o=n(()=>!T(a.header)),_=n(()=>!T(a.footer)),V=k(t),$=n(()=>[V.value,{[`text-${t.align}`]:t.align!==void 0,"flex-row":t.imgPlacement==="start","flex-row-reverse":t.imgPlacement==="end"}]),m=n(()=>({src:t.imgSrc,alt:t.imgAlt,height:t.imgHeight,width:t.imgWidth,placement:t.imgPlacement})),C=H();return(y,w)=>(r(),s(x(e(t).tag),{class:h(["card",$.value])},{default:u(()=>[R(e(C).define,null,{default:u(()=>[c(y.$slots,"img",{},()=>[e(t).imgSrc?(r(),s(U,F(S({key:0},m.value)),null,16)):B("",!0)])]),_:3}),e(t).imgPlacement!=="bottom"?(r(),s(e(C).reuse,{key:0})):B("",!0),e(t).header||o.value?(r(),s(W,{key:1,"bg-variant":e(t).headerBgVariant,variant:e(t).headerVariant,"border-variant":e(t).headerBorderVariant,tag:e(t).headerTag,"text-variant":e(t).headerTextVariant,class:h(e(t).headerClass)},{default:u(()=>[c(y.$slots,"header",{},()=>[f(p(e(t).header),1)])]),_:3},8,["bg-variant","variant","border-variant","tag","text-variant","class"])):B("",!0),e(t).noBody?c(y.$slots,"default",{key:3},()=>[f(p(e(t).bodyText),1)]):(r(),s(Y,{key:2,overlay:e(t).imgPlacement==="overlay","bg-variant":e(t).bodyBgVariant,tag:e(t).bodyTag,"text-variant":e(t).bodyTextVariant,subtitle:e(t).subtitle,"subtitle-tag":e(t).subtitleTag,"subtitle-text-variant":e(t).subtitleTextVariant,title:e(t).title,"title-tag":e(t).titleTag,class:h(e(t).bodyClass)},{default:u(()=>[c(y.$slots,"default",{},()=>[f(p(e(t).bodyText),1)])]),_:3},8,["overlay","bg-variant","tag","text-variant","subtitle","subtitle-tag","subtitle-text-variant","title","title-tag","class"])),e(t).footer||_.value?(r(),s(q,{key:4,"bg-variant":e(t).footerBgVariant,"border-variant":e(t).footerBorderVariant,variant:e(t).footerVariant,tag:e(t).footerTag,"text-variant":e(t).footerTextVariant,class:h(e(t).footerClass)},{default:u(()=>[c(y.$slots,"footer",{},()=>[f(p(e(t).footer),1)])]),_:3},8,["bg-variant","border-variant","variant","tag","text-variant","class"])):B("",!0),e(t).imgPlacement==="bottom"?(r(),s(e(C).reuse,{key:5})):B("",!0)]),_:3},8,["class"]))}}),L=g({__name:"BCardText",props:{tag:{default:"p"},text:{default:void 0}},setup(d){const t=b(d,"BCardText");return(a,o)=>(r(),s(x(e(t).tag),{class:"card-text"},{default:u(()=>[c(a.$slots,"default",{},()=>[f(p(e(t).text),1)])]),_:3}))}});export{Y as _,L as a,K as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{N as $,O as x,o,n as c,y as n,f as t,A as p,U as g,V as F,W,X as j,Y as G,Z as L,$ as P,a0 as U,a1 as E,F as y,C,d as S,w as k,a2 as B,i as q,t as h,P as R,a3 as X,a4 as Y,a5 as Z}from"./index-COo3Jb7v.js";const H=["value","disabled"],I=$({__name:"BFormSelectOption",props:{disabled:{type:Boolean,default:!1},value:{default:void 0}},setup(i){const s=x(i,"BFormSelectOption");return(e,u)=>(o(),c("option",{value:t(s).value,disabled:t(s).disabled},[n(e.$slots,"default")],8,H))}}),D=(i,m)=>{const s=l=>typeof l=="object"&&l!==null&&"label"in l,e=l=>{const a=g(m);if(typeof l=="string")return{value:l,text:l};if(typeof l=="number")return{value:l,text:`${l}`};if(l instanceof Date)return{value:l,text:l.toLocaleString()};const f=F(l,a.valueField),v=F(l,a.textField),z=F(l,a.disabledField),_=a.optionsField?F(l,a.optionsField):void 0;return _!==void 0?{label:F(l,a.labelField)||v,options:_}:{...typeof l=="object"?l:void 0,value:f,text:v,disabled:z}},u=l=>l.map(a=>e(a));return{normalizedOptions:p(()=>u(g(i))),isComplex:s}},J=["label"],K=$({__name:"BFormSelectOptionGroup",props:{disabledField:{default:"disabled"},label:{default:void 0},options:{default:()=>[]},textField:{default:"text"},valueField:{default:"value"}},setup(i){const s=x(i,"BFormSelectOptionGroup"),{normalizedOptions:e}=D(()=>s.options,s),u=p(()=>e.value);return(r,l)=>(o(),c("optgroup",{label:t(s).label},[n(r.$slots,"first"),(o(!0),c(y,null,C(u.value,(a,f)=>(o(),S(I,B({key:f,disabled:a.disabled,value:a.value,ref_for:!0},r.$attrs),{default:k(()=>[n(r.$slots,"option",B({ref_for:!0},a),()=>[q(h(a.text),1)])]),_:2},1040,["disabled","value"]))),128)),n(r.$slots,"default")],8,J))}}),Q=["id","name","form","multiple","size","disabled","required","aria-required","aria-invalid"],le=$({__name:"BFormSelect",props:X({ariaInvalid:{type:[Boolean,String],default:void 0},autofocus:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},disabledField:{default:"disabled"},form:{default:void 0},id:{default:void 0},labelField:{default:"label"},multiple:{type:Boolean,default:!1},name:{default:void 0},options:{default:()=>[]},optionsField:{default:"options"},plain:{type:Boolean,default:!1},required:{type:Boolean,default:!1},selectSize:{default:0},size:{default:"md"},state:{type:[Boolean,null],default:null},textField:{default:"text"},valueField:{default:"value"}},{modelValue:{default:""},modelModifiers:{}}),emits:["update:modelValue"],setup(i,{expose:m}){const e=x(i,"BFormSelect"),u=W(i,"modelValue"),r=j(()=>e.id,"input"),l=G(()=>e.selectSize),a=Z(()=>e.state),f=L("_input"),{focused:v}=P(f,{initialValue:e.autofocus}),z=p(()=>[a.value,{"form-control":e.plain,[`form-control-${e.size}`]:e.size!=="md"&&e.plain,"form-select":!e.plain,[`form-select-${e.size}`]:e.size!=="md"&&!e.plain}]),_=p(()=>l.value||e.plain?l.value:void 0),M=Y(()=>e.ariaInvalid,()=>e.state),{normalizedOptions:N,isComplex:w}=D(()=>e.options,e),A=p(()=>N.value),O=p({get:()=>u.value,set:b=>{u.value=b}});return m({blur:()=>{v.value=!1},element:f,focus:()=>{v.value=!0}}),(b,V)=>U((o(),c("select",{id:t(r),ref:"_input","onUpdate:modelValue":V[0]||(V[0]=d=>O.value=d),class:R(z.value),name:t(e).name,form:t(e).form||void 0,multiple:t(e).multiple||void 0,size:_.value,disabled:t(e).disabled,required:t(e).required||void 0,"aria-required":t(e).required||void 0,"aria-invalid":t(M)},[n(b.$slots,"first"),(o(!0),c(y,null,C(A.value,(d,T)=>(o(),c(y,{key:T},[t(w)(d)?(o(),S(K,{key:0,label:d.label,options:d.options,"value-field":t(e).valueField,"text-field":t(e).textField,"disabled-field":t(e).disabledField},null,8,["label","options","value-field","text-field","disabled-field"])):(o(),S(I,{key:1,value:d.value,disabled:d.disabled},{default:k(()=>[n(b.$slots,"option",B({ref_for:!0},d),()=>[q(h(d.text),1)])]),_:2},1032,["value","disabled"]))],64))),128)),n(b.$slots,"default")],10,Q)),[[E,O.value]])}});export{le as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{N as c,O as d,o as i,d as u,w as g,y as r,P as f,Q as v,f as m,A as l,S as p,T as C}from"./index-COo3Jb7v.js";const x=c({__name:"BRow",props:{tag:{default:"div"},gutterX:{default:void 0},gutterY:{default:void 0},noGutters:{type:Boolean,default:!1},alignV:{default:void 0},alignH:{default:void 0},alignContent:{default:void 0},cols:{default:void 0},colsSm:{default:void 0},colsMd:{default:void 0},colsLg:{default:void 0},colsXl:{default:void 0},colsXxl:{default:void 0}},setup(s){const o=d(s,"BRow"),t=p(()=>o.alignH),e=l(()=>C({cols:o.cols,colsLg:o.colsLg,colsMd:o.colsMd,colsSm:o.colsSm,colsXl:o.colsXl,colsXxl:o.colsXxl},["cols","colsLg","colsMd","colsSm","colsXl","colsXxl"],"cols","row-cols")),a=l(()=>[e.value,{[`gx-${o.gutterX}`]:o.gutterX!==void 0,[`gy-${o.gutterY}`]:o.gutterY!==void 0,"g-0":o.noGutters,[`align-items-${o.alignV}`]:o.alignV!==void 0,[t.value]:o.alignH!==void 0,[`align-content-${o.alignContent}`]:o.alignContent!==void 0}]);return(n,_)=>(i(),u(v(m(o).tag),{class:f(["row",a.value])},{default:g(()=>[r(n.$slots,"default")]),_:3},8,["class"]))}});export{x as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as z,u as C,o as u,d as $,w as a,e as s,f as e,y as m,p as d,t as _,i as v,h as V,z as A,A as w,n as b,B as F,F as N,C as q,D,r as I,_ as B,g as M,v as O,j,k as U,a as x,x as E,E as H,G as L,H as T,l as G,b as P}from"./index-COo3Jb7v.js";import{_ as R}from"./BRow.vue_vue_type_script_setup_true_lang-69TY75-8-DJdEdyx7.js";import{_ as J}from"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import{_ as K,a as Q,b as W}from"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import{S as X}from"./SyncBadge-B1JBsdUk.js";import{_ as Y}from"./ExtensionSlot-DJKbrq4c.js";const Z={class:"bt-community-card__name"},ee={class:"bt-community-card__meta"},te={class:"bt-community-card__actions"},ie={__name:"CommunityCard",props:{community:{type:Object,required:!0}},emits:["view"],setup(o){const{t:l}=C(),t=o,y=w(()=>t.community.cover_image_url?{backgroundImage:`url(${t.community.cover_image_url})`,backgroundSize:"cover",backgroundPosition:"center"}:{backgroundColor:"var(--bt-primary, #4f46e5)"}),r=w(()=>({public:"success",private:"danger",protected:"warning"})[t.community.privacy]??"secondary"),n=w(()=>{const i=t.community.description||"";return i.length>120?i.slice(0,120)+"…":i});return(i,f)=>(u(),$(e(W),{class:"bt-community-card"},{header:a(()=>[m(i.$slots,"header",{},()=>[d("div",{class:"bt-community-card__cover",style:A(y.value)},[m(i.$slots,"sync-badge",{},()=>[s(X,{item:o.community},null,8,["item"])],!0)],4)],!0)]),footer:a(()=>[m(i.$slots,"footer",{},()=>[d("div",te,[s(e(V),{variant:"outline-primary",size:"sm",onClick:f[0]||(f[0]=c=>i.$emit("view",o.community))},{default:a(()=>[v(_(e(l)("bt.communities.view")),1)]),_:1}),s(Y,{target:"CommunityCard",slot:"footer",context:{item:o.community}},null,8,["context"])])],!0)]),default:a(()=>[s(e(K),null,{default:a(()=>[m(i.$slots,"title",{},()=>[d("h5",Z,_(o.community.name),1)],!0),m(i.$slots,"meta",{},()=>[d("div",ee,[s(e(J),{variant:r.value,class:"me-1"},{default:a(()=>[v(_(o.community.privacy),1)]),_:1},8,["variant"])])],!0),m(i.$slots,"body",{},()=>[s(e(Q),{class:"bt-community-card__description"},{default:a(()=>[v(_(n.value),1)]),_:1})],!0)]),_:3})]),_:3}))}},se=z(ie,[["__scopeId","data-v-8eac56ed"]]),ae={class:"bt-community-list"},oe={key:0,class:"bt-community-list__loading"},ne={key:1,class:"bt-community-list__empty"},me={class:"text-muted"},le={__name:"CommunityList",props:{communities:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},emits:["view"],setup(o){const{t:l}=C();return(t,y)=>(u(),b("div",ae,[m(t.$slots,"header"),o.loading?(u(),b("div",oe,[m(t.$slots,"loading",{},()=>[s(e(F),{label:e(l)("bt.communities.loading")},null,8,["label"])])])):o.communities.length?(u(),$(e(R),{key:2},{default:a(()=>[(u(!0),b(N,null,q(o.communities,(r,n)=>(u(),$(e(D),{key:r.id,cols:"12",md:"6",lg:"4",class:"mb-4"},{default:a(()=>[m(t.$slots,"item",{item:r,index:n},()=>[s(se,{community:r,onView:i=>t.$emit("view",r)},null,8,["community","onView"])])]),_:2},1024))),128))]),_:3})):(u(),b("div",ne,[m(t.$slots,"empty",{},()=>[d("p",me,_(e(l)("bt.communities.list_empty")),1)])])),m(t.$slots,"footer")]))}},re={__name:"CommunityForm",props:{model:{type:Object,default:()=>({})}},emits:["submit"],setup(o,{emit:l}){const{t}=C(),y=o,r=l,n=I({name:y.model.name||"",description:y.model.description||""});function i(){r("submit",{...n})}return(f,c)=>(u(),$(e(U),{onSubmit:j(i,["prevent"])},{default:a(()=>[s(e(B),{label:e(t)("bt.communities.name_label"),"label-for":"community-name"},{default:a(()=>[s(e(M),{id:"community-name",modelValue:n.name,"onUpdate:modelValue":c[0]||(c[0]=p=>n.name=p),type:"text",required:"",placeholder:e(t)("bt.communities.name_label")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(e(B),{label:e(t)("bt.communities.description_label"),"label-for":"community-description"},{default:a(()=>[s(e(O),{id:"community-description",modelValue:n.description,"onUpdate:modelValue":c[1]||(c[1]=p=>n.description=p),rows:"3",required:"",placeholder:e(t)("bt.communities.description_label")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(e(V),{type:"submit",variant:"primary"},{default:a(()=>[v(_(e(t)("bt.communities.save")),1)]),_:1})]),_:1}))}},ce={class:"bt-communities-page"},ue={class:"container py-4"},de={class:"d-flex align-items-center justify-content-between mb-4"},$e={__name:"Communities",setup(o){const{t:l}=C(),t=P(),y=x(),{items:r,loading:n,list:i,create:f}=T(),c=G(!1);E(()=>i());function p(g){t.push({name:"CommunityHome",params:{communitySlug:g.slug}})}async function k(g){await f(g),c.value=!1}return(g,h)=>(u(),b("div",ce,[d("div",ue,[d("div",de,[d("h1",null,_(e(l)("bt.navigation.communities")),1),e(y).isAuthenticated?(u(),$(e(V),{key:0,variant:"primary",onClick:h[0]||(h[0]=S=>c.value=!0)},{default:a(()=>[v(_(e(l)("bt.communities.new")),1)]),_:1})):H("",!0)]),s(le,{communities:e(r),loading:e(n),onView:p},null,8,["communities","loading"]),s(e(L),{modelValue:c.value,"onUpdate:modelValue":h[1]||(h[1]=S=>c.value=S),title:e(l)("bt.communities.create"),onOk:j(k,["prevent"])},{default:a(()=>[s(re,{onSubmit:k})]),_:1},8,["modelValue","title"])])]))}};export{$e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.bt-community-card__cover[data-v-8eac56ed]{height:120px;position:relative;border-radius:4px 4px 0 0}.bt-community-card__cover .sync-badge[data-v-8eac56ed]{position:absolute;top:8px;right:8px}.bt-community-card__name[data-v-8eac56ed]{font-weight:600;margin-bottom:.25rem}.bt-community-card__meta[data-v-8eac56ed]{margin-bottom:.5rem}.bt-community-card__description[data-v-8eac56ed]{font-size:.875rem;color:#6b7280}.bt-community-card__actions[data-v-8eac56ed]{display:flex;gap:.5rem;align-items:center}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.bt-message-item__avatar-circle[data-v-bc0e6727]{width:32px;height:32px;border-radius:50%;background:#6c757d;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:600}.bt-message-item__content[data-v-bc0e6727]{font-size:.9rem}.bt-message-list[data-v-ab573b84]{max-height:400px;overflow-y:auto;padding:1rem;border:1px solid #dee2e6;border-radius:.5rem}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as M,u as g,o as n,n as l,p as d,t as m,f as s,e as _,A as y,y as f,i as $,F as j,C as V,d as x,w as h,_ as B,v as I,a6 as L,j as w,h as N,k as A,l as k,M as S,a as D,a7 as F,E as K,x as T,I as E}from"./index-COo3Jb7v.js";import{S as C}from"./SyncBadge-B1JBsdUk.js";const O={class:"bt-message-item d-flex gap-2 mb-2"},R={class:"bt-message-item__avatar"},U={class:"bt-message-item__avatar-circle"},q={class:"bt-message-item__body flex-grow-1"},z={class:"d-flex align-items-center gap-2 mb-1"},P={class:"bt-message-item__author fw-semibold"},G={class:"text-muted"},H={class:"bt-message-item__content"},J={__name:"MessageItem",props:{message:{type:Object,required:!0}},setup(e){const{t:i}=g(),t=e,c=y(()=>(t.message.author_name||"?").split(" ").map(u=>u[0]).slice(0,2).join("").toUpperCase()),a=y(()=>t.message._local_updated?new Date(t.message._local_updated).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):"");return(r,u)=>(n(),l("div",O,[d("div",R,[d("div",U,m(c.value),1)]),d("div",q,[d("div",z,[d("span",P,m(e.message.author_name||s(i)("bt.messages.author_unknown")),1),d("small",G,m(a.value),1),_(C,{item:e.message},null,8,["item"])]),d("div",H,m(e.message.content),1)])]))}},Q=M(J,[["__scopeId","data-v-bc0e6727"]]),W={class:"bt-message-list"},X={key:0,class:"text-center p-3 text-muted"},Y={key:1,class:"text-center p-3 text-muted"},Z={__name:"MessageList",props:{messages:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},setup(e){const{t:i}=g();return(t,c)=>(n(),l("div",W,[e.loading?(n(),l("div",X,[f(t.$slots,"loading",{},()=>[$(m(s(i)("bt.messages.loading")),1)],!0)])):e.messages.length?(n(!0),l(j,{key:2},V(e.messages,a=>(n(),x(Q,{key:a.id,message:a},null,8,["message"]))),128)):(n(),l("div",Y,[f(t.$slots,"empty",{},()=>[$(m(s(i)("bt.messages.list_empty")),1)],!0)]))]))}},ee=M(Z,[["__scopeId","data-v-ab573b84"]]),se={class:"d-flex justify-content-end gap-2 mt-2"},te={__name:"MessageForm",emits:["submit"],setup(e,{emit:i}){const{t}=g(),c=i,a=k(""),r=k(!1);async function u(){if(a.value.trim()){r.value=!0;try{await c("submit",{content:a.value}),a.value=""}finally{r.value=!1}}}return(p,v)=>(n(),x(s(A),{class:"bt-message-form",onSubmit:w(u,["prevent"])},{default:h(()=>[_(s(B),null,{default:h(()=>[_(s(I),{modelValue:a.value,"onUpdate:modelValue":v[0]||(v[0]=b=>a.value=b),placeholder:s(t)("bt.messages.placeholder"),rows:"2",disabled:r.value,onKeydown:L(w(u,["ctrl","prevent"]),["enter"])},null,8,["modelValue","placeholder","disabled","onKeydown"])]),_:1}),d("div",se,[_(s(N),{type:"submit",variant:"primary",size:"sm",disabled:!a.value.trim()||r.value},{default:h(()=>[$(m(s(t)("bt.messages.send")),1)]),_:1},8,["disabled"])])]),_:1}))}};function ae(e=null){return S("messages",e?{conversation_id:e}:{})}const ne={class:"bt-conversation-detail"},oe={key:0,class:"bt-conversation-detail__header mb-3"},ie={__name:"ConversationDetail",props:{conversation:{type:Object,default:null}},setup(e){const{t:i}=g(),t=e,c=y(()=>{var o;return((o=t.conversation)==null?void 0:o.id)??null}),{items:a,loading:r,list:u,create:p}=ae(c.value),v=D();F(c,async o=>{o&&await u()},{immediate:!0});async function b({content:o}){!(o!=null&&o.trim())||!t.conversation||await p({content:o.trim(),conversation_id:t.conversation.id,author_id:v.currentPersonId??null})}return(o,de)=>(n(),l("div",ne,[e.conversation?(n(),l("div",oe,[d("h4",null,m(e.conversation.subject||s(i)("bt.conversations.no_subject")),1),_(C,{item:e.conversation},null,8,["item"])])):K("",!0),f(o.$slots,"messages",{},()=>[_(ee,{messages:s(a),loading:s(r),class:"mb-3"},null,8,["messages","loading"])]),f(o.$slots,"form",{},()=>[_(te,{onSubmit:b})])]))}};function ce(e=null){return S("conversations",e?{community_id:e}:{})}const re={class:"bt-page-community-conversation"},le={key:0,class:"text-center p-4 text-muted"},me={key:1,class:"text-center p-4 text-muted"},ge={__name:"CommunityConversation",setup(e){const{t:i}=g(),t=E(),{current:c,loading:a,get:r}=ce();return T(()=>r(t.params.id)),(u,p)=>(n(),l("div",re,[s(a)?(n(),l("div",le,m(s(i)("bt.pages.loading")),1)):s(c)?(n(),x(ie,{key:2,conversation:s(c)},null,8,["conversation"])):(n(),l("div",me,m(s(i)("bt.conversations.not_found")),1))]))}};export{ge as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as o,o as s,n,p as r,t as a,f as t,e as c,w as i,i as u,J as l}from"./index-COo3Jb7v.js";const _={class:"bt-community-conversations"},f={__name:"CommunityConversations",setup(m){const{t:e}=o();return(d,p)=>(s(),n("div",_,[r("h2",null,a(t(e)("bt.navigation.conversations")),1),c(t(l),{variant:"info","model-value":!0},{default:i(()=>[u(a(t(e)("bt.conversations.coming_soon")),1)]),_:1})]))}};export{f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as d,x as v,o as e,n as s,e as r,w as m,i,t as u,f as t,B as f,d as c,J as k,I as y,K as b}from"./index-COo3Jb7v.js";import{u as g,_ as x}from"./EventCard-vfutXTdg.js";import"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import"./SyncBadge-B1JBsdUk.js";import"./ExtensionSlot-DJKbrq4c.js";const B={class:"bt-community-event"},h={key:0},$={__name:"CommunityEvent",setup(C){const{t:n}=d(),o=y(),{current:a,loading:l,get:_}=g(o.params.communitySlug);return v(()=>_(o.params.id)),(E,S)=>{const p=b("RouterLink");return e(),s("div",B,[r(p,{to:{name:"CommunityEvents",params:{communitySlug:t(o).params.communitySlug}},class:"btn btn-link ps-0"},{default:m(()=>[i(u(t(n)("bt.actions.back")),1)]),_:1},8,["to"]),t(l)?(e(),s("div",h,[r(t(f),{label:t(n)("bt.events.loading")},null,8,["label"])])):t(a)?(e(),c(x,{key:1,event:t(a)},null,8,["event"])):(e(),c(t(k),{key:2,variant:"warning","model-value":!0},{default:m(()=>[i(u(t(n)("bt.events.not_found")),1)]),_:1}))])}}};export{$ as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as S,r as h,o as f,d as w,w as o,e as t,f as e,_ as r,g as v,v as B,D as $,h as E,i as U,t as b,j as I,k as N,a as j,x as M,n as A,p as x,E as D,G as F,I as O,l as P,b as R}from"./index-COo3Jb7v.js";import{u as T}from"./EventCard-vfutXTdg.js";import{_ as q}from"./EventList-ChtehYcJ.js";import{_ as G}from"./BRow.vue_vue_type_script_setup_true_lang-69TY75-8-DJdEdyx7.js";import{_ as z}from"./BFormSelect.vue_vue_type_script_setup_true_lang-BigptVap-B_HbOOZR.js";import"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import"./SyncBadge-B1JBsdUk.js";import"./ExtensionSlot-DJKbrq4c.js";const H={__name:"EventForm",props:{model:{type:Object,default:()=>({})},communityId:{type:String,default:null}},emits:["submit"],setup(y,{emit:m}){const{t:s}=S(),i=y,p=m,a=h({name:i.model.name||"",description:i.model.description||"",starts_at:i.model.starts_at||"",ends_at:i.model.ends_at||"",privacy:i.model.privacy||"public",community_id:i.communityId||i.model.community_id||null}),c=[{value:"public",text:"Public"},{value:"protected",text:"Community members only"},{value:"private",text:"Private"}];function _(){p("submit",{...a})}return(V,n)=>(f(),w(e(N),{onSubmit:I(_,["prevent"])},{default:o(()=>[t(e(r),{label:e(s)("bt.events.name_label"),"label-for":"event-name"},{default:o(()=>[t(e(v),{id:"event-name",modelValue:a.name,"onUpdate:modelValue":n[0]||(n[0]=l=>a.name=l),required:"",placeholder:e(s)("bt.events.name_label")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),t(e(r),{label:e(s)("bt.events.description_label"),"label-for":"event-description"},{default:o(()=>[t(e(B),{id:"event-description",modelValue:a.description,"onUpdate:modelValue":n[1]||(n[1]=l=>a.description=l),rows:"3",placeholder:e(s)("bt.events.description_label")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),t(e(G),null,{default:o(()=>[t(e($),{md:"6"},{default:o(()=>[t(e(r),{label:e(s)("bt.events.starts_at_label"),"label-for":"event-starts"},{default:o(()=>[t(e(v),{id:"event-starts",modelValue:a.starts_at,"onUpdate:modelValue":n[2]||(n[2]=l=>a.starts_at=l),type:"datetime-local"},null,8,["modelValue"])]),_:1},8,["label"])]),_:1}),t(e($),{md:"6"},{default:o(()=>[t(e(r),{label:e(s)("bt.events.ends_at_label"),"label-for":"event-ends"},{default:o(()=>[t(e(v),{id:"event-ends",modelValue:a.ends_at,"onUpdate:modelValue":n[3]||(n[3]=l=>a.ends_at=l),type:"datetime-local"},null,8,["modelValue"])]),_:1},8,["label"])]),_:1})]),_:1}),t(e(r),{label:e(s)("bt.posts.privacy_label"),"label-for":"event-privacy"},{default:o(()=>[t(e(z),{id:"event-privacy",modelValue:a.privacy,"onUpdate:modelValue":n[4]||(n[4]=l=>a.privacy=l),options:c},null,8,["modelValue"])]),_:1},8,["label"]),t(e(E),{type:"submit",variant:"primary"},{default:o(()=>[U(b(e(s)("bt.events.save")),1)]),_:1})]),_:1}))}},J={class:"bt-community-events"},K={class:"d-flex align-items-center justify-content-between mb-3"},le={__name:"CommunityEvents",setup(y){const{t:m}=S(),s=O(),i=R(),p=j(),a=s.params.communitySlug,{items:c,loading:_,listUpcoming:V,create:n}=T(a),l=P(!1);M(()=>V());async function k(u){await n(u),l.value=!1}function C(u){i.push({name:"CommunityEvent",params:{...s.params,id:u.id}})}return(u,d)=>(f(),A("div",J,[x("div",K,[x("h2",null,b(e(m)("bt.navigation.events")),1),e(p).isAuthenticated?(f(),w(e(E),{key:0,variant:"primary",onClick:d[0]||(d[0]=g=>l.value=!0)},{default:o(()=>[U(b(e(m)("bt.events.create")),1)]),_:1})):D("",!0)]),t(e(F),{modelValue:l.value,"onUpdate:modelValue":d[1]||(d[1]=g=>l.value=g),title:e(m)("bt.events.create"),"hide-footer":""},{default:o(()=>[t(H,{"community-id":e(a),onSubmit:k},null,8,["community-id"])]),_:1},8,["modelValue","title"]),t(q,{events:e(c),loading:e(_),onView:C},null,8,["events","loading"])]))}};export{le as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as y,x as P,o as b,n as w,e as t,w as e,f as s,D as u,p as r,t as c,I as E,b as x}from"./index-COo3Jb7v.js";import{_ as C}from"./BRow.vue_vue_type_script_setup_true_lang-69TY75-8-DJdEdyx7.js";import{u as V}from"./usePosts-Bf2Ccwr4.js";import{u as $}from"./EventCard-vfutXTdg.js";import{_ as B}from"./PostList-DYFgxlE8.js";import{_ as I}from"./EventList-ChtehYcJ.js";import"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import"./SyncBadge-B1JBsdUk.js";import"./ExtensionSlot-DJKbrq4c.js";const k={class:"bt-community-home"},A={__name:"CommunityHome",setup(D){const{t:a}=y(),n=E(),i=x(),m=n.params.communitySlug,{items:l,loading:p,listPublished:d}=V(m),{items:_,loading:f,listUpcoming:g}=$(m);P(async()=>{await Promise.all([d(),g()])});function h(o){i.push({name:"CommunityPost",params:{...n.params,id:o.id}})}function v(o){i.push({name:"CommunityEvent",params:{...n.params,id:o.id}})}return(o,L)=>(b(),w("div",k,[t(s(C),null,{default:e(()=>[t(s(u),{md:"8"},{default:e(()=>[r("h2",null,c(s(a)("bt.posts.recent")),1),t(B,{posts:s(l),loading:s(p),onView:h},null,8,["posts","loading"])]),_:1}),t(s(u),{md:"4"},{default:e(()=>[r("h2",null,c(s(a)("bt.events.upcoming")),1),t(I,{events:s(_),loading:s(f),onView:v},null,8,["events","loading"])]),_:1})]),_:1})]))}};export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{N as ce,O as fe,a8 as _e,W as ee,a9 as $e,X as de,Z as Ce,aa as he,x as ve,ab as qe,l as X,a7 as K,o as g,d as V,w as d,y as v,E as O,a2 as me,f as e,Q as te,a3 as ae,A as h,ac as je,e as u,p as m,P as U,n as k,F as Z,C as H,j as x,a6 as A,i as j,t as b,ad as be,ae as ke,af as we,S as Ve,ag as Be,ah as E,ai as Ie,u as S,h as N,_ as L,g as P,v as pe,k as ge,r as ye,M as se,I as Te,b as Ae}from"./index-COo3Jb7v.js";import{_ as G}from"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import{_ as le,a as ie,b as oe}from"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import{S as ne}from"./SyncBadge-B1JBsdUk.js";import{_ as re}from"./ExtensionSlot-DJKbrq4c.js";const Y=ce({inheritAttrs:!1,__name:"BTab",props:ae({buttonId:{default:void 0},disabled:{type:Boolean,default:!1},id:{default:void 0},lazy:{type:Boolean,default:void 0},lazyOnce:{type:Boolean,default:void 0},noBody:{type:Boolean,default:!1},tag:{default:"div"},title:{default:void 0},titleItemClass:{default:void 0},titleLinkAttrs:{default:void 0},titleLinkClass:{default:void 0}},{active:{type:Boolean,default:!1},activeModifiers:{}}),emits:["update:active"],setup(o){const a=fe(o,"BTab"),s=_e(),i=ee(o,"active"),t=$e(be,null),c=de(()=>a.id,"tabpane"),y=de(()=>a.buttonId,"tab"),p=X(!1),_=Ce("_el"),J=he(),M=h(()=>{const{onClick:T,...r}=J;return{onClick:T,tabAttrs:r}}),W=h(()=>({id:c.value,buttonId:y.value,disabled:a.disabled,title:a.title,titleComponent:s.title,titleItemClass:()=>a.titleItemClass,titleLinkAttrs:()=>a.titleLinkAttrs,titleLinkClass:()=>a.titleLinkClass,onClick:M.value.onClick,el:_.value}));ve(()=>{t&&(t.registerTab(W),i.value&&t.activateTab(c.value))}),qe(()=>{t&&t.unregisterTab(c.value)});const R=h(()=>(t==null?void 0:t.activeId.value)===c.value),w=X(R.value),F=h(()=>!!(t!=null&&t.lazy.value||(a.lazyOnce??a.lazy))),q=h(()=>a.lazyOnce!==void 0),I=h(()=>R.value&&!a.disabled),D=h(()=>I.value||!F.value||F.value&&q.value&&p.value);K(R,T=>{if(T){i.value=!0,setTimeout(()=>{w.value=!0},0);return}w.value=!1,i.value=!1}),K(i,T=>{if(t){if(!T){R.value&&t.activateTab(void 0);return}t.activateTab(c.value)}});const Q=h(()=>[{active:R.value,show:w.value,"card-body":(t==null?void 0:t.card.value)&&a.noBody===!1,fade:!(t!=null&&t.noFade.value)},w.value?t==null?void 0:t.activeTabClass.value:t==null?void 0:t.inactiveTabClass.value,t==null?void 0:t.tabClass.value]);return K(D,T=>{T&&!p.value&&(p.value=!0)}),(T,r)=>(g(),V(te(e(a).tag),me({id:e(c),ref:"_el",class:["tab-pane",Q.value],role:"tabpanel","aria-labelledby":e(y)},M.value.tabAttrs),{default:d(()=>[D.value?v(T.$slots,"default",{key:0}):O("",!0)]),_:3},16,["id","class","aria-labelledby"]))}}),xe=["aria-orientation"],Oe=["id","aria-controls","aria-selected","tabindex","onClick"],Re=ce({__name:"BTabs",props:ae({activeNavItemClass:{default:void 0},activeTabClass:{default:void 0},align:{default:void 0},card:{type:Boolean,default:!1},contentClass:{default:void 0},end:{type:Boolean,default:!1},fill:{type:Boolean,default:!1},id:{default:void 0},inactiveNavItemClass:{default:void 0},inactiveTabClass:{default:void 0},justified:{type:Boolean,default:!1},lazy:{type:Boolean,default:!1},navClass:{default:void 0},navItemClass:{default:void 0},navWrapperClass:{default:void 0},noFade:{type:Boolean,default:!1},noKeyNav:{type:Boolean,default:!1},noNavStyle:{type:Boolean,default:!1},pills:{type:Boolean,default:!1},small:{type:Boolean,default:!1},tag:{default:"div"},tabClass:{default:void 0},underline:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1}},{modelValue:{default:-1},modelModifiers:{},activeId:{default:void 0},activeIdModifiers:{}}),emits:ae(["activate-tab","click"],["update:modelValue","update:activeId"]),setup(o,{emit:f}){const s=fe(o,"BTabs"),i=f,t=ee(o,"modelValue"),c=ee(o,"activeId"),y=je(),p=X([]),_=h(()=>p.value.map(r=>{const l=e(r),n=l.id===c.value;return{...l,active:n,navItemClasses:[{active:n,disabled:l.disabled},n?s.activeNavItemClass:s.inactiveNavItemClass,s.navItemClass]}})),J=h(()=>!(_!=null&&_.value&&_.value.length>0)),M=h(()=>({"d-flex":s.vertical,"align-items-start":s.vertical})),W=Ve(()=>s.align),R=h(()=>({"nav-pills":s.pills,"nav-underline":s.underline,"flex-column me-3":s.vertical,[W.value]:s.align!==void 0,"nav-fill":s.fill,"card-header-tabs":s.card&&!s.pills&&!s.underline,"card-header-pills":s.card&&s.pills,"nav-justified":s.justified,"nav-tabs":!s.noNavStyle&&!s.pills&&!s.underline,small:s.small})),w=r=>{var l;if(r!==void 0){const n=(l=_.value[r])==null?void 0:l.id;if(r>-1&&r<_.value.length&&!_.value[r].disabled&&(t.value<0||c.value!==n||t.value!==r)){const $=new ke("activate-tab",{cancelable:!0});i("activate-tab",r,t.value,$),$.defaultPrevented||(c.value!==n&&(c.value=n),t.value!==r&&(t.value=r))}}},F=(r,l)=>{var n,$,B;w(l),l>=0&&!_.value[l].disabled&&((n=_.value[l])!=null&&n.onClick)&&typeof _.value[l].onClick=="function"&&((B=($=_.value[l]).onClick)==null||B.call($,r))},q=(r,l)=>{var n,$;_.value.length<=0||s.noKeyNav||(r.preventDefault(),r.stopPropagation(),t.value=I(t.value+l,l),($=document.getElementById((n=_.value[t.value])==null?void 0:n.buttonId))==null||$.focus())},I=(r,l)=>{let n=r,$=-1,B=-1;for(let z=0;z<_.value.length;z++)_.value[z].disabled||($===-1&&($=z),B=z);for(;n>=$&&n<=B&&_.value[n].disabled;)n+=l;return n<$&&(n=$),n>B&&(n=B),n};K(t,(r,l)=>{if(r===l||_.value.length<=0)return;const n=I(r,r>l?1:-1);we(()=>{w(n)})}),K(c,(r,l)=>{const n=_.value.findIndex($=>$.id===r);if(r!==l&&!(_.value.length<=0)){if(n===-1){w(I(0,1));return}w(n)}});const D=r=>{p.value.find(l=>l.value.id===r.value.id)?p.value[p.value.findIndex(l=>l.value.id===r.value.id)]=r:p.value.push(r),p.value.sort((l,n)=>Ie(l.value.el,n.value.el))},Q=r=>{p.value=p.value.filter(l=>l.value.id!==r)};K(p,()=>{T()},{deep:!0});const T=()=>{var r;if(_.value.length===0){t.value=-1,c.value=void 0;return}if(t.value>=0&&!c.value&&(c.value=(r=_.value[t.value])==null?void 0:r.id),_.value.find(l=>l.id===c.value)){w(_.value.findIndex(l=>l.id===c.value));return}w(_.value.map(l=>!l.disabled).indexOf(!0))};return Be(be,{lazy:E(()=>s.lazy),card:E(()=>s.card),noFade:E(()=>s.noFade),activeTabClass:E(()=>s.activeTabClass),inactiveTabClass:E(()=>s.inactiveTabClass),tabClass:E(()=>s.tabClass),registerTab:D,unregisterTab:Q,activeId:c,activateTab:r=>{const l=_.value.findIndex(n=>n.id===r);if(r===void 0||l===-1){w(I(0,1));return}w(l)}}),(r,l)=>(g(),V(te(e(s).tag),{id:e(s).id,class:U(["tabs",M.value])},{default:d(()=>[u(e(y).define,null,{default:d(()=>[m("div",{class:U(["tab-content",e(s).contentClass])},[v(r.$slots,"default"),J.value?(g(),k("div",{key:"bv-empty-tab",class:U(["tab-pane active",{"card-body":e(s).card}])},[v(r.$slots,"empty")],2)):O("",!0)],2)]),_:3}),e(s).end?(g(),V(e(y).reuse,{key:0})):O("",!0),m("div",{class:U([e(s).navWrapperClass,{"card-header":e(s).card,"ms-auto":r.vertical&&e(s).end}])},[m("ul",{class:U(["nav",[R.value,e(s).navClass]]),role:"tablist","aria-orientation":e(s).vertical?"vertical":"horizontal"},[v(r.$slots,"tabs-start"),(g(!0),k(Z,null,H(_.value,(n,$)=>{var B,z,ue;return g(),k("li",{key:n.id,class:U(["nav-item",(B=n.titleItemClass)==null?void 0:B.call(n)]),role:"presentation"},[m("button",me({id:n.buttonId,class:["nav-link",[n.navItemClasses,(z=n.titleLinkClass)==null?void 0:z.call(n)]],role:"tab","aria-controls":n.id,"aria-selected":n.active,tabindex:e(s).noKeyNav||n.active?void 0:-1,ref_for:!0},(ue=n.titleLinkAttrs)==null?void 0:ue.call(n),{onKeydown:[l[0]||(l[0]=A(x(C=>!e(s).vertical&&q(C,-1),["exact"]),["left"])),l[1]||(l[1]=A(x(C=>!e(s).vertical&&q(C,-999),["shift"]),["left"])),l[2]||(l[2]=A(x(C=>e(s).vertical&&q(C,-1),["exact"]),["up"])),l[3]||(l[3]=A(x(C=>e(s).vertical&&q(C,-999),["shift"]),["up"])),l[4]||(l[4]=A(x(C=>!e(s).vertical&&q(C,1),["exact"]),["right"])),l[5]||(l[5]=A(x(C=>!e(s).vertical&&q(C,999),["shift"]),["right"])),l[6]||(l[6]=A(x(C=>e(s).vertical&&q(C,1),["exact"]),["down"])),l[7]||(l[7]=A(x(C=>e(s).vertical&&q(C,999),["shift"]),["down"])),l[8]||(l[8]=A(C=>q(C,-999),["page-up"])),l[9]||(l[9]=A(C=>q(C,999),["page-down"])),l[10]||(l[10]=A(C=>q(C,-999),["home"])),l[11]||(l[11]=A(C=>q(C,999),["end"]))],onClick:x(C=>F(C,$),["stop","prevent"])}),[n.titleComponent?(g(),V(te(n.titleComponent),{key:0})):(g(),k(Z,{key:1},[j(b(n.title),1)],64))],16,Oe)],2)}),128)),v(r.$slots,"tabs-end")],10,xe)],2),e(s).end?O("",!0):(g(),V(e(y).reuse,{key:1}))]),_:3},8,["id","class"]))}}),Se={class:"d-flex align-items-start justify-content-between gap-2 mb-1"},ze={class:"bt-offer-card__title mb-0"},Le={class:"d-flex align-items-center gap-2 mb-2"},Ne={class:"bt-offer-card__credits"},Me={class:"d-flex align-items-center gap-2"},Fe={__name:"OfferCard",props:{offer:{type:Object,required:!0}},emits:["view"],setup(o){const{t:f}=S(),a=o,s=h(()=>{const t=a.offer.description||"";return t.length>150?t.slice(0,150)+"…":t}),i=h(()=>({open:"success",fulfilled:"info",withdrawn:"secondary"})[a.offer.status]??"secondary");return(t,c)=>(g(),V(e(oe),{class:"bt-offer-card"},{footer:d(()=>[v(t.$slots,"footer",{},()=>[m("div",Me,[u(e(N),{variant:"outline-success",size:"sm",onClick:c[0]||(c[0]=y=>t.$emit("view",o.offer))},{default:d(()=>[j(b(e(f)("bt.joatu.offers.view")),1)]),_:1}),u(re,{target:"OfferCard",slot:"footer",context:{item:o.offer}},null,8,["context"])])])]),default:d(()=>[u(e(le),null,{default:d(()=>[v(t.$slots,"title",{},()=>[m("div",Se,[m("h5",ze,b(o.offer.title),1),v(t.$slots,"sync-badge",{},()=>[u(ne,{item:o.offer},null,8,["item"])])])]),v(t.$slots,"meta",{},()=>[m("div",Le,[u(e(G),{variant:i.value},{default:d(()=>[j(b(o.offer.status),1)]),_:1},8,["variant"]),m("span",Ne,b(e(f)("bt.joatu.offers.credits_display",o.offer.time_credits)),1),o.offer.category?(g(),V(e(G),{key:0,variant:"outline-secondary"},{default:d(()=>[j(b(o.offer.category),1)]),_:1})):O("",!0)])]),v(t.$slots,"body",{},()=>[u(e(ie),null,{default:d(()=>[j(b(s.value),1)]),_:1})])]),_:3})]),_:3}))}},De={class:"bt-offer-list"},Ue={key:0,class:"bt-offer-list__loading"},Ee={class:"text-center p-4 text-muted"},Ke={key:1,class:"bt-offer-list__empty"},Pe={class:"text-center p-4 text-muted"},Je={__name:"OfferList",props:{offers:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},emits:["view"],setup(o){const{t:f}=S();return(a,s)=>(g(),k("div",De,[v(a.$slots,"header"),o.loading?(g(),k("div",Ue,[v(a.$slots,"loading",{},()=>[m("div",Ee,b(e(f)("bt.joatu.offers.loading")),1)])])):o.offers.length?(g(!0),k(Z,{key:2},H(o.offers,(i,t)=>v(a.$slots,"item",{key:i.id,item:i,index:t},()=>[u(Fe,{offer:i,class:"mb-3",onView:c=>a.$emit("view",i)},null,8,["offer","onView"])])),128)):(g(),k("div",Ke,[v(a.$slots,"empty",{},()=>[m("div",Pe,b(e(f)("bt.joatu.offers.list_empty")),1)])])),v(a.$slots,"footer")]))}},We={class:"d-flex justify-content-end gap-2 mt-3"},Qe={__name:"OfferForm",emits:["submit","cancel"],setup(o,{emit:f}){const{t:a}=S(),s=f,i=ye({title:"",description:"",category:"",time_credits:1});function t(){i.title&&(s("submit",{...i}),Object.assign(i,{title:"",description:"",category:"",time_credits:1}))}return(c,y)=>(g(),V(e(ge),{class:"bt-offer-form",onSubmit:x(t,["prevent"])},{default:d(()=>[u(e(L),{label:e(a)("bt.joatu.offers.title_label"),"label-for":"offer-title"},{default:d(()=>[u(e(P),{id:"offer-title",modelValue:i.title,"onUpdate:modelValue":y[0]||(y[0]=p=>i.title=p),required:"",placeholder:e(a)("bt.joatu.offers.title_placeholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),u(e(L),{label:e(a)("bt.joatu.offers.description_label"),"label-for":"offer-description"},{default:d(()=>[u(e(pe),{id:"offer-description",modelValue:i.description,"onUpdate:modelValue":y[1]||(y[1]=p=>i.description=p),rows:"3",placeholder:e(a)("bt.joatu.offers.description_placeholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),u(e(L),{label:e(a)("bt.joatu.offers.category_label"),"label-for":"offer-category"},{default:d(()=>[u(e(P),{id:"offer-category",modelValue:i.category,"onUpdate:modelValue":y[2]||(y[2]=p=>i.category=p),placeholder:e(a)("bt.joatu.offers.category_placeholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),u(e(L),{label:e(a)("bt.joatu.offers.credits_label"),"label-for":"offer-credits"},{description:d(()=>[j(b(e(a)("bt.joatu.offers.credits_hint")),1)]),default:d(()=>[u(e(P),{id:"offer-credits",modelValue:i.time_credits,"onUpdate:modelValue":y[3]||(y[3]=p=>i.time_credits=p),modelModifiers:{number:!0},type:"number",min:"1",max:"100"},null,8,["modelValue"])]),_:1},8,["label"]),m("div",We,[u(e(N),{type:"button",variant:"outline-secondary",onClick:y[4]||(y[4]=p=>c.$emit("cancel"))},{default:d(()=>[j(b(e(a)("bt.actions.cancel")),1)]),_:1}),u(e(N),{type:"submit",variant:"success"},{default:d(()=>[j(b(e(a)("bt.joatu.offers.submit")),1)]),_:1})])]),_:1}))}},Xe={class:"d-flex align-items-start justify-content-between gap-2 mb-1"},Ze={class:"bt-request-card__title mb-0"},Ge={class:"text-muted me-1"},He={class:"d-flex align-items-center gap-2 mb-2"},Ye={class:"bt-request-card__credits"},et={class:"d-flex align-items-center gap-2"},tt={__name:"RequestCard",props:{request:{type:Object,required:!0}},emits:["view"],setup(o){const{t:f}=S(),a=o,s=h(()=>{const t=a.request.description||"";return t.length>150?t.slice(0,150)+"…":t}),i=h(()=>({open:"success",fulfilled:"info",withdrawn:"secondary"})[a.request.status]??"secondary");return(t,c)=>(g(),V(e(oe),{class:"bt-request-card"},{footer:d(()=>[v(t.$slots,"footer",{},()=>[m("div",et,[u(e(N),{variant:"outline-warning",size:"sm",onClick:c[0]||(c[0]=y=>t.$emit("view",o.request))},{default:d(()=>[j(b(e(f)("bt.joatu.requests.fulfill")),1)]),_:1}),u(re,{target:"RequestCard",slot:"footer",context:{item:o.request}},null,8,["context"])])])]),default:d(()=>[u(e(le),null,{default:d(()=>[v(t.$slots,"title",{},()=>[m("div",Xe,[m("h5",Ze,[m("span",Ge,b(e(f)("bt.joatu.requests.seeking")),1),j(b(o.request.title),1)]),v(t.$slots,"sync-badge",{},()=>[u(ne,{item:o.request},null,8,["item"])])])]),v(t.$slots,"meta",{},()=>[m("div",He,[u(e(G),{variant:i.value},{default:d(()=>[j(b(o.request.status),1)]),_:1},8,["variant"]),m("span",Ye,b(e(f)("bt.joatu.offers.credits_display",o.request.time_credits)),1),o.request.category?(g(),V(e(G),{key:0,variant:"outline-secondary"},{default:d(()=>[j(b(o.request.category),1)]),_:1})):O("",!0)])]),v(t.$slots,"body",{},()=>[u(e(ie),null,{default:d(()=>[j(b(s.value),1)]),_:1})])]),_:3})]),_:3}))}},at={class:"bt-request-list"},st={key:0,class:"bt-request-list__loading"},lt={class:"text-center p-4 text-muted"},it={key:1,class:"bt-request-list__empty"},ot={class:"text-center p-4 text-muted"},nt={__name:"RequestList",props:{requests:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},emits:["view"],setup(o){const{t:f}=S();return(a,s)=>(g(),k("div",at,[v(a.$slots,"header"),o.loading?(g(),k("div",st,[v(a.$slots,"loading",{},()=>[m("div",lt,b(e(f)("bt.joatu.requests.loading")),1)])])):o.requests.length?(g(!0),k(Z,{key:2},H(o.requests,(i,t)=>v(a.$slots,"item",{key:i.id,item:i,index:t},()=>[u(tt,{request:i,class:"mb-3",onView:c=>a.$emit("view",i)},null,8,["request","onView"])])),128)):(g(),k("div",it,[v(a.$slots,"empty",{},()=>[m("div",ot,b(e(f)("bt.joatu.requests.list_empty")),1)])])),v(a.$slots,"footer")]))}},rt={class:"d-flex justify-content-end gap-2 mt-3"},ut={__name:"RequestForm",emits:["submit","cancel"],setup(o,{emit:f}){const{t:a}=S(),s=f,i=ye({title:"",description:"",category:"",time_credits:1});function t(){i.title&&(s("submit",{...i}),Object.assign(i,{title:"",description:"",category:"",time_credits:1}))}return(c,y)=>(g(),V(e(ge),{class:"bt-request-form",onSubmit:x(t,["prevent"])},{default:d(()=>[u(e(L),{label:e(a)("bt.joatu.requests.title_label"),"label-for":"request-title"},{default:d(()=>[u(e(P),{id:"request-title",modelValue:i.title,"onUpdate:modelValue":y[0]||(y[0]=p=>i.title=p),required:"",placeholder:e(a)("bt.joatu.requests.title_placeholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),u(e(L),{label:e(a)("bt.joatu.requests.description_label"),"label-for":"request-description"},{default:d(()=>[u(e(pe),{id:"request-description",modelValue:i.description,"onUpdate:modelValue":y[1]||(y[1]=p=>i.description=p),rows:"3",placeholder:e(a)("bt.joatu.requests.description_placeholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),u(e(L),{label:e(a)("bt.joatu.requests.category_label"),"label-for":"request-category"},{default:d(()=>[u(e(P),{id:"request-category",modelValue:i.category,"onUpdate:modelValue":y[2]||(y[2]=p=>i.category=p),placeholder:e(a)("bt.joatu.offers.category_placeholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),u(e(L),{label:e(a)("bt.joatu.requests.credits_label"),"label-for":"request-credits"},{description:d(()=>[j(b(e(a)("bt.joatu.requests.credits_hint")),1)]),default:d(()=>[u(e(P),{id:"request-credits",modelValue:i.time_credits,"onUpdate:modelValue":y[3]||(y[3]=p=>i.time_credits=p),modelModifiers:{number:!0},type:"number",min:"1",max:"100"},null,8,["modelValue"])]),_:1},8,["label"]),m("div",rt,[u(e(N),{type:"button",variant:"outline-secondary",onClick:y[4]||(y[4]=p=>c.$emit("cancel"))},{default:d(()=>[j(b(e(a)("bt.actions.cancel")),1)]),_:1}),u(e(N),{type:"submit",variant:"warning"},{default:d(()=>[j(b(e(a)("bt.joatu.requests.submit")),1)]),_:1})])]),_:1}))}},dt={class:"d-flex align-items-start justify-content-between gap-2 mb-1"},ct={class:"bt-agreement-card__title mb-0"},ft={class:"d-flex align-items-center gap-2 mb-2"},vt={key:0,class:"text-muted"},mt={__name:"AgreementCard",props:{agreement:{type:Object,required:!0}},setup(o){const{t:f}=S(),a=o,s=h(()=>({pending:"warning",active:"info",completed:"success",disputed:"danger"})[a.agreement.status]??"secondary"),i=h(()=>a.agreement.agreed_at?new Date(a.agreement.agreed_at).toLocaleDateString():"");return(t,c)=>(g(),V(e(oe),{class:"bt-agreement-card"},{footer:d(()=>[v(t.$slots,"footer",{},()=>[u(re,{target:"AgreementCard",slot:"footer",context:{item:o.agreement}},null,8,["context"])])]),default:d(()=>[u(e(le),null,{default:d(()=>[v(t.$slots,"title",{},()=>[m("div",dt,[m("h5",ct,b(e(f)("bt.joatu.agreements.credits_display",o.agreement.time_credits)),1),v(t.$slots,"sync-badge",{},()=>[u(ne,{item:o.agreement},null,8,["item"])])])]),v(t.$slots,"meta",{},()=>[m("div",ft,[u(e(G),{variant:s.value},{default:d(()=>[j(b(o.agreement.status),1)]),_:1},8,["variant"]),o.agreement.agreed_at?(g(),k("small",vt,b(e(f)("bt.joatu.agreements.agreed_on",{date:i.value})),1)):O("",!0)])]),v(t.$slots,"body",{},()=>[o.agreement.notes?(g(),V(e(ie),{key:0,class:"text-muted"},{default:d(()=>[j(b(o.agreement.notes),1)]),_:1})):O("",!0)])]),_:3})]),_:3}))}},bt={class:"bt-agreement-list"},pt={key:0,class:"bt-agreement-list__loading"},gt={class:"text-center p-4 text-muted"},yt={key:1,class:"bt-agreement-list__empty"},_t={class:"text-center p-4 text-muted"},$t={__name:"AgreementList",props:{agreements:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},emits:["view"],setup(o){const{t:f}=S();return(a,s)=>(g(),k("div",bt,[v(a.$slots,"header"),o.loading?(g(),k("div",pt,[v(a.$slots,"loading",{},()=>[m("div",gt,b(e(f)("bt.joatu.agreements.loading")),1)])])):o.agreements.length?(g(!0),k(Z,{key:2},H(o.agreements,(i,t)=>v(a.$slots,"item",{key:i.id,item:i,index:t},()=>[u(mt,{agreement:i,class:"mb-3",onView:c=>a.$emit("view",i)},null,8,["agreement","onView"])])),128)):(g(),k("div",yt,[v(a.$slots,"empty",{},()=>[m("div",_t,b(e(f)("bt.joatu.agreements.list_empty")),1)])])),v(a.$slots,"footer")]))}};function Ct(o=null){const a=se("joa_tu_offers",o?{community_id:o}:{}),s=h(()=>a.items.value.filter(t=>t.status==="open")),i=h(()=>a.items.value.filter(t=>t.status==="fulfilled"));return{...a,open:s,fulfilled:i}}function ht(o=null){const a=se("joa_tu_requests",o?{community_id:o}:{}),s=h(()=>a.items.value.filter(t=>t.status==="open")),i=h(()=>a.items.value.filter(t=>t.status==="fulfilled"));return{...a,open:s,fulfilled:i}}function qt(o=null){const a=se("joa_tu_agreements",o?{community_id:o}:{}),s=h(()=>a.items.value.filter(c=>c.status==="pending")),i=h(()=>a.items.value.filter(c=>c.status==="active")),t=h(()=>a.items.value.filter(c=>c.status==="completed"));return{...a,pending:s,active:i,completed:t}}const jt={class:"bt-page-community-joatu"},kt={class:"d-flex align-items-center justify-content-between mb-4"},wt={class:"text-muted mb-0"},Vt={class:"pt-3"},Bt={class:"d-flex justify-content-end mb-3"},It={class:"pt-3"},Tt={class:"d-flex justify-content-end mb-3"},At={class:"pt-3"},Lt={__name:"CommunityJoaTu",setup(o){const{t:f}=S(),a=Te(),s=Ae(),i=a.params.communitySlug,{items:t,loading:c,list:y,create:p}=Ct(i),{items:_,loading:J,list:M,create:W}=ht(i),{items:R,loading:w,list:F}=qt(i),q=X(!1),I=X(!1);ve(async()=>{await Promise.all([y(),M(),F()])});async function D(n){await p(n),q.value=!1}async function Q(n){await W(n),I.value=!1}function T(n){s.push({name:"CommunityOffer",params:{id:n.id}})}function r(n){s.push({name:"CommunityRequest",params:{id:n.id}})}function l(){}return(n,$)=>(g(),k("div",jt,[m("div",kt,[m("h2",null,b(e(f)("bt.joatu.heading")),1),m("p",wt,b(e(f)("bt.joatu.tagline")),1)]),u(e(Re),null,{default:d(()=>[u(e(Y),{title:e(f)("bt.joatu.tabs.offers")},{default:d(()=>[m("div",Vt,[m("div",Bt,[u(e(N),{variant:"success",size:"sm",onClick:$[0]||($[0]=B=>q.value=!q.value)},{default:d(()=>[j(b(q.value?e(f)("bt.actions.cancel"):e(f)("bt.joatu.offers.add")),1)]),_:1})]),q.value?(g(),V(Qe,{key:0,class:"mb-4",onSubmit:D,onCancel:$[1]||($[1]=B=>q.value=!1)})):O("",!0),u(Je,{offers:e(t),loading:e(c),onView:T},null,8,["offers","loading"])])]),_:1},8,["title"]),u(e(Y),{title:e(f)("bt.joatu.tabs.requests")},{default:d(()=>[m("div",It,[m("div",Tt,[u(e(N),{variant:"warning",size:"sm",onClick:$[2]||($[2]=B=>I.value=!I.value)},{default:d(()=>[j(b(I.value?e(f)("bt.actions.cancel"):e(f)("bt.joatu.requests.add")),1)]),_:1})]),I.value?(g(),V(ut,{key:0,class:"mb-4",onSubmit:Q,onCancel:$[3]||($[3]=B=>I.value=!1)})):O("",!0),u(nt,{requests:e(_),loading:e(J),onView:r},null,8,["requests","loading"])])]),_:1},8,["title"]),u(e(Y),{title:e(f)("bt.joatu.tabs.agreements")},{default:d(()=>[m("div",At,[u($t,{agreements:e(R),loading:e(w),onView:l},null,8,["agreements","loading"])])]),_:1},8,["title"])]),_:1})]))}};export{Lt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.bt-person-avatar[data-v-fc7b5fc1]{border-radius:50%;background-color:var(--bt-primary, #4f46e5);color:#fff;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0}.bt-person-avatar__img[data-v-fc7b5fc1]{width:100%;height:100%;object-fit:cover}.bt-person-avatar__initials[data-v-fc7b5fc1]{font-weight:600;line-height:1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{L as f,M as y,m as h,o as n,n as o,t as m,z as v,A as p,u as b,y as c,e as d,f as i,B as g,p as u,F as $,C as E,d as S,w as k,i as R,E as x,x as C,I as L}from"./index-COo3Jb7v.js";import{_ as w}from"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";function z(s=null){const t=y("person_community_memberships",s?{community_id:s}:{});async function a(){const r=await f();if(s){const{rows:e}=await r.query("SELECT * FROM person_community_memberships WHERE left_at IS NULL AND community_id = $1 ORDER BY joined_at DESC",[s]);return t.items.value=e,e}else{const{rows:e}=await r.query("SELECT * FROM person_community_memberships WHERE left_at IS NULL ORDER BY joined_at DESC",[]);return t.items.value=e,e}}return{...t,listActive:a}}const B=["title"],N=["src","alt"],A={key:1,class:"bt-person-avatar__initials"},D={__name:"PersonAvatar",props:{person:{type:Object,required:!0},size:{type:Number,default:40}},setup(s){const t=s,a=p(()=>(t.person.name||t.person.handle||"?").split(" ").slice(0,2).map(l=>{var _;return((_=l[0])==null?void 0:_.toUpperCase())??""}).join("")),r=p(()=>({width:`${t.size}px`,height:`${t.size}px`,fontSize:`${t.size*.4}px`}));return(e,l)=>(n(),o("div",{class:"bt-person-avatar",style:v(r.value),title:s.person.name},[s.person.profile_image_url?(n(),o("img",{key:0,src:s.person.profile_image_url,alt:s.person.name,class:"bt-person-avatar__img"},null,8,N)):(n(),o("span",A,m(a.value),1))],12,B))}},M=h(D,[["__scopeId","data-v-fc7b5fc1"]]),O={class:"bt-member-list"},j={key:0},F={key:1},V={class:"text-muted"},q={key:2,class:"bt-member-list__items"},T={class:"d-flex align-items-center gap-2"},U={__name:"MemberList",props:{members:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},setup(s){const{t}=b();return(a,r)=>(n(),o("div",O,[c(a.$slots,"header"),s.loading?(n(),o("div",j,[c(a.$slots,"loading",{},()=>[d(i(g),{label:i(t)("bt.person.loading")},null,8,["label"])])])):s.members.length?(n(),o("div",q,[(n(!0),o($,null,E(s.members,(e,l)=>(n(),o("div",{key:e.id,class:"bt-member-list__item"},[c(a.$slots,"item",{item:e,index:l},()=>[u("div",T,[d(M,{person:{id:e.person_id,name:""},size:32},null,8,["person"]),u("span",null,m(e.person_id),1),e.role?(n(),S(i(w),{key:0,variant:"secondary"},{default:k(()=>[R(m(e.role),1)]),_:2},1024)):x("",!0)])])]))),128))])):(n(),o("div",F,[c(a.$slots,"empty",{},()=>[u("p",V,m(i(t)("bt.person.members_empty")),1)])])),c(a.$slots,"footer")]))}},H={class:"bt-community-members"},Y={__name:"CommunityMembers",setup(s){const{t}=b(),a=L(),{items:r,loading:e,listActive:l}=z(a.params.communitySlug);return C(()=>l()),(_,I)=>(n(),o("div",H,[u("h2",null,m(i(t)("bt.navigation.members")),1),d(U,{members:i(r),loading:i(e)},null,8,["members","loading"])]))}};export{Y as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.bt-page-detail__content[data-v-51f921bb]{line-height:1.7}.bt-page-detail__content[data-v-51f921bb] img{max-width:100%;height:auto}.bt-page-detail__content[data-v-51f921bb] h2{margin-top:2rem}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as u,o as t,n,p as o,t as c,E as _,e as p,A as m,u as g,x as h,f as s,d as f,I as b}from"./index-COo3Jb7v.js";import{S as x}from"./SyncBadge-B1JBsdUk.js";import{u as y}from"./usePages-DDjDQRCy.js";const k={class:"bt-page-detail"},v={class:"bt-page-detail__header mb-4"},D={class:"bt-page-detail__title"},B={class:"d-flex align-items-center gap-2"},P={key:0,class:"text-muted"},S=["innerHTML"],$={__name:"PageDetail",props:{page:{type:Object,required:!0}},setup(e){const a=e,i=m(()=>a.page.published_at?new Date(a.page.published_at).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):"");return(r,d)=>(t(),n("article",k,[o("header",v,[o("h1",D,c(e.page.title),1),o("div",B,[e.page.published_at?(t(),n("small",P,c(i.value),1)):_("",!0),p(x,{item:e.page},null,8,["item"])])]),o("div",{class:"bt-page-detail__content",innerHTML:e.page.content},null,8,S)]))}},I=u($,[["__scopeId","data-v-51f921bb"]]),L={class:"bt-page-community-page"},M={key:0,class:"text-center p-4 text-muted"},N={key:1,class:"text-center p-4 text-muted"},j={__name:"CommunityPage",setup(e){const{t:a}=g(),i=b(),{current:r,loading:d,get:l}=y();return h(()=>l(i.params.id)),(V,C)=>(t(),n("div",L,[s(d)?(t(),n("div",M,c(s(a)("bt.pages.loading")),1)):s(r)?(t(),f(I,{key:2,page:s(r)},null,8,["page"])):(t(),n("div",N,c(s(a)("bt.pages.not_found")),1))]))}};export{j as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as _,o as l,d as b,w as g,e as i,f as a,y as o,p as m,t as r,n as d,E as v,i as h,h as w,A as y,F as k,C,x as P,I as V,b as x}from"./index-COo3Jb7v.js";import{_ as B,a as S,b as D}from"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import{S as N}from"./SyncBadge-B1JBsdUk.js";import{_ as L}from"./ExtensionSlot-DJKbrq4c.js";import{u as j}from"./usePages-DDjDQRCy.js";const A={class:"d-flex align-items-start justify-content-between gap-2 mb-1"},E={class:"bt-page-card__title mb-0"},F={key:0,class:"text-muted"},I={class:"d-flex align-items-center gap-2"},R={__name:"PageCard",props:{page:{type:Object,required:!0}},emits:["view"],setup(t){const{t:c}=_(),s=t,p=y(()=>{const e=s.page.content||"";return e.length>200?e.slice(0,200)+"…":e}),n=y(()=>new Date(s.page.published_at).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}));return(e,u)=>(l(),b(a(D),{class:"bt-page-card"},{footer:g(()=>[o(e.$slots,"footer",{},()=>[m("div",I,[i(a(w),{variant:"outline-primary",size:"sm",onClick:u[0]||(u[0]=f=>e.$emit("view",t.page))},{default:g(()=>[h(r(a(c)("bt.pages.read")),1)]),_:1}),i(L,{target:"PageCard",slot:"footer",context:{item:t.page}},null,8,["context"])])])]),default:g(()=>[i(a(B),null,{default:g(()=>[o(e.$slots,"title",{},()=>[m("div",A,[m("h5",E,r(t.page.title),1),o(e.$slots,"sync-badge",{},()=>[i(N,{item:t.page},null,8,["item"])])])]),o(e.$slots,"meta",{},()=>[t.page.published_at?(l(),d("small",F,r(n.value),1)):v("",!0)]),o(e.$slots,"body",{},()=>[i(a(S),null,{default:g(()=>[h(r(p.value),1)]),_:1})])]),_:3})]),_:3}))}},q={class:"bt-page-list"},z={key:0,class:"bt-page-list__loading"},M={class:"text-center p-4 text-muted"},O={key:1,class:"bt-page-list__empty"},T={class:"text-center p-4 text-muted"},G={__name:"PageList",props:{pages:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},emits:["view"],setup(t){const{t:c}=_();return(s,p)=>(l(),d("div",q,[o(s.$slots,"header"),t.loading?(l(),d("div",z,[o(s.$slots,"loading",{},()=>[m("div",M,r(a(c)("bt.pages.loading")),1)])])):t.pages.length?(l(!0),d(k,{key:2},C(t.pages,(n,e)=>o(s.$slots,"item",{key:n.id,item:n,index:e},()=>[i(R,{page:n,class:"mb-3",onView:u=>s.$emit("view",n)},null,8,["page","onView"])])),128)):(l(),d("div",O,[o(s.$slots,"empty",{},()=>[m("div",T,r(a(c)("bt.pages.list_empty")),1)])])),o(s.$slots,"footer")]))}},H={class:"bt-page-community-pages"},J={class:"mb-4"},Z={__name:"CommunityPages",setup(t){const{t:c}=_(),s=V(),p=x(),{items:n,loading:e,list:u}=j(s.params.communitySlug);P(()=>u());function f($){p.push({name:"CommunityPage",params:{id:$.id}})}return($,K)=>(l(),d("div",H,[m("h2",J,r(a(c)("bt.pages.heading")),1),i(G,{pages:a(n),loading:a(e),onView:f},null,8,["pages","loading"])]))}};export{Z as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as h,u as y,o as l,n as c,y as n,E as b,p as i,t as r,e as a,w as _,i as p,f as s,B as k,J as $,A as f,x as S,I as B,K as D}from"./index-COo3Jb7v.js";import{u as P}from"./usePosts-Bf2Ccwr4.js";import{_ as w}from"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import{S as x}from"./SyncBadge-B1JBsdUk.js";import{_ as C}from"./ExtensionSlot-DJKbrq4c.js";const V={key:0,class:"bt-post-detail"},N=["src","alt"],I={class:"bt-post-detail__content"},L={class:"d-flex align-items-center gap-2 mb-2"},R={class:"bt-post-detail__title mb-0"},A={class:"text-muted mb-3"},E={key:0},j={class:"bt-post-detail__body"},J={class:"bt-post-detail__footer mt-4"},K={key:1},M={key:2},O={__name:"PostDetail",props:{post:{type:Object,default:null},loading:{type:Boolean,default:!1}},setup(e){const{t:d}=y(),o=e,u=f(()=>{var t;return(t=o.post)!=null&&t.published_at?new Date(o.post.published_at).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"}):""}),m=f(()=>{var t;return{public:"success",private:"danger",protected:"warning"}[(t=o.post)==null?void 0:t.privacy]??"secondary"});return(t,g)=>e.post?(l(),c("article",V,[n(t.$slots,"header",{},()=>[e.post.cover_image_url?(l(),c("img",{key:0,src:e.post.cover_image_url,alt:e.post.title,class:"bt-post-detail__cover"},null,8,N)):b("",!0)],!0),i("div",I,[n(t.$slots,"title",{},()=>[i("div",L,[i("h1",R,r(e.post.title),1),n(t.$slots,"sync-badge",{},()=>[a(x,{item:e.post},null,8,["item"])],!0)])],!0),n(t.$slots,"meta",{},()=>[i("p",A,[e.post.published_at?(l(),c("span",E,r(u.value),1)):b("",!0),a(s(w),{variant:m.value,class:"ms-2"},{default:_(()=>[p(r(e.post.privacy),1)]),_:1},8,["variant"])])],!0),n(t.$slots,"body",{},()=>[i("div",j,r(e.post.content),1)],!0),n(t.$slots,"footer",{},()=>[i("div",J,[a(C,{target:"PostDetail",slot:"footer",context:{item:e.post}},null,8,["context"])])],!0)])])):e.loading?(l(),c("div",K,[a(s(k),{label:s(d)("bt.posts.loading")},null,8,["label"])])):(l(),c("div",M,[a(s($),{variant:"warning","model-value":!0},{default:_(()=>[p(r(s(d)("bt.errors.not_found")),1)]),_:1})]))}},T=h(O,[["__scopeId","data-v-6b7bc2a4"]]),q={class:"bt-community-post"},W={__name:"CommunityPost",setup(e){const{t:d}=y(),o=B(),{current:u,loading:m,get:t}=P(o.params.communitySlug);return S(()=>t(o.params.id)),(g,z)=>{const v=D("RouterLink");return l(),c("div",q,[a(v,{to:{name:"CommunityPosts",params:{communitySlug:s(o).params.communitySlug}},class:"btn btn-link ps-0"},{default:_(()=>[p(r(s(d)("bt.actions.back")),1)]),_:1},8,["to"]),a(T,{post:s(u),loading:s(m)},null,8,["post","loading"])])}}};export{W as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.bt-post-detail__cover[data-v-6b7bc2a4]{width:100%;max-height:300px;object-fit:cover;border-radius:8px;margin-bottom:1.5rem}.bt-post-detail__title[data-v-6b7bc2a4]{font-size:1.75rem;font-weight:700}.bt-post-detail__body[data-v-6b7bc2a4]{line-height:1.75;white-space:pre-wrap}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as $,r as C,o as c,d as y,w as u,e as a,f as t,_,g as I,v as N,h as P,B as U,E as S,i as w,t as v,j,k as M,l as k,a as A,x as E,n as F,p as x,G as O,I as R,b as T}from"./index-COo3Jb7v.js";import{u as q}from"./usePosts-Bf2Ccwr4.js";import{_ as D}from"./PostList-DYFgxlE8.js";import{_ as G}from"./BFormSelect.vue_vue_type_script_setup_true_lang-BigptVap-B_HbOOZR.js";import"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import"./SyncBadge-B1JBsdUk.js";import"./ExtensionSlot-DJKbrq4c.js";const z={__name:"PostForm",props:{model:{type:Object,default:()=>({})},communityId:{type:String,default:null}},emits:["submit"],setup(V,{emit:m}){const{t:o}=$(),n=V,p=m,s=k(!1),l=C({title:n.model.title||"",content:n.model.content||"",privacy:n.model.privacy||"public",community_id:n.communityId||n.model.community_id||null}),f=[{value:"public",text:"Public"},{value:"protected",text:"Community members only"},{value:"private",text:"Private"}];async function b(){s.value=!0;try{p("submit",{...l})}finally{s.value=!1}}return(g,e)=>(c(),y(t(M),{onSubmit:j(b,["prevent"])},{default:u(()=>[a(t(_),{label:t(o)("bt.posts.title_label"),"label-for":"post-title"},{default:u(()=>[a(t(I),{id:"post-title",modelValue:l.title,"onUpdate:modelValue":e[0]||(e[0]=i=>l.title=i),required:"",placeholder:t(o)("bt.posts.title_label")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),a(t(_),{label:t(o)("bt.posts.content_label"),"label-for":"post-content"},{default:u(()=>[a(t(N),{id:"post-content",modelValue:l.content,"onUpdate:modelValue":e[1]||(e[1]=i=>l.content=i),rows:"5",placeholder:t(o)("bt.posts.content_label")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),a(t(_),{label:t(o)("bt.posts.privacy_label"),"label-for":"post-privacy"},{default:u(()=>[a(t(G),{id:"post-privacy",modelValue:l.privacy,"onUpdate:modelValue":e[2]||(e[2]=i=>l.privacy=i),options:f},null,8,["modelValue"])]),_:1},8,["label"]),a(t(P),{type:"submit",variant:"primary",disabled:s.value},{default:u(()=>[s.value?(c(),y(t(U),{key:0,small:""})):S("",!0),w(" "+v(s.value?t(o)("bt.posts.saving"):t(o)("bt.posts.save")),1)]),_:1},8,["disabled"])]),_:1}))}},H={class:"bt-community-posts"},J={class:"d-flex align-items-center justify-content-between mb-3"},et={__name:"CommunityPosts",setup(V){const{t:m}=$(),o=R(),n=T(),p=A(),s=o.params.communitySlug,{items:l,loading:f,listPublished:b,create:g}=q(s),e=k(!1);E(()=>b());async function i(r){await g(r),e.value=!1}function B(r){n.push({name:"CommunityPost",params:{...o.params,id:r.id}})}return(r,d)=>(c(),F("div",H,[x("div",J,[x("h2",null,v(t(m)("bt.navigation.posts")),1),t(p).isAuthenticated?(c(),y(t(P),{key:0,variant:"primary",onClick:d[0]||(d[0]=h=>e.value=!0)},{default:u(()=>[w(v(t(m)("bt.posts.create")),1)]),_:1})):S("",!0)]),a(t(O),{modelValue:e.value,"onUpdate:modelValue":d[1]||(d[1]=h=>e.value=h),title:t(m)("bt.posts.create"),"hide-footer":""},{default:u(()=>[a(z,{"community-id":t(s),onSubmit:i},null,8,["community-id"])]),_:1},8,["modelValue","title"]),a(D,{posts:t(l),loading:t(f),onView:B},null,8,["posts","loading"])]))}};export{et as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as a,n as r,p as t,t as o,f as e,e as n,w as c,R as i,o as _,i as d}from"./index-COo3Jb7v.js";const l={id:"error-404"},m={class:"row heading mb-3"},p={class:"col-md"},u={class:"mb-4"},h={class:"text-center mt-4"},v={__name:"Error404",setup(b){const{t:s}=a();return(f,x)=>(_(),r("section",l,[t("div",m,[t("div",p,[t("h2",u,o(e(s)("bt.errors.not_found_heading")),1),t("p",null,o(e(s)("bt.errors.not_found_message")),1),t("div",h,[n(e(i),{to:"/",title:e(s)("bt.app.name"),class:"btn btn-primary card-action"},{default:c(()=>[d(o(e(s)("bt.errors.visit_home")),1)]),_:1},8,["title"])])])])]))}};export{v as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{L as y,M as $,u as b,o as p,d as g,w as a,e as n,f as r,y as i,p as c,t as l,n as w,E,i as v,h,A as _}from"./index-COo3Jb7v.js";import{_ as D}from"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import{_ as S,a as C,b as R}from"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import{S as B}from"./SyncBadge-B1JBsdUk.js";import{_ as O}from"./ExtensionSlot-DJKbrq4c.js";function W(e=null){const o=$("events",e?{community_id:e}:{});async function s(f={}){const d=await y(),u=new Date().toISOString();if(e){const{rows:t}=await d.query("SELECT * FROM events WHERE starts_at >= $1 AND community_id = $2 ORDER BY starts_at ASC",[u,e]);return o.items.value=t,t}else{const{rows:t}=await d.query("SELECT * FROM events WHERE starts_at >= $1 ORDER BY starts_at ASC",[u]);return o.items.value=t,t}}return{...o,listUpcoming:s}}const k={class:"d-flex align-items-start justify-content-between gap-2 mb-1"},L={class:"bt-event-card__name mb-0"},N={class:"bt-event-card__meta mb-2"},V={class:"text-muted"},x={key:0},A={class:"d-flex align-items-center gap-2"},Y={__name:"EventCard",props:{event:{type:Object,required:!0}},emits:["view"],setup(e){const{t:o}=b(),s=e,f=_(()=>{if(!s.event.starts_at)return"";const t=new Date(s.event.starts_at).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"});if(!s.event.ends_at)return t;const m=new Date(s.event.ends_at).toLocaleDateString(void 0,{month:"short",day:"numeric"});return`${t} – ${m}`}),d=_(()=>({public:"success",private:"danger",protected:"warning"})[s.event.privacy]??"secondary"),u=_(()=>{const t=s.event.description||"";return t.length>150?t.slice(0,150)+"…":t});return(t,m)=>(p(),g(r(R),{class:"bt-event-card"},{footer:a(()=>[i(t.$slots,"footer",{},()=>[c("div",A,[n(r(h),{variant:"outline-primary",size:"sm",onClick:m[0]||(m[0]=q=>t.$emit("view",e.event))},{default:a(()=>[v(l(r(o)("bt.events.view")),1)]),_:1}),n(O,{target:"EventCard",slot:"footer",context:{item:e.event}},null,8,["context"])])])]),default:a(()=>[n(r(S),null,{default:a(()=>[i(t.$slots,"title",{},()=>[c("div",k,[c("h5",L,l(e.event.name),1),i(t.$slots,"sync-badge",{},()=>[n(B,{item:e.event},null,8,["item"])])])]),i(t.$slots,"meta",{},()=>[c("div",N,[c("small",V,[e.event.starts_at?(p(),w("span",x,"📅 "+l(f.value),1)):E("",!0)]),n(r(D),{variant:d.value,class:"ms-2"},{default:a(()=>[v(l(e.event.privacy),1)]),_:1},8,["variant"])])]),i(t.$slots,"body",{},()=>[n(r(C),{class:"bt-event-card__description"},{default:a(()=>[v(l(u.value),1)]),_:1})])]),_:3})]),_:3}))}};export{Y as _,W as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as m,o as t,n as s,y as n,e as r,f as i,B as c,p as u,t as v,F as _,C as f}from"./index-COo3Jb7v.js";import{_ as y}from"./EventCard-vfutXTdg.js";const p={class:"bt-event-list"},$={key:0},h={key:1},g={class:"text-muted"},b={key:2},E={__name:"EventList",props:{events:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},emits:["view"],setup(o){const{t:l}=m();return(e,k)=>(t(),s("div",p,[n(e.$slots,"header"),o.loading?(t(),s("div",$,[n(e.$slots,"loading",{},()=>[r(i(c),{label:i(l)("bt.events.loading")},null,8,["label"])])])):o.events.length?(t(),s("div",b,[(t(!0),s(_,null,f(o.events,(a,d)=>(t(),s("div",{key:a.id,class:"mb-3"},[n(e.$slots,"item",{item:a,index:d},()=>[r(y,{event:a,onView:B=>e.$emit("view",a)},null,8,["event","onView"])])]))),128))])):(t(),s("div",h,[n(e.$slots,"empty",{},()=>[u("p",g,v(i(l)("bt.events.list_empty")),1)])])),n(e.$slots,"footer")]))}};export{E as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as n,n as a,C as u,d as l,a2 as i,Q as m,F as f,A as _}from"./index-COo3Jb7v.js";const g={};function d(r,e){return g[`${r}:${e}`]??[]}const k={__name:"ExtensionSlot",props:{target:{type:String,required:!0},slot:{type:String,required:!0},context:{type:Object,default:()=>({})}},setup(r){const e=r,s=_(()=>d(e.target,e.slot));function c(t){return typeof t.props=="function"?t.props(e.context):t.props??{}}return(t,y)=>(n(!0),a(f,null,u(s.value,(o,p)=>(n(),l(m(o.component),i({key:p},{ref_for:!0},c(o)),null,16))),128))}};export{k as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.bt-post-card__cover img[data-v-8124df4e]{width:100%;height:160px;object-fit:cover}.bt-post-card__title[data-v-8124df4e]{font-size:1rem;font-weight:600}.bt-post-card__body[data-v-8124df4e]{font-size:.875rem;color:#374151}.bt-post-card__actions[data-v-8124df4e]{flex-wrap:wrap}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{m as y,u as h,o,d as g,w as l,e as i,f as n,y as a,p as c,t as m,n as r,E as b,i as p,h as w,A as f,B as k,F as C,C as B}from"./index-COo3Jb7v.js";import{_ as V}from"./BBadge.vue_vue_type_script_setup_true_lang-IIZ8QpjG-Z9WDKHqT.js";import{_ as S,a as D,b as N}from"./BCardText.vue_vue_type_script_setup_true_lang-Be6CD36N-B5JCTdmm.js";import{S as P}from"./SyncBadge-B1JBsdUk.js";import{_ as L}from"./ExtensionSlot-DJKbrq4c.js";const j={key:0,class:"bt-post-card__cover"},A=["src","alt"],E={class:"d-flex align-items-start justify-content-between gap-2 mb-1"},F={class:"bt-post-card__title mb-0"},I={class:"bt-post-card__meta mb-2"},q={class:"text-muted"},z={key:0},O={class:"bt-post-card__actions d-flex align-items-center gap-2"},T={__name:"PostCard",props:{post:{type:Object,required:!0}},emits:["view"],setup(t){const{t:u}=h(),s=t,v=f(()=>{const e=s.post.content||"";return e.length>200?e.slice(0,200)+"…":e}),d=f(()=>s.post.published_at?new Date(s.post.published_at).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):""),_=f(()=>({public:"success",private:"danger",protected:"warning"})[s.post.privacy]??"secondary");return(e,$)=>(o(),g(n(N),{class:"bt-post-card"},{header:l(()=>[a(e.$slots,"header",{},()=>[t.post.cover_image_url?(o(),r("div",j,[c("img",{src:t.post.cover_image_url,alt:t.post.title},null,8,A)])):b("",!0)],!0)]),footer:l(()=>[a(e.$slots,"footer",{},()=>[c("div",O,[i(n(w),{variant:"outline-primary",size:"sm",onClick:$[0]||($[0]=Q=>e.$emit("view",t.post))},{default:l(()=>[p(m(n(u)("bt.posts.read_more")),1)]),_:1}),i(L,{target:"PostCard",slot:"footer",context:{item:t.post}},null,8,["context"])])],!0)]),default:l(()=>[i(n(S),null,{default:l(()=>[a(e.$slots,"title",{},()=>[c("div",E,[c("h5",F,m(t.post.title),1),a(e.$slots,"sync-badge",{},()=>[i(P,{item:t.post},null,8,["item"])],!0)])],!0),a(e.$slots,"meta",{},()=>[c("div",I,[c("small",q,[t.post.published_at?(o(),r("span",z,m(d.value),1)):b("",!0),i(n(V),{variant:_.value,class:"ms-2"},{default:l(()=>[p(m(t.post.privacy),1)]),_:1},8,["variant"])])])],!0),a(e.$slots,"body",{},()=>[i(n(D),{class:"bt-post-card__body"},{default:l(()=>[p(m(v.value),1)]),_:1})],!0)]),_:3})]),_:3}))}},x=y(T,[["__scopeId","data-v-8124df4e"]]),G={class:"bt-post-list"},H={key:0},J={key:1},K={class:"text-muted"},M={key:2,class:"bt-post-list__items"},Z={__name:"PostList",props:{posts:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1}},emits:["view"],setup(t){const{t:u}=h();return(s,v)=>(o(),r("div",G,[a(s.$slots,"header"),t.loading?(o(),r("div",H,[a(s.$slots,"loading",{},()=>[i(n(k),{label:n(u)("bt.posts.loading")},null,8,["label"])])])):t.posts.length?(o(),r("div",M,[(o(!0),r(C,null,B(t.posts,(d,_)=>(o(),r("div",{key:d.id,class:"mb-3"},[a(s.$slots,"item",{item:d,index:_},()=>[i(x,{post:d,onView:e=>s.$emit("view",d)},null,8,["post","onView"])])]))),128))])):(o(),r("div",J,[a(s.$slots,"empty",{},()=>[c("p",K,m(n(u)("bt.posts.list_empty")),1)])])),a(s.$slots,"footer")]))}};export{Z as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as c,m as i,u as _,o as e,n as a,E as d,P as v}from"./index-COo3Jb7v.js";function p(n){const s=c(()=>{var y;return((y=n==null?void 0:n.value)==null?void 0:y._sync_status)??(n==null?void 0:n._sync_status)??"synced"}),l=c(()=>s.value==="local"),u=c(()=>s.value==="syncing"),t=c(()=>s.value==="synced"),r=c(()=>s.value==="conflict"),o=c(()=>{switch(s.value){case"local":return"Saved locally — will sync when online";case"syncing":return"Syncing…";case"synced":return"Synced";case"conflict":return"Conflict — newer version on server";default:return""}});return{syncStatus:s,isLocal:l,isSyncing:u,isSynced:t,isConflict:r,label:o}}const f=["title","aria-label"],g={key:0,class:"sync-dot sync-dot--local"},h={key:1,class:"sync-dot sync-dot--syncing sync-dot--spin"},S={key:2,class:"sync-dot sync-dot--conflict"},b={key:3,class:"sync-dot sync-dot--needs-auth"},k={__name:"SyncBadge",props:{item:{type:Object,default:null},status:{type:String,default:null,validator:n=>["local","syncing","synced","conflict","needs-auth",null].includes(n)}},setup(n){const{t:s}=_(),l=n,{syncStatus:u}=p(c(()=>l.item)),t=c(()=>l.status??u.value),r=c(()=>t.value!=="synced"&&t.value!==null),o=c(()=>{switch(t.value){case"local":return s("bt.sync.status.local_title");case"syncing":return s("bt.sync.status.syncing");case"conflict":return s("bt.sync.status.conflict");case"needs-auth":return s("bt.sync.status.needs_auth_title");default:return""}});return(y,w)=>r.value?(e(),a("span",{key:0,class:v(["sync-badge",`sync-badge--${t.value}`]),title:o.value,"aria-label":o.value,role:"status"},[t.value==="local"?(e(),a("span",g)):t.value==="syncing"?(e(),a("span",h)):t.value==="conflict"?(e(),a("span",S,"!")):t.value==="needs-auth"?(e(),a("span",b,"🔒")):d("",!0)],10,f)):d("",!0)}},C=i(k,[["__scopeId","data-v-00999818"]]);export{C as S};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@keyframes sync-spin-00999818{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes sync-pulse-00999818{0%,to{opacity:1}50%{opacity:.5}}.sync-badge[data-v-00999818]{display:inline-flex;align-items:center;margin-left:4px;vertical-align:middle}.sync-dot[data-v-00999818]{width:8px;height:8px;border-radius:50%;background-color:transparent;display:inline-block}.sync-dot--local[data-v-00999818]{background-color:#f59e0b;animation:sync-pulse-00999818 2s ease-in-out infinite}.sync-dot--syncing[data-v-00999818]{border:2px solid #3b82f6;background-color:transparent;width:8px;height:8px;border-radius:50%;border-top-color:transparent;animation:sync-spin-00999818 .8s linear infinite}.sync-dot--conflict[data-v-00999818]{background-color:#ef4444;color:#fff;font-size:6px;font-weight:700;width:12px;height:12px;display:inline-flex;align-items:center;justify-content:center}.sync-dot--needs-auth[data-v-00999818]{background-color:transparent;font-size:10px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@media(min-width:992px){#new-password[data-v-99e23d15]{width:50vw;margin:auto}#new-password section[data-v-99e23d15]{padding:10%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as m,a as y,b as P,c as S,o as b,d as $,w as r,e as o,f as s,_ as x,g as N,s as T,i as _,t as c,h as V,j as B,k as U,l as f,m as F,n as I,p as h}from"./index-COo3Jb7v.js";const j={__name:"BtUserNewPasswordForm",props:{resetPasswordToken:{type:String,default:""}},setup(n){const{t:e}=m(),i=n,p=y(),g=P(),{toast:w}=S(),d=f(!1),l=f("");async function k(){var u,a;d.value=!0;try{await p.newPassword({user:{reset_password_token:i.resetPasswordToken,password:l.value}}),await g.push("/users/sign-in"),w("Password changed. You can now sign in.","success")}catch(t){const v=((a=(u=t==null?void 0:t.response)==null?void 0:u.data)==null?void 0:a.error)||"Failed to change password.";w(v,"danger")}finally{d.value=!1}}return(u,a)=>(b(),$(s(U),{onSubmit:B(k,["prevent"])},{default:r(()=>[o(s(x),{label:s(e)("bt.auth.new_password"),"label-for":"new-password"},{default:r(()=>[o(s(N),{id:"new-password",modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=t=>l.value=t),type:"password",required:"",minlength:"12",placeholder:s(e)("bt.auth.new_password")},null,8,["modelValue","placeholder"]),o(s(T),null,{default:r(()=>[_(c(s(e)("bt.auth.password_hint")),1)]),_:1})]),_:1},8,["label"]),o(s(V),{type:"submit",variant:"primary",class:"w-100",disabled:d.value},{default:r(()=>[_(c(s(e)("bt.auth.change_password")),1)]),_:1},8,["disabled"])]),_:1}))}},q={id:"new-password"},A={__name:"UserPasswordNew",props:{resetPasswordToken:{type:String,default:""}},setup(n){const{t:e}=m();return(i,p)=>(b(),I("div",q,[h("section",null,[h("h2",null,c(s(e)("bt.auth.heading_password_new")),1),o(j,{"reset-password-token":n.resetPasswordToken},null,8,["reset-password-token"])])]))}},D=F(A,[["__scopeId","data-v-99e23d15"]]);export{D as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as h,a as y,c as x,o as b,d as P,w as l,e as s,f as e,_ as V,g as $,h as k,i as c,t as u,j as B,k as S,l as p,m as U,n as N,p as n,q as f}from"./index-COo3Jb7v.js";const R={__name:"BtUserResetPasswordForm",setup(v){const{t:a}=h(),m=y(),{toast:i}=x(),d=p(!1),o=p("");async function w(){var _,t;d.value=!0;try{await m.resetPassword({email:o.value}),i("Password reset email sent. Please check your inbox.","success"),o.value=""}catch(r){const g=((t=(_=r==null?void 0:r.response)==null?void 0:_.data)==null?void 0:t.error)||"Failed to send reset email.";i(g,"danger")}finally{d.value=!1}}return(_,t)=>(b(),P(e(S),{onSubmit:B(w,["prevent"])},{default:l(()=>[s(e(V),{label:e(a)("bt.auth.email"),"label-for":"reset-email"},{default:l(()=>[s(e($),{id:"reset-email",modelValue:o.value,"onUpdate:modelValue":t[0]||(t[0]=r=>o.value=r),type:"email",required:"",placeholder:e(a)("bt.auth.email")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(e(k),{type:"submit",variant:"primary",class:"w-100",disabled:d.value},{default:l(()=>[c(u(e(a)("bt.auth.send_reset_email")),1)]),_:1},8,["disabled"])]),_:1}))}},q={id:"reset-password"},F={__name:"UserPasswordReset",setup(v){const{t:a}=h();return(m,i)=>(b(),N("div",q,[n("section",null,[n("h2",null,u(e(a)("bt.auth.heading_password_reset")),1),s(R),n("div",null,[s(e(f),{to:"/users/sign-in"},{default:l(()=>[c(u(e(a)("bt.auth.prompt_remembered_password")),1)]),_:1})]),n("div",null,[s(e(f),{to:"/users/sign-up"},{default:l(()=>[c(u(e(a)("bt.auth.prompt_sign_up")),1)]),_:1})])])]))}},T=U(F,[["__scopeId","data-v-f4f6e8b4"]]);export{T as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@media(min-width:992px){#reset-password[data-v-f4f6e8b4]{width:50vw;margin:auto}#reset-password section[data-v-f4f6e8b4]{padding:10%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as v,a as k,c as y,o as w,d as C,w as c,e as i,f as e,_ as x,g as $,h as S,i as p,t as f,j as T,k as V,l as b,m as B,x as R,n as U,p as m,q as g,b as E}from"./index-COo3Jb7v.js";const N={__name:"BtUserResendConfirmationForm",setup(h){const{t}=v(),u=k(),{toast:d}=y(),r=b(!1),o=b("");async function l(){var n,a;r.value=!0;try{await u.resendConfirmation({user:{email:o.value}}),d("Confirmation email sent. Please check your inbox.","success"),o.value=""}catch(s){const _=((a=(n=s==null?void 0:s.response)==null?void 0:n.data)==null?void 0:a.error)||"Failed to send confirmation email.";d(_,"danger")}finally{r.value=!1}}return(n,a)=>(w(),C(e(V),{onSubmit:T(l,["prevent"])},{default:c(()=>[i(e(x),{label:e(t)("bt.auth.email"),"label-for":"resend-email"},{default:c(()=>[i(e($),{id:"resend-email",modelValue:o.value,"onUpdate:modelValue":a[0]||(a[0]=s=>o.value=s),type:"email",required:"",placeholder:e(t)("bt.auth.email")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),i(e(S),{type:"submit",variant:"primary",class:"w-100",disabled:r.value},{default:c(()=>[p(f(e(t)("bt.auth.send_confirmation_email")),1)]),_:1},8,["disabled"])]),_:1}))}},j={id:"resend-confirmation"},q={__name:"UserResendConfirmation",props:{confirmationToken:{type:String,default:null}},setup(h){const{t}=v(),u=h,d=k(),r=E(),{toast:o}=y();return R(async()=>{var l;if(u.confirmationToken)try{await d.sendConfirmation({confirmation_token:u.confirmationToken}),await r.push("/users/sign-in"),o("Your account is confirmed. You can now sign in.","info")}catch(n){const a=((l=n==null?void 0:n.response)==null?void 0:l.data)||{},s=a.confirmation_token?"Confirmation Token":a.email?"Email":"",_=(a.confirmation_token||a.email||["There was an error"]).join(", ");o(`${s} ${_}`,"danger",{title:"Confirmation Error",autoHideDelay:6e3})}}),(l,n)=>(w(),U("div",j,[m("section",null,[m("h2",null,f(e(t)("bt.auth.heading_resend_confirmation")),1),i(N),m("div",null,[i(e(g),{to:"/users/sign-in"},{default:c(()=>[p(f(e(t)("bt.auth.prompt_confirmed")),1)]),_:1})]),m("div",null,[i(e(g),{to:"/users/sign-up"},{default:c(()=>[p(f(e(t)("bt.auth.prompt_sign_up")),1)]),_:1})])])]))}},F=B(q,[["__scopeId","data-v-1d03d49f"]]);export{F as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@media(min-width:992px){#resend-confirmation[data-v-1d03d49f]{width:50vw;margin:auto}#resend-confirmation section[data-v-1d03d49f]{padding:10%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as g,a as V,b as k,c as x,o as w,d as I,w as n,e as s,f as e,_ as b,g as h,h as $,i as u,t as i,j as B,k as U,r as q,l as N,m as T,n as j,p as o,q as p}from"./index-COo3Jb7v.js";const A={__name:"BtUserSignInForm",setup(v){const{t:a}=g(),_=V(),m=k(),{toast:f}=x(),d=N(!1),r=q({user:{email:"",password:""}});async function y(){var c,t;d.value=!0;try{await _.signIn(r.user),await m.push("/me"),f("Welcome back!","success")}catch(l){const S=((t=(c=l==null?void 0:l.response)==null?void 0:c.data)==null?void 0:t.error)||"Sign in failed. Please check your credentials.";f(S,"danger")}finally{d.value=!1}}return(c,t)=>(w(),I(e(U),{onSubmit:B(y,["prevent"])},{default:n(()=>[s(e(b),{label:e(a)("bt.auth.email"),"label-for":"sign-in-email"},{default:n(()=>[s(e(h),{id:"sign-in-email",modelValue:r.user.email,"onUpdate:modelValue":t[0]||(t[0]=l=>r.user.email=l),type:"email",required:"",placeholder:e(a)("bt.auth.email")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(e(b),{label:e(a)("bt.auth.password"),"label-for":"sign-in-password"},{default:n(()=>[s(e(h),{id:"sign-in-password",modelValue:r.user.password,"onUpdate:modelValue":t[1]||(t[1]=l=>r.user.password=l),type:"password",required:"",placeholder:e(a)("bt.auth.password")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(e($),{type:"submit",variant:"primary",class:"w-100",disabled:d.value},{default:n(()=>[u(i(e(a)("bt.auth.sign_in")),1)]),_:1},8,["disabled"])]),_:1}))}},C={id:"sign-in"},D={__name:"UserSignIn",setup(v){const{t:a}=g();return(_,m)=>(w(),j("div",C,[o("section",null,[o("h2",null,i(e(a)("bt.auth.heading_sign_in")),1),s(A),o("div",null,[s(e(p),{to:"/users/sign-up"},{default:n(()=>[u(i(e(a)("bt.auth.prompt_sign_up")),1)]),_:1})]),o("div",null,[s(e(p),{to:"/users/password/reset"},{default:n(()=>[u(i(e(a)("bt.auth.prompt_forgot_password")),1)]),_:1})]),o("div",null,[s(e(p),{to:"/users/confirmation/resend"},{default:n(()=>[u(i(e(a)("bt.auth.prompt_resend")),1)]),_:1})])])]))}},F=T(D,[["__scopeId","data-v-d14bebde"]]);export{F as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@media(min-width:992px){#sign-in[data-v-d14bebde]{width:50vw;margin:auto}#sign-in section[data-v-d14bebde]{padding:10%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@media(min-width:992px){#sign-up[data-v-20d7512b]{width:50vw;margin:auto}#sign-up section[data-v-20d7512b]{padding:10%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as h,a as U,b as S,c as $,o as w,d as x,w as r,p as o,t as u,f as e,e as s,_ as i,g as m,s as k,i as d,v as q,h as B,j as N,k as I,r as P,l as T,m as j,n as A,q as g}from"./index-COo3Jb7v.js";const C={__name:"BtUserSignUpForm",setup(V){const{t:a}=h(),c=U(),b=S(),{toast:f}=$(),p=T(!1),n=P({user:{email:"",password:"",person_attributes:{name:"",description:""}}});async function y(){var _,l;p.value=!0;try{await c.signUp(n.user),await b.push("/users/sign-in"),f("Please check your email to confirm your account.","success")}catch(t){const v=((l=(_=t==null?void 0:t.response)==null?void 0:_.data)==null?void 0:l.error)||"Sign up failed. Please try again.";f(v,"danger")}finally{p.value=!1}}return(_,l)=>(w(),x(e(I),{onSubmit:N(y,["prevent"])},{default:r(()=>[o("fieldset",null,[o("legend",null,u(e(a)("bt.auth.login_info")),1),s(e(i),{label:e(a)("bt.auth.email"),"label-for":"sign-up-email"},{default:r(()=>[s(e(m),{id:"sign-up-email",modelValue:n.user.email,"onUpdate:modelValue":l[0]||(l[0]=t=>n.user.email=t),type:"email",required:"",placeholder:e(a)("bt.auth.email")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(e(i),{label:e(a)("bt.auth.password"),"label-for":"sign-up-password"},{default:r(()=>[s(e(m),{id:"sign-up-password",modelValue:n.user.password,"onUpdate:modelValue":l[1]||(l[1]=t=>n.user.password=t),type:"password",required:"",minlength:"12",placeholder:e(a)("bt.auth.password")},null,8,["modelValue","placeholder"]),s(e(k),null,{default:r(()=>[d(u(e(a)("bt.auth.password_hint")),1)]),_:1})]),_:1},8,["label"])]),o("fieldset",null,[o("legend",null,u(e(a)("bt.auth.personal_info")),1),s(e(i),{label:e(a)("bt.person.name_label"),"label-for":"sign-up-name"},{default:r(()=>[s(e(m),{id:"sign-up-name",modelValue:n.user.person_attributes.name,"onUpdate:modelValue":l[2]||(l[2]=t=>n.user.person_attributes.name=t),type:"text",required:"",placeholder:e(a)("bt.person.name_label")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(e(i),{label:e(a)("bt.person.description_label"),"label-for":"sign-up-description"},{default:r(()=>[s(e(q),{id:"sign-up-description",modelValue:n.user.person_attributes.description,"onUpdate:modelValue":l[3]||(l[3]=t=>n.user.person_attributes.description=t),required:"",placeholder:e(a)("bt.person.description_label"),rows:"3"},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),s(e(B),{type:"submit",variant:"primary",class:"w-100",disabled:p.value},{default:r(()=>[d(u(e(a)("bt.auth.sign_up")),1)]),_:1},8,["disabled"])]),_:1}))}},D={id:"sign-up"},E={__name:"UserSignUp",setup(V){const{t:a}=h();return(c,b)=>(w(),A("div",D,[o("section",null,[o("h2",null,u(e(a)("bt.auth.heading_sign_up")),1),s(C),o("div",null,[s(e(g),{to:"/users/sign-in"},{default:r(()=>[d(u(e(a)("bt.auth.prompt_sign_in")),1)]),_:1})]),o("div",null,[s(e(g),{to:"/users/confirmation/resend"},{default:r(()=>[d(u(e(a)("bt.auth.prompt_resend_full")),1)]),_:1})])])]))}},M=j(E,[["__scopeId","data-v-20d7512b"]]);export{M as default};
|
|
Binary file
|