From cbaf4837883a9cd9ca063fd2b8354e560dfc2a40 Mon Sep 17 00:00:00 2001 From: Tonya Date: Sun, 20 Apr 2025 08:58:03 +0100 Subject: [PATCH] migrate pages to shadcn (#628) * feat: migrate tools page and label generator to shadcn * chore: lint issues * feat: also do profile page * feat: shadcn 404 page * feat: login page shadcn * fix: daisyui ironically breaks the z height for the login page * feat: componentise the language selector and add it to the login page * feat: use nuxtlink * feat: card and table made more shadcn * feat: shadcn statscard * chore: lint * feat: shadcn labelchip and locationcard * feat: shadcn locations page * refactor: remove unused new item page * chore: lint * feat: shadcn item card * fix: wrapping of location and lint * feat: ctrl enter in text area in form submits form * feat: begin shadcn locations page and remove pageqrcode comp in favour of integrating it into labelmaker * chore: lint + remove unused code * fix: remove uneeded margin * feat: shadcn labels page and fix some issues with location * feat: shadcn scanner * chore: lint * feat: begin shadcning item pages * feat: shadcn maintenance page * feat: begin shadcn search page * fix: quick switch blurry text and crashing page when switching + incorrect z height for create menu * feat: finish shadcn search page * chore: lint * feat: shadcn edit item page * fix: quickmenumodal bug * feat: shadcn item details page * feat: remove all non-color related daisyui classes * fix: type error * fix: quick menu modal again :( --- frontend/.eslintrc.js | 2 +- frontend/assets/css/main.css | 8 - frontend/components/App/Header.vue | 123 -------- frontend/components/App/ImportDialog.vue | 56 ++-- frontend/components/App/LanguageSelector.vue | 51 ++++ frontend/components/App/OutdatedModal.vue | 11 +- frontend/components/App/QuickMenuModal.vue | 10 +- frontend/components/Base/Button.vue | 77 ----- frontend/components/Base/Card.vue | 21 +- frontend/components/Base/Modal.vue | 110 ------- frontend/components/Base/SectionHeader.vue | 12 +- frontend/components/DetailAction.vue | 30 +- frontend/components/Form/Autocomplete.vue | 175 ----------- frontend/components/Form/Autocomplete2.vue | 188 ------------ frontend/components/Form/Checkbox.vue | 27 +- frontend/components/Form/DatePicker.vue | 32 +-- frontend/components/Form/Multiselect.vue | 120 -------- frontend/components/Form/Password.vue | 23 +- frontend/components/Form/Select.vue | 103 ------- frontend/components/Form/TextArea.vue | 69 +++-- frontend/components/Form/Toggle.vue | 35 --- frontend/components/Item/AttachmentsList.vue | 32 ++- frontend/components/Item/Card.vue | 93 +++--- frontend/components/Item/Selector.vue | 139 +++++++++ frontend/components/Item/View/Selectable.vue | 37 ++- frontend/components/Item/View/Table.types.ts | 2 +- frontend/components/Item/View/Table.vue | 220 +++++++------- frontend/components/Label/Chip.vue | 31 +- frontend/components/Location/Card.vue | 64 ++--- .../components/Location/LegacySelector.vue | 63 ---- frontend/components/Location/Tree/Node.vue | 22 +- frontend/components/Location/Tree/Root.vue | 5 +- frontend/components/Maintenance/EditModal.vue | 57 ++-- frontend/components/Maintenance/ListView.vue | 116 ++++---- frontend/components/Search/Filter.vue | 112 ++++---- frontend/components/global/CopyText.vue | 73 +++-- .../global/DetailsSection/DetailsSection.vue | 29 +- frontend/components/global/LabelMaker.vue | 114 +++++--- frontend/components/global/PageQRCode.vue | 50 ++-- frontend/components/global/PasswordScore.vue | 13 +- .../components/global/StatCard/StatCard.vue | 21 +- .../components/ui/breadcrumb/Breadcrumb.vue | 13 + .../ui/breadcrumb/BreadcrumbEllipsis.vue | 22 ++ .../ui/breadcrumb/BreadcrumbItem.vue | 16 ++ .../ui/breadcrumb/BreadcrumbLink.vue | 19 ++ .../ui/breadcrumb/BreadcrumbList.vue | 16 ++ .../ui/breadcrumb/BreadcrumbPage.vue | 19 ++ .../ui/breadcrumb/BreadcrumbSeparator.vue | 21 ++ frontend/components/ui/breadcrumb/index.ts | 7 + frontend/components/ui/button/Button.vue | 7 +- frontend/components/ui/button/ButtonGroup.vue | 9 +- frontend/components/ui/card/Card.vue | 21 ++ frontend/components/ui/card/CardContent.vue | 14 + .../components/ui/card/CardDescription.vue | 14 + frontend/components/ui/card/CardFooter.vue | 14 + frontend/components/ui/card/CardHeader.vue | 14 + frontend/components/ui/card/CardTitle.vue | 18 ++ frontend/components/ui/card/index.ts | 6 + frontend/components/ui/checkbox/Checkbox.vue | 33 +++ frontend/components/ui/checkbox/index.ts | 1 + .../components/ui/command/CommandDialog.vue | 3 +- .../components/ui/command/CommandInput.vue | 2 +- .../components/ui/dialog/DialogContent.vue | 78 +++-- .../ui/pagination/PaginationEllipsis.vue | 22 ++ .../ui/pagination/PaginationFirst.vue | 29 ++ .../ui/pagination/PaginationLast.vue | 29 ++ .../ui/pagination/PaginationNext.vue | 29 ++ .../ui/pagination/PaginationPrev.vue | 29 ++ frontend/components/ui/pagination/index.ts | 10 + frontend/components/ui/progress/Progress.vue | 36 +++ frontend/components/ui/progress/index.ts | 1 + frontend/components/ui/select/Select.vue | 15 + .../components/ui/select/SelectContent.vue | 53 ++++ frontend/components/ui/select/SelectGroup.vue | 19 ++ frontend/components/ui/select/SelectItem.vue | 44 +++ .../components/ui/select/SelectItemText.vue | 11 + frontend/components/ui/select/SelectLabel.vue | 13 + .../ui/select/SelectScrollDownButton.vue | 24 ++ .../ui/select/SelectScrollUpButton.vue | 24 ++ .../components/ui/select/SelectSeparator.vue | 17 ++ .../components/ui/select/SelectTrigger.vue | 31 ++ frontend/components/ui/select/SelectValue.vue | 11 + frontend/components/ui/select/index.ts | 11 + frontend/components/ui/switch/Switch.vue | 39 +++ frontend/components/ui/switch/index.ts | 1 + frontend/components/ui/table/Table.vue | 16 ++ frontend/components/ui/table/TableBody.vue | 14 + frontend/components/ui/table/TableCaption.vue | 14 + frontend/components/ui/table/TableCell.vue | 21 ++ frontend/components/ui/table/TableEmpty.vue | 37 +++ frontend/components/ui/table/TableFooter.vue | 14 + frontend/components/ui/table/TableHead.vue | 14 + frontend/components/ui/table/TableHeader.vue | 14 + frontend/components/ui/table/TableRow.vue | 14 + frontend/components/ui/table/index.ts | 9 + frontend/composables/use-preferences.ts | 4 +- frontend/composables/utils.test.ts | 2 +- frontend/composables/utils.ts | 2 +- frontend/layouts/default.vue | 6 +- frontend/locales/en.json | 17 +- frontend/pages/[...all].vue | 8 +- frontend/pages/home/index.vue | 2 +- frontend/pages/index.vue | 158 +++++----- frontend/pages/item/[id]/index.vue | 238 ++++++++++----- frontend/pages/item/[id]/index/edit.vue | 252 +++++++--------- frontend/pages/item/new.vue | 97 ------- frontend/pages/items.vue | 272 +++++++++--------- frontend/pages/label/[id].vue | 121 ++++---- frontend/pages/location/[id].vue | 135 +++++---- frontend/pages/locations.vue | 51 +++- frontend/pages/profile.vue | 206 ++++++------- frontend/pages/reports/label-generator.vue | 38 +-- frontend/pages/scanner.vue | 66 +++-- frontend/pages/tools.vue | 14 +- 114 files changed, 2818 insertions(+), 2479 deletions(-) delete mode 100644 frontend/components/App/Header.vue create mode 100644 frontend/components/App/LanguageSelector.vue delete mode 100644 frontend/components/Base/Button.vue delete mode 100644 frontend/components/Base/Modal.vue delete mode 100644 frontend/components/Form/Autocomplete.vue delete mode 100644 frontend/components/Form/Autocomplete2.vue delete mode 100644 frontend/components/Form/Multiselect.vue delete mode 100644 frontend/components/Form/Select.vue delete mode 100644 frontend/components/Form/Toggle.vue create mode 100644 frontend/components/Item/Selector.vue delete mode 100644 frontend/components/Location/LegacySelector.vue create mode 100644 frontend/components/ui/breadcrumb/Breadcrumb.vue create mode 100644 frontend/components/ui/breadcrumb/BreadcrumbEllipsis.vue create mode 100644 frontend/components/ui/breadcrumb/BreadcrumbItem.vue create mode 100644 frontend/components/ui/breadcrumb/BreadcrumbLink.vue create mode 100644 frontend/components/ui/breadcrumb/BreadcrumbList.vue create mode 100644 frontend/components/ui/breadcrumb/BreadcrumbPage.vue create mode 100644 frontend/components/ui/breadcrumb/BreadcrumbSeparator.vue create mode 100644 frontend/components/ui/breadcrumb/index.ts create mode 100644 frontend/components/ui/card/Card.vue create mode 100644 frontend/components/ui/card/CardContent.vue create mode 100644 frontend/components/ui/card/CardDescription.vue create mode 100644 frontend/components/ui/card/CardFooter.vue create mode 100644 frontend/components/ui/card/CardHeader.vue create mode 100644 frontend/components/ui/card/CardTitle.vue create mode 100644 frontend/components/ui/card/index.ts create mode 100644 frontend/components/ui/checkbox/Checkbox.vue create mode 100644 frontend/components/ui/checkbox/index.ts create mode 100644 frontend/components/ui/pagination/PaginationEllipsis.vue create mode 100644 frontend/components/ui/pagination/PaginationFirst.vue create mode 100644 frontend/components/ui/pagination/PaginationLast.vue create mode 100644 frontend/components/ui/pagination/PaginationNext.vue create mode 100644 frontend/components/ui/pagination/PaginationPrev.vue create mode 100644 frontend/components/ui/pagination/index.ts create mode 100644 frontend/components/ui/progress/Progress.vue create mode 100644 frontend/components/ui/progress/index.ts create mode 100644 frontend/components/ui/select/Select.vue create mode 100644 frontend/components/ui/select/SelectContent.vue create mode 100644 frontend/components/ui/select/SelectGroup.vue create mode 100644 frontend/components/ui/select/SelectItem.vue create mode 100644 frontend/components/ui/select/SelectItemText.vue create mode 100644 frontend/components/ui/select/SelectLabel.vue create mode 100644 frontend/components/ui/select/SelectScrollDownButton.vue create mode 100644 frontend/components/ui/select/SelectScrollUpButton.vue create mode 100644 frontend/components/ui/select/SelectSeparator.vue create mode 100644 frontend/components/ui/select/SelectTrigger.vue create mode 100644 frontend/components/ui/select/SelectValue.vue create mode 100644 frontend/components/ui/select/index.ts create mode 100644 frontend/components/ui/switch/Switch.vue create mode 100644 frontend/components/ui/switch/index.ts create mode 100644 frontend/components/ui/table/Table.vue create mode 100644 frontend/components/ui/table/TableBody.vue create mode 100644 frontend/components/ui/table/TableCaption.vue create mode 100644 frontend/components/ui/table/TableCell.vue create mode 100644 frontend/components/ui/table/TableEmpty.vue create mode 100644 frontend/components/ui/table/TableFooter.vue create mode 100644 frontend/components/ui/table/TableHead.vue create mode 100644 frontend/components/ui/table/TableHeader.vue create mode 100644 frontend/components/ui/table/TableRow.vue create mode 100644 frontend/components/ui/table/index.ts delete mode 100644 frontend/pages/item/new.vue diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index a865e8ea..e2bc53c5 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -29,7 +29,7 @@ module.exports = { "vue/no-v-html": 0, "@typescript-eslint/consistent-type-imports": "error", "@typescript-eslint/ban-ts-comment": 0, - "tailwindcss/no-custom-classname": 0, + "tailwindcss/no-custom-classname": "warn", "@typescript-eslint/no-unused-vars": [ "error", { diff --git a/frontend/assets/css/main.css b/frontend/assets/css/main.css index 4231c882..f9953584 100644 --- a/frontend/assets/css/main.css +++ b/frontend/assets/css/main.css @@ -777,14 +777,6 @@ text-transform: none !important; } -.btn { - text-transform: none !important; -} - -.tooltip { - overflow-wrap: break-word; -} - /* transparent subtle scrollbar */ ::-webkit-scrollbar { width: 0.2em; diff --git a/frontend/components/App/Header.vue b/frontend/components/App/Header.vue deleted file mode 100644 index c3703730..00000000 --- a/frontend/components/App/Header.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - diff --git a/frontend/components/App/ImportDialog.vue b/frontend/components/App/ImportDialog.vue index e553f77d..8f946346 100644 --- a/frontend/components/App/ImportDialog.vue +++ b/frontend/components/App/ImportDialog.vue @@ -1,11 +1,12 @@ + + diff --git a/frontend/components/App/OutdatedModal.vue b/frontend/components/App/OutdatedModal.vue index 58eb9457..a2d51c13 100644 --- a/frontend/components/App/OutdatedModal.vue +++ b/frontend/components/App/OutdatedModal.vue @@ -7,7 +7,12 @@

{{ $t("components.app.outdated.current_version") }}: {{ current }}

{{ $t("components.app.outdated.latest_version") }}: {{ latest }}

- + {{ $t("components.app.outdated.new_version_available_link") }}

@@ -30,8 +35,8 @@ AlertDialogDescription, AlertDialogFooter, AlertDialogAction, - } from "~/components/ui/alert-dialog"; - import { useDialog } from "~/components/ui/dialog-provider"; + } from "@/components/ui/alert-dialog"; + import { useDialog } from "@/components/ui/dialog-provider"; const props = defineProps<{ status: { diff --git a/frontend/components/App/QuickMenuModal.vue b/frontend/components/App/QuickMenuModal.vue index 8ecddfa3..428056c6 100644 --- a/frontend/components/App/QuickMenuModal.vue +++ b/frontend/components/App/QuickMenuModal.vue @@ -38,12 +38,19 @@ (e: KeyboardEvent) => { const item = props.actions.filter(item => 'shortcut' in item).find(item => item.shortcut === e.key); if (item) { + e.preventDefault(); openDialog(item.dialogId); } + // if esc is pressed, close the dialog + if (e.key === 'Escape') { + e.preventDefault(); + closeDialog('quick-menu'); + } } " /> + {{ t("components.quick_menu.no_results") }} - - - - - - - - diff --git a/frontend/components/Base/Card.vue b/frontend/components/Base/Card.vue index ddc2ed81..5b8aded2 100644 --- a/frontend/components/Base/Card.vue +++ b/frontend/components/Base/Card.vue @@ -1,13 +1,12 @@ - -
+ -
- + + - - diff --git a/frontend/components/Base/SectionHeader.vue b/frontend/components/Base/SectionHeader.vue index 9f1a86f2..f9d88315 100644 --- a/frontend/components/Base/SectionHeader.vue +++ b/frontend/components/Base/SectionHeader.vue @@ -1,16 +1,16 @@ diff --git a/frontend/components/Form/Autocomplete.vue b/frontend/components/Form/Autocomplete.vue deleted file mode 100644 index 527f7ac6..00000000 --- a/frontend/components/Form/Autocomplete.vue +++ /dev/null @@ -1,175 +0,0 @@ - - - diff --git a/frontend/components/Form/Autocomplete2.vue b/frontend/components/Form/Autocomplete2.vue deleted file mode 100644 index 552c5da5..00000000 --- a/frontend/components/Form/Autocomplete2.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - diff --git a/frontend/components/Form/Checkbox.vue b/frontend/components/Form/Checkbox.vue index ebf43224..11236348 100644 --- a/frontend/components/Form/Checkbox.vue +++ b/frontend/components/Form/Checkbox.vue @@ -1,21 +1,22 @@ diff --git a/frontend/components/Form/DatePicker.vue b/frontend/components/Form/DatePicker.vue index 7422b603..8ef24a04 100644 --- a/frontend/components/Form/DatePicker.vue +++ b/frontend/components/Form/DatePicker.vue @@ -1,29 +1,11 @@ @@ -32,6 +14,8 @@ import VueDatePicker from "@vuepic/vue-datepicker"; import "@vuepic/vue-datepicker/dist/main.css"; import * as datelib from "~/lib/datelib/datelib"; + import { Label } from "@/components/ui/label"; + const emit = defineEmits(["update:modelValue", "update:text"]); const props = defineProps({ diff --git a/frontend/components/Form/Multiselect.vue b/frontend/components/Form/Multiselect.vue deleted file mode 100644 index a822b43a..00000000 --- a/frontend/components/Form/Multiselect.vue +++ /dev/null @@ -1,120 +0,0 @@ - - - diff --git a/frontend/components/Form/Password.vue b/frontend/components/Form/Password.vue index 6a1791a7..76102189 100644 --- a/frontend/components/Form/Password.vue +++ b/frontend/components/Form/Password.vue @@ -1,19 +1,26 @@ diff --git a/frontend/components/Form/TextArea.vue b/frontend/components/Form/TextArea.vue index 18e7f49c..9c878a59 100644 --- a/frontend/components/Form/TextArea.vue +++ b/frontend/components/Form/TextArea.vue @@ -3,37 +3,39 @@ -