From f5ac23b79b6a5fca6cc0c34bf6ec2d422c6ccbb9 Mon Sep 17 00:00:00 2001 From: selemondev Date: Tue, 19 Sep 2023 18:51:11 +0300 Subject: [PATCH] docs: improve the installation section for each component --- .../theme/components/TabPreview.vue | 39 ++ apps/www/.vitepress/theme/components/index.ts | 1 + apps/www/__registry__/index.ts | 56 +-- .../src/content/docs/components/accordion.md | 165 +++++++- .../content/docs/components/alert-dialog.md | 133 +++++- apps/www/src/content/docs/components/alert.md | 19 +- .../content/docs/components/aspect-ratio.md | 57 ++- .../www/src/content/docs/components/avatar.md | 82 +++- apps/www/src/content/docs/components/badge.md | 38 +- .../www/src/content/docs/components/button.md | 41 +- .../src/content/docs/components/calendar.md | 137 +++++- apps/www/src/content/docs/components/card.md | 18 +- .../src/content/docs/components/checkbox.md | 76 +++- .../content/docs/components/collapsible.md | 83 +++- .../src/content/docs/components/combobox.md | 123 +++++- .../src/content/docs/components/command.md | 17 +- .../content/docs/components/context-menu.md | 353 +++++++++++++++- .../www/src/content/docs/components/dialog.md | 139 +++++- .../content/docs/components/dropdown-menu.md | 400 +++++++++++++++++- .../src/content/docs/components/hover-card.md | 139 +++++- apps/www/src/content/docs/components/input.md | 44 +- apps/www/src/content/docs/components/label.md | 41 +- .../src/content/docs/components/menubar.md | 376 +++++++++++++++- .../docs/components/navigation-menu.md | 356 +++++++++++++++- .../src/content/docs/components/popover.md | 141 +++++- .../src/content/docs/components/progress.md | 66 ++- .../content/docs/components/radio-group.md | 98 ++++- .../content/docs/components/scroll-area.md | 103 ++++- .../www/src/content/docs/components/select.md | 169 +++++++- .../src/content/docs/components/separator.md | 77 +++- apps/www/src/content/docs/components/sheet.md | 16 +- .../src/content/docs/components/skeleton.md | 32 +- .../www/src/content/docs/components/slider.md | 63 ++- .../www/src/content/docs/components/switch.md | 59 ++- apps/www/src/content/docs/components/table.md | 16 +- apps/www/src/content/docs/components/tabs.md | 142 ++++++- .../src/content/docs/components/textarea.md | 28 +- .../www/src/content/docs/components/toggle.md | 63 ++- .../src/content/docs/components/tooltip.md | 99 ++++- apps/www/src/content/docs/typography.md | 84 +--- .../registry/default/example/CardWithForm.vue | 10 +- .../default/example/CheckboxDisabled.vue | 20 + .../new-york/example/AccordionDemo.vue | 2 +- 43 files changed, 3914 insertions(+), 307 deletions(-) create mode 100644 apps/www/.vitepress/theme/components/TabPreview.vue create mode 100644 apps/www/src/lib/registry/default/example/CheckboxDisabled.vue diff --git a/apps/www/.vitepress/theme/components/TabPreview.vue b/apps/www/.vitepress/theme/components/TabPreview.vue new file mode 100644 index 00000000..025e1c34 --- /dev/null +++ b/apps/www/.vitepress/theme/components/TabPreview.vue @@ -0,0 +1,39 @@ + + + diff --git a/apps/www/.vitepress/theme/components/index.ts b/apps/www/.vitepress/theme/components/index.ts index 49421ad1..bf7a4b3a 100644 --- a/apps/www/.vitepress/theme/components/index.ts +++ b/apps/www/.vitepress/theme/components/index.ts @@ -1,4 +1,5 @@ export { default as ComponentPreview } from './ComponentPreview.vue' +export { default as TabPreview } from './TabPreview.vue' export { default as Callout } from './Callout.vue' export { default as LinkedCard } from './LinkedCard.vue' export { default as ManualInstall } from './ManualInstall.vue' diff --git a/apps/www/__registry__/index.ts b/apps/www/__registry__/index.ts index e0a88842..a4666075 100644 --- a/apps/www/__registry__/index.ts +++ b/apps/www/__registry__/index.ts @@ -694,99 +694,99 @@ export const Index = { name: 'TypographyBlockquote', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyBlockquote.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyBlockquote.vue'], + component: () => import('../src/lib/registry/default/example/TypographyBlockquote.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyBlockquote.vue'], }, TypographyDemo: { name: 'TypographyDemo', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyDemo.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyDemo.vue'], + component: () => import('../src/lib/registry/default/example/TypographyDemo.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyDemo.vue'], }, TypographyH1: { name: 'TypographyH1', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyH1.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyH1.vue'], + component: () => import('../src/lib/registry/default/example/TypographyH1.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyH1.vue'], }, TypographyH2: { name: 'TypographyH2', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyH2.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyH2.vue'], + component: () => import('../src/lib/registry/default/example/TypographyH2.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyH2.vue'], }, TypographyH3: { name: 'TypographyH3', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyH3.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyH3.vue'], + component: () => import('../src/lib/registry/default/example/TypographyH3.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyH3.vue'], }, TypographyH4: { name: 'TypographyH4', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyH4.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyH4.vue'], + component: () => import('../src/lib/registry/default/example/TypographyH4.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyH4.vue'], }, TypographyInlineCode: { name: 'TypographyInlineCode', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyInlineCode.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyInlineCode.vue'], + component: () => import('../src/lib/registry/default/example/TypographyInlineCode.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyInlineCode.vue'], }, TypographyLarge: { name: 'TypographyLarge', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyLarge.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyLarge.vue'], + component: () => import('../src/lib/registry/default/example/TypographyLarge.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyLarge.vue'], }, TypographyLead: { name: 'TypographyLead', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyLead.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyLead.vue'], + component: () => import('../src/lib/registry/default/example/TypographyLead.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyLead.vue'], }, TypographyList: { name: 'TypographyList', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyList.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyList.vue'], + component: () => import('../src/lib/registry/default/example/TypographyList.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyList.vue'], }, TypographyMuted: { name: 'TypographyMuted', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyMuted.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyMuted.vue'], + component: () => import('../src/lib/registry/default/example/TypographyMuted.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyMuted.vue'], }, TypographyP: { name: 'TypographyP', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyP.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyP.vue'], + component: () => import('../src/lib/registry/default/example/TypographyP.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyP.vue'], }, TypographySmall: { name: 'TypographySmall', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographySmall.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographySmall.vue'], + component: () => import('../src/lib/registry/default/example/TypographySmall.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographySmall.vue'], }, TypographyTable: { name: 'TypographyTable', type: 'components:example', registryDependencies: [], - component: () => import('../src/lib/registry/new-york/example/TypographyTable.vue').then(m => m.default), - files: ['../src/lib/registry/new-york/example/TypographyTable.vue'], + component: () => import('../src/lib/registry/default/example/TypographyTable.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/TypographyTable.vue'], }, }, } diff --git a/apps/www/src/content/docs/components/accordion.md b/apps/www/src/content/docs/components/accordion.md index dc0d658f..4f4c29cd 100644 --- a/apps/www/src/content/docs/components/accordion.md +++ b/apps/www/src/content/docs/components/accordion.md @@ -8,24 +8,174 @@ primitive: https://www.radix-vue.com/components/accordion.html - - ## Installation + + + + + ## Usage @@ -57,4 +207,5 @@ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/ -``` \ No newline at end of file +``` + diff --git a/apps/www/src/content/docs/components/alert-dialog.md b/apps/www/src/content/docs/components/alert-dialog.md index e48bc4f7..4e042861 100644 --- a/apps/www/src/content/docs/components/alert-dialog.md +++ b/apps/www/src/content/docs/components/alert-dialog.md @@ -7,26 +7,137 @@ primitive: https://www.radix-vue.com/components/alert-dialog.html - - - ## Installation -```bash -npx shadcn-vue@latest add alert-dialog -``` - - + + + + + + ## Usage diff --git a/apps/www/src/content/docs/components/alert.md b/apps/www/src/content/docs/components/alert.md index 11433097..5243f72c 100644 --- a/apps/www/src/content/docs/components/alert.md +++ b/apps/www/src/content/docs/components/alert.md @@ -6,24 +6,21 @@ description: Displays a callout for user attention. - - ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/aspect-ratio.md b/apps/www/src/content/docs/components/aspect-ratio.md index 95443312..6ba948bc 100644 --- a/apps/www/src/content/docs/components/aspect-ratio.md +++ b/apps/www/src/content/docs/components/aspect-ratio.md @@ -10,20 +10,69 @@ primitive: https://www.radix-vue.com/components/aspect-ratio.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/avatar.md b/apps/www/src/content/docs/components/avatar.md index 424a89c0..0a2cd8b7 100644 --- a/apps/www/src/content/docs/components/avatar.md +++ b/apps/www/src/content/docs/components/avatar.md @@ -11,20 +11,94 @@ primitive: https://www.radix-vue.com/components/avatar.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/badge.md b/apps/www/src/content/docs/components/badge.md index adcf2cc6..ef552aae 100644 --- a/apps/www/src/content/docs/components/badge.md +++ b/apps/www/src/content/docs/components/badge.md @@ -6,23 +6,47 @@ description: Displays a badge or a component that looks like a badge. - ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/button.md b/apps/www/src/content/docs/components/button.md index 5d635117..389a771d 100644 --- a/apps/www/src/content/docs/components/button.md +++ b/apps/www/src/content/docs/components/button.md @@ -8,20 +8,49 @@ description: Displays a button or a component that looks like a button. ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/calendar.md b/apps/www/src/content/docs/components/calendar.md index 1227be84..0691cd22 100644 --- a/apps/www/src/content/docs/components/calendar.md +++ b/apps/www/src/content/docs/components/calendar.md @@ -11,21 +11,146 @@ description: A date field component that allows users to enter and edit date. The `Calendar` component is built on top of [VCalendar](https://vcalendar.io/getting-started/installation.html). ## Installation - + + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/card.md b/apps/www/src/content/docs/components/card.md index 147b40a6..95bac00e 100644 --- a/apps/www/src/content/docs/components/card.md +++ b/apps/www/src/content/docs/components/card.md @@ -6,23 +6,21 @@ description: Displays a card with header, content, and footer. - ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/checkbox.md b/apps/www/src/content/docs/components/checkbox.md index b69a0b09..dbcd61fb 100644 --- a/apps/www/src/content/docs/components/checkbox.md +++ b/apps/www/src/content/docs/components/checkbox.md @@ -11,20 +11,80 @@ primitive: https://www.radix-vue.com/components/checkbox.html ## Installation + + - + + ## Usage @@ -36,4 +96,10 @@ import { Checkbox } from '@/components/ui/checkbox' -``` \ No newline at end of file +``` + +## Examples + +### With text + + \ No newline at end of file diff --git a/apps/www/src/content/docs/components/collapsible.md b/apps/www/src/content/docs/components/collapsible.md index f045c40b..316cf346 100644 --- a/apps/www/src/content/docs/components/collapsible.md +++ b/apps/www/src/content/docs/components/collapsible.md @@ -8,24 +8,95 @@ primitive: https://www.radix-vue.com/components/collapsible.html - - ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/combobox.md b/apps/www/src/content/docs/components/combobox.md index 69223751..bb0c6b39 100644 --- a/apps/www/src/content/docs/components/combobox.md +++ b/apps/www/src/content/docs/components/combobox.md @@ -12,6 +12,123 @@ The Combobox is built using a composition of the `` and the ` + + + + ## Usage ```vue @@ -20,19 +137,19 @@ import { Check, ChevronsUpDown } from 'lucide-vue-next' import { ref } from 'vue' import { cn } from '@/lib/utils' -import { Button } from '@/lib/registry/default/ui/button' +import { Button } from '@/components/ui/button' import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, -} from '@/lib/registry/default/ui/command' +} from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger, -} from '@/lib/registry/default/ui/popover' +} from '@/components/ui/popover' const frameworks = [ { value: 'next.js', label: 'Next.js' }, diff --git a/apps/www/src/content/docs/components/command.md b/apps/www/src/content/docs/components/command.md index 93b5a25e..80bf283d 100644 --- a/apps/www/src/content/docs/components/command.md +++ b/apps/www/src/content/docs/components/command.md @@ -12,20 +12,19 @@ primitive: https://www.radix-vue.com/components/popover.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/context-menu.md b/apps/www/src/content/docs/components/context-menu.md index 467418d0..5b0c9e9d 100644 --- a/apps/www/src/content/docs/components/context-menu.md +++ b/apps/www/src/content/docs/components/context-menu.md @@ -8,24 +8,365 @@ primitive: https://www.radix-vue.com/components/context-menu.html - - ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/dialog.md b/apps/www/src/content/docs/components/dialog.md index 10764c3e..ac013f94 100644 --- a/apps/www/src/content/docs/components/dialog.md +++ b/apps/www/src/content/docs/components/dialog.md @@ -8,23 +8,150 @@ primitive: https://www.radix-vue.com/components/dialog.html - -## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/dropdown-menu.md b/apps/www/src/content/docs/components/dropdown-menu.md index 935500f3..59880f0f 100644 --- a/apps/www/src/content/docs/components/dropdown-menu.md +++ b/apps/www/src/content/docs/components/dropdown-menu.md @@ -9,22 +9,412 @@ primitive: https://www.radix-vue.com/components/dropdown-menu.html -## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/hover-card.md b/apps/www/src/content/docs/components/hover-card.md index 5be38160..7daf9e8b 100644 --- a/apps/www/src/content/docs/components/hover-card.md +++ b/apps/www/src/content/docs/components/hover-card.md @@ -9,22 +9,151 @@ primitive: https://www.radix-vue.com/components/hover-card.html -## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/input.md b/apps/www/src/content/docs/components/input.md index e473e9a6..154a4b3a 100644 --- a/apps/www/src/content/docs/components/input.md +++ b/apps/www/src/content/docs/components/input.md @@ -7,23 +7,51 @@ description: Displays a form input field or a component that looks like an input - -## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/label.md b/apps/www/src/content/docs/components/label.md index 1a2fdec7..22a31baa 100644 --- a/apps/www/src/content/docs/components/label.md +++ b/apps/www/src/content/docs/components/label.md @@ -10,20 +10,53 @@ primitive: https://www.radix-vue.com/components/label.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/menubar.md b/apps/www/src/content/docs/components/menubar.md index 4fa7c17c..8387f5c5 100644 --- a/apps/www/src/content/docs/components/menubar.md +++ b/apps/www/src/content/docs/components/menubar.md @@ -11,20 +11,388 @@ primitive: https://www.radix-vue.com/components/menubar.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/navigation-menu.md b/apps/www/src/content/docs/components/navigation-menu.md index 4b564e55..3de85430 100644 --- a/apps/www/src/content/docs/components/navigation-menu.md +++ b/apps/www/src/content/docs/components/navigation-menu.md @@ -10,20 +10,368 @@ primitive: https://www.radix-vue.com/components/navigation-menu.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/popover.md b/apps/www/src/content/docs/components/popover.md index dfac75b2..58fe691f 100644 --- a/apps/www/src/content/docs/components/popover.md +++ b/apps/www/src/content/docs/components/popover.md @@ -12,20 +12,153 @@ primitive: https://www.radix-vue.com/components/popover.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/progress.md b/apps/www/src/content/docs/components/progress.md index e1853db2..83bb1f1a 100644 --- a/apps/www/src/content/docs/components/progress.md +++ b/apps/www/src/content/docs/components/progress.md @@ -11,20 +11,78 @@ primitive: https://www.radix-vue.com/components/progress.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/radio-group.md b/apps/www/src/content/docs/components/radio-group.md index 6d006cd2..3b16b2aa 100644 --- a/apps/www/src/content/docs/components/radio-group.md +++ b/apps/www/src/content/docs/components/radio-group.md @@ -8,23 +8,111 @@ primitive: https://www.radix-vue.com/components/radio-group.html - ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/scroll-area.md b/apps/www/src/content/docs/components/scroll-area.md index 152a877f..fce0fd09 100644 --- a/apps/www/src/content/docs/components/scroll-area.md +++ b/apps/www/src/content/docs/components/scroll-area.md @@ -11,20 +11,115 @@ primitive: https://www.radix-vue.com/components/scroll-area.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/select.md b/apps/www/src/content/docs/components/select.md index 3de388b6..bcf16961 100644 --- a/apps/www/src/content/docs/components/select.md +++ b/apps/www/src/content/docs/components/select.md @@ -12,20 +12,181 @@ primitive: https://www.radix-vue.com/components/popover.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/separator.md b/apps/www/src/content/docs/components/separator.md index bee269cf..b603a12e 100644 --- a/apps/www/src/content/docs/components/separator.md +++ b/apps/www/src/content/docs/components/separator.md @@ -8,23 +8,90 @@ primitive: https://www.radix-vue.com/components/separator.html - ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/sheet.md b/apps/www/src/content/docs/components/sheet.md index 3cb6415a..b0520a12 100644 --- a/apps/www/src/content/docs/components/sheet.md +++ b/apps/www/src/content/docs/components/sheet.md @@ -10,20 +10,20 @@ primitive: https://www.radix-vue.com/components/dialog.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/skeleton.md b/apps/www/src/content/docs/components/skeleton.md index 3d138c91..69351c82 100644 --- a/apps/www/src/content/docs/components/skeleton.md +++ b/apps/www/src/content/docs/components/skeleton.md @@ -8,20 +8,40 @@ description: Use to show a placeholder while content is loading. ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/slider.md b/apps/www/src/content/docs/components/slider.md index f9da8915..8ceb3a71 100644 --- a/apps/www/src/content/docs/components/slider.md +++ b/apps/www/src/content/docs/components/slider.md @@ -11,20 +11,75 @@ primitive: https://www.radix-vue.com/components/slider.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/switch.md b/apps/www/src/content/docs/components/switch.md index 3d97c017..102ae202 100644 --- a/apps/www/src/content/docs/components/switch.md +++ b/apps/www/src/content/docs/components/switch.md @@ -10,20 +10,71 @@ primitive: https://www.radix-vue.com/components/switch.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/table.md b/apps/www/src/content/docs/components/table.md index 1e7a76be..39e7fbb9 100644 --- a/apps/www/src/content/docs/components/table.md +++ b/apps/www/src/content/docs/components/table.md @@ -8,20 +8,20 @@ description: A responsive table component. ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/tabs.md b/apps/www/src/content/docs/components/tabs.md index 394211e9..92e68515 100644 --- a/apps/www/src/content/docs/components/tabs.md +++ b/apps/www/src/content/docs/components/tabs.md @@ -10,20 +10,154 @@ primitive: https://www.radix-vue.com/components/tabs.html ## Installation + + - + + ## Usage diff --git a/apps/www/src/content/docs/components/textarea.md b/apps/www/src/content/docs/components/textarea.md index 5334b124..625c0ae4 100644 --- a/apps/www/src/content/docs/components/textarea.md +++ b/apps/www/src/content/docs/components/textarea.md @@ -8,20 +8,40 @@ description: Displays a form textarea or a component that looks like a textarea. ## Installation + + - +