From e236c3e8f68dd8b71a3a82cedeba91f1904a36f1 Mon Sep 17 00:00:00 2001 From: upsiflu Date: Fri, 6 Dec 2024 13:54:17 +0100 Subject: [PATCH] feat(ui-docs): document contributing to Ui components --- front/ui-docs/.vitepress/config.ts | 10 +++- front/ui-docs/contributing.md | 31 ++++++++++++ front/ui-docs/image.png | Bin 0 -> 43503 bytes front/ui-docs/index.md | 46 ++++++++++------- front/ui-docs/using-color.md | 1 + front/ui-docs/using-components.md | 77 +++++++++++++++++++++++++++++ front/ui-docs/vite.config.ts | 1 + 7 files changed, 147 insertions(+), 19 deletions(-) create mode 100644 front/ui-docs/contributing.md create mode 100644 front/ui-docs/image.png create mode 100644 front/ui-docs/using-color.md create mode 100644 front/ui-docs/using-components.md diff --git a/front/ui-docs/.vitepress/config.ts b/front/ui-docs/.vitepress/config.ts index 2e9a50cd8..87ec8559a 100644 --- a/front/ui-docs/.vitepress/config.ts +++ b/front/ui-docs/.vitepress/config.ts @@ -1,7 +1,7 @@ import { defineConfig } from 'vitepress' export default defineConfig({ - title: 'Funkwhale Vue Components', + title: 'Funkwhale Ui', cleanUrls: true, cacheDir: './.vitepress/.vite', themeConfig: { @@ -10,8 +10,14 @@ export default defineConfig({ { text: 'Gitlab', link: 'https://dev.funkwhale.audio/funkwhale/ui' }, ], sidebar: [ + {text:'Contributing', link:'/contributing'}, + { + text: 'Using Color', link: '/using-color' + }, + { + text: 'Using Components', link: '/using-components' + }, { - text: 'Components', items: [ { text: 'Activity', link: '/components/ui/activity' }, { text: 'Alert', link: '/components/ui/alert' }, diff --git a/front/ui-docs/contributing.md b/front/ui-docs/contributing.md new file mode 100644 index 000000000..7449190f0 --- /dev/null +++ b/front/ui-docs/contributing.md @@ -0,0 +1,31 @@ +# Contributing + +[[toc]] + +## Setting up your IDE + +If you are using vscode, [enable `Vue` code hints in the `.md` +docs](https://vitepress.dev/guide/using-vue#vs-code-intellisense-support): + +```json +// .vscode/settings.json +"vue.server.includeLanguages": ["vue", "markdown"] +``` + +## Adding new Ui components + +::: tip Prerequisites + +✔ I am using the same pattern in many different places in the app + +✔ The pattern is not coupled with any funkwhale types + +✔ It's a conventional Ui pattern + +::: + +1. Create a file `Xyz.vue` at `src/components/ui` and code the component +2. Add a file `xyz.md` at `ui-docs/components` with exhaustive examples +3. In `ui-docs/.vitepress/config.ts`, add the component to the sidebar links + +Make sure to follow the [anatomy of a Component](./using-components#anatomy-of-a-component-file)! diff --git a/front/ui-docs/image.png b/front/ui-docs/image.png new file mode 100644 index 0000000000000000000000000000000000000000..a038018b0b2ec115e66166ff94b5786791acd3e2 GIT binary patch literal 43503 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%0Aj- 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

UxH>HSQmdgv{M>%+Lqj&a8 zb<9-U!;5BS!>;yfBkpD51*D(A_RJ$$ZAxyai@Cn`ov0*cqUTMHC=Os-t&?wbZ$F<* zV8eYVkv^U#rnwI|XbBz4G5A?3qi!&IvjbM0l-8N^!ytb>yPpe*XMI7_vs2V5-nR|@ zWk#OpLs+yftX}Et)QC18c1v-%!T(-3y;Jzh&B`s)Gdnr%0@%heBgHUh>Jq>QJFE#1@=^;4S1Xn4%px5t2#PD+5KW&HsE`zZW&)EO5lJ4wE|Dck;gk+U1 z8=p<`+l282-|0vye*=tt;%uq!uIHI)%k83G5Ex|c@c2WJCfJ5DVJ3r2$u6 zVXIWFY6>*{Pl;$<;tANl;*$m)Yohdm;&H(ZWPYT^a2n$$+|$*i%fwaNHhA1r2?9pN zLdPPa^DQL%vWKVW`88kEFlAB;j~c|B@5El~i-D6Rf$)ZUr%f+7N*Q`Ijh!oNgggi% zfD+0*o~yq~+)jhf$l2UPB}sFHseWM=m>abg{)8rVf0Hjbx_Kw$my>eoOpcV-inY=Tx$vQY80FtKW2(5RO34sd+YSj`gxo zn`+4)nE+zn(2&c_{$bzTV=8G_guRLeYL%ybVj`*~#elyXb7InG|4)?g&FF#*-I$vM zuVhiEKq9!RjRFDcGWovaYcE=~of>2Ac{^q<1D&5xsOW)p{X z4HXn~?F*0_G^S(V2IzR*IZK(d+w6E&U&?XphrwOxK64^Wt*}O(zK0yFPm*mGmk0;S zdnzQ6pQEnxH74BxWyT<*E003Qa!$t9*8$HJ$JdbRkb*u>tKRh^y&S7+{E4a z|DT(5{EwTM86JnL$8lf{aUONux++|?J1$I-VFHEgvsFx1b_@Eg5gtDPAt((!GJ(dR zjz(KO$H}#@8hG72Nz6tCJL~$GMy2KfH}tMx?GIfbVb?f?fc7N0Te-3T!?JZ}Z|z>s zsH#VoC_vM4UOr@~%O%y38_pQYfg6Qpu;V75AOe~h+0As;>PKf8*Ilbps`0v=FfYq z-Y*O#KVC7{n>-NjxXK=~pOq4C9dM-DHnXvF<~Xk4mZc7q5q2h$US(hN>`Fc+ zc*%)1mkgG59etg9F7q~{HcoQ;m~dRW#>6kVyujS(kEamTE*}Yf{fG*Xx7j`^*AQ*V zYlE7VuohJ@K@OSU;%w%v!8jcp18GN{W&y0;9$Q?>QD$|e-bcyTa7EWvXKrzAa6he- zbeRhXa-P(}UJyd`mz&vmmYuQmA;ylS!pap4;|=rP0`<%BN6pm!N$YQ$f_atC2xLuC(?D!#F4VzH>rnMlr|#?Bd6qudt)kK90fv(4m@<-`yZiakjBNx(S*2wLRaRgbam`=;W0Bpf zAxAjT>fCZ=vdmBH#p@=P9=B8Ud1t+T3l?(6!L>YGiZXgfHjj2%r+Ne*6Njb?Mr~>* z&h-A+ot#~y1D-=5xSkkC1K9V(howf|8kpZS`K9Y!m|P5%Bo zb*>fLSB*hcgzL_30LaY1_ic@91yqtF?Emv6HUI_5z+ZIBlJ3-v#;pK!>ogU3EMH08 z?2$#vXFRIL6h#$vmv*I}VL-LeW`|EfT{M#TY%wgBS7(y~Np`7XDgIr1B>DKy4bD(T zAlkxNcNXUOR0UXb%&R0rlK!59?H0!r|v(h-0OM1e98h6VJ{N) zV|$!X$}pUmy%4h`Y%ypolWS|dJzwiDIqjnyBPC<(3u&iR5fXNem~&$O-*!MokKmt`%yQ_fxg{w|sjY z!vUR^jb)?Z0}YyI!|f0JRNokjSip%ud^n-1wGnvMRfU@tUy|dT4yxU&+^ z6tn~aA~5fDEg;CD3M>=I<0{JG&m^>f(ZqZWKQzvnxn5`MnNJhbK^XH-$RJa%X?|>a zn6o8|aPq2s=f;P`?8u#V3{ctO$uQj*1IIiO^pyw_mzRy_l z1{`L|3R}G{kXG8BVdY{0=?l-bt)`9&I98cHF5Fw2=_}{yzWN5PLS1WZtZY~pDwX20 z=DAaX85wGOv%fq#Lo*xRIy-bJM~}T^;~9>JRjZi zwlBH{Kc40(Op)oBjz*pz?`&^L5`7?d{dioNx!Ta=+_2M>s`-qIDt3g2FfU!#4DQpH z;dTQeVYS&|v-7aXhY9)jg-~?a$WneL)pzob`!C3`#2%T;gAg+08}m77$r$GARj;o% zFV_3zzn8yBPU}qRJVAXS)I~^Lr2!%jdskUCsY&<;_HJ%Tc=-6sZe6O&-4A;h;6K6w zwpHX%ne$J6s}gpv3Ek~)XRCtYPb+(Vfhh=DpT?EY1au#YUv^KfI9IP@2%y$924l;% z!yYyj2|^vxDq~qo8R}NM7Q>InNz*1h?^o0-I=g?kB)*;MFnGI#{{+kQko0LL$@#d& z **.vscode/settings.json** -> -> ```json -> "vue.server.includeLanguages": ["vue", "markdown"] -> ``` + + + + + + + + + + + + + + Check out the design system on our Penpot. + + + + + + --- - - - - - Check out the design system on our Penpot. - - + ::: warning Deprecation of Activity, AlbumCard diff --git a/front/ui-docs/using-color.md b/front/ui-docs/using-color.md new file mode 100644 index 000000000..82416999a --- /dev/null +++ b/front/ui-docs/using-color.md @@ -0,0 +1 @@ +# Using Color diff --git a/front/ui-docs/using-components.md b/front/ui-docs/using-components.md new file mode 100644 index 000000000..9dceede6c --- /dev/null +++ b/front/ui-docs/using-components.md @@ -0,0 +1,77 @@ +# Using Components + +We distinguish between components that are coupled with funkwhale-specific datatypes and "pure" user interface components: + +- Funkwhale-specific components such as `Activity` or `AlbumCard` import from `types.ts`. +- Pure Ui components (found in `src/components/ui`) are independent from Funkwhale. Think of `Button`, `Tabs` or `Layout` + +--- + +[[toc]] + +## Anatomy of a component file + +### Imports + +First, import vue features and external libraries. Add the sub-components you want to use last. Order each block of imports by alphabet to prevent commit diff noise. + +### Script + +Add a blank line between Imports and script. Use modern typescript-friendly features such as `defineModel` and `defineProps` [as documented in the Vue Docs](https://vuejs.org/api/sfc-script-setup.html#definemodel) instead of Macros. + +### Template + +If you are new to Vue, read the docs, especially [the chapter about Single-File Components](https://vuejs.org/guide/scaling-up/sfc), to get familiar. + +### Style + +Don't pollute the global namespace. Funkwhale compiles a single stylesheet (used in the app, the blog and the website). If you need specific styles in your component, use vue's [SFC features](https://vuejs.org/api/sfc-css-features.html#sfc-css-features) such as `module`. Vue will give you a `$style` object containing all locally defined classes. + +```vue + + + + + +``` + +::: details Tip: Debugging styles + +We have enabled [the vite feature `css.devSourcemap: true`](https://v2.vitejs.dev/config/#css-devsourcemap) so that in your browser devtools, you can trace the code responsible for module styles: + +For each class, the browser devTools will link the corresponding `<style module>` code + +::: + +::: info What about the global style? + +As of now, class and variable names from the global styles are not available as typescript objects. We should definitely add this feature at some point. + +::: + +## Using Ui components in your views + +```vue + + + + + +``` diff --git a/front/ui-docs/vite.config.ts b/front/ui-docs/vite.config.ts index 3e66956f8..63673f9b2 100644 --- a/front/ui-docs/vite.config.ts +++ b/front/ui-docs/vite.config.ts @@ -15,6 +15,7 @@ export default defineConfig({ }, css: { + devSourcemap: true, preprocessorOptions: { scss: { additionalData: `