From 3db50d9637d74fa54095d921cd1f052df21fcaa8 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev Date: Wed, 7 Jan 2026 09:10:35 +0700 Subject: [PATCH] Initial commit from monorepo --- .gitignore | 24 + .nvmrc | 1 + .storybook/main.ts | 46 + .storybook/preview.ts | 23 + .../shims/graphql-typed-document-node-core.ts | 10 + Dockerfile | 44 + README.md | 75 + app/app.vue | 14 + app/assets/css/tailwind.css | 72 + app/components/BankSearchRussia.stories.ts | 21 + app/components/BankSearchRussia.vue | 130 + app/components/CabinetBreadcrumbs.vue | 63 + app/components/CalcResultContent.stories.ts | 21 + app/components/CalcResultContent.vue | 248 + app/components/CompanyCard.stories.ts | 21 + app/components/CompanyCard.vue | 138 + app/components/CompanySearchRussia.stories.ts | 21 + app/components/CompanySearchRussia.vue | 137 + app/components/EmptyState.vue | 32 + app/components/FooterPublic.stories.ts | 21 + app/components/FooterPublic.vue | 9 + app/components/GanttTimeline.stories.ts | 21 + app/components/GanttTimeline.vue | 272 + app/components/GoodsContent.stories.ts | 21 + app/components/GoodsContent.vue | 64 + app/components/KYCFormRussia.stories.ts | 21 + app/components/KYCFormRussia.vue | 242 + app/components/LangSwitcher.stories.ts | 21 + app/components/LangSwitcher.vue | 41 + app/components/LocationsContent.stories.ts | 21 + app/components/LocationsContent.vue | 120 + app/components/MapSidebar.vue | 117 + app/components/MapboxGlobe.client.stories.ts | 21 + app/components/MapboxGlobe.client.vue | 390 + app/components/NearbyConnectionsSection.vue | 442 + app/components/NearbyHubsSection.vue | 374 + .../NovuNotificationBell.client.stories.ts | 21 + .../NovuNotificationBell.client.vue | 202 + app/components/OrderCalendar.stories.ts | 21 + app/components/OrderCalendar.vue | 244 + app/components/OrderMap.stories.ts | 21 + app/components/OrderMap.vue | 147 + app/components/OrderTimeline.stories.ts | 21 + app/components/OrderTimeline.vue | 184 + app/components/OrdersRoutesMap.client.vue | 417 + app/components/OrdersRoutesPreview.client.vue | 234 + app/components/PaginationLoadMore.vue | 30 + app/components/RequestRoutesMap.vue | 401 + app/components/RouteMap.stories.ts | 21 + app/components/RouteMap.vue | 281 + app/components/RouteMapPanel.vue | 39 + app/components/RouteStagesList.vue | 59 + app/components/RouteSummaryHeader.vue | 16 + app/components/Sidebar.vue | 395 + app/components/TeamCard.stories.ts | 21 + app/components/TeamCard.vue | 65 + app/components/TeamCreateForm.stories.ts | 21 + app/components/TeamCreateForm.vue | 104 + app/components/TimelineStages.stories.ts | 21 + app/components/TimelineStages.vue | 129 + app/components/TopBar.vue | 182 + app/components/TripBadge.stories.ts | 21 + app/components/TripBadge.vue | 129 + app/components/UserAvatar.stories.ts | 21 + app/components/UserAvatar.vue | 123 + app/components/catalog/AddressCard.vue | 52 + app/components/catalog/CatalogFilters.vue | 29 + app/components/catalog/CatalogHubsSection.vue | 80 + app/components/catalog/CatalogMap.vue | 192 + app/components/catalog/CatalogMapPanel.vue | 155 + app/components/catalog/CatalogMapSidebar.vue | 59 + .../catalog/CatalogOffersSection.vue | 69 + .../catalog/CatalogSuppliersSection.vue | 63 + app/components/catalog/HubCard.vue | 70 + app/components/catalog/MapHero.vue | 114 + app/components/catalog/OfferCard.vue | 118 + app/components/catalog/ProductCard.vue | 52 + app/components/catalog/SupplierCard.vue | 95 + app/components/ui/Alert.stories.ts | 21 + app/components/ui/Alert.vue | 23 + app/components/ui/Badge.vue | 40 + app/components/ui/Button.stories.ts | 46 + app/components/ui/Button.vue | 45 + app/components/ui/Card.stories.ts | 21 + app/components/ui/Card.vue | 42 + app/components/ui/Container.stories.ts | 21 + app/components/ui/Container.vue | 29 + app/components/ui/EmptyState.vue | 50 + app/components/ui/FieldButton.stories.ts | 21 + app/components/ui/FieldButton.vue | 31 + app/components/ui/Grid.stories.ts | 21 + app/components/ui/Grid.vue | 52 + app/components/ui/GridItem.stories.ts | 21 + app/components/ui/GridItem.vue | 32 + app/components/ui/Heading.stories.ts | 21 + app/components/ui/Heading.vue | 45 + app/components/ui/IconCircle.stories.ts | 21 + app/components/ui/IconCircle.vue | 34 + app/components/ui/Input.stories.ts | 21 + app/components/ui/Input.vue | 36 + app/components/ui/PageHeader.vue | 36 + app/components/ui/PageHeaderAction.vue | 24 + app/components/ui/Pill.stories.ts | 21 + app/components/ui/Pill.vue | 42 + app/components/ui/Section.stories.ts | 21 + app/components/ui/Section.vue | 35 + app/components/ui/SegmentedControl.vue | 31 + app/components/ui/Select.stories.ts | 21 + app/components/ui/Select.vue | 5 + app/components/ui/Spinner.stories.ts | 21 + app/components/ui/Spinner.vue | 23 + app/components/ui/Stack.stories.ts | 21 + app/components/ui/Stack.vue | 74 + app/components/ui/Text.stories.ts | 21 + app/components/ui/Text.vue | 79 + app/components/ui/Textarea.stories.ts | 21 + app/components/ui/Textarea.vue | 44 + .../graphql/public/exchange-generated.ts | 242 + .../graphql/public/geo-generated.ts | 241 + .../graphql/team/billing-generated.ts | 75 + .../graphql/team/exchange-generated.ts | 220 + .../graphql/team/orders-generated.ts | 124 + .../graphql/team/teams-generated.ts | 228 + app/composables/graphql/user/kyc-generated.ts | 108 + .../graphql/user/teams-generated.ts | 189 + app/composables/useActiveTeam.ts | 11 + app/composables/useAuth.ts | 81 + app/composables/useCatalogHubs.ts | 100 + app/composables/useCatalogOffers.ts | 92 + app/composables/useCatalogSuppliers.ts | 84 + app/composables/useGraphQL.ts | 119 + app/composables/useLogtoTokens.ts | 205 + app/composables/useMapboxFlyAnimation.ts | 81 + app/composables/useMockLogto.ts | 16 + app/composables/useNovu.ts | 138 + app/composables/useOrdersRestAPI.js | 57 + app/composables/useServerQuery.ts | 20 + app/composables/useTeamAddresses.ts | 73 + app/composables/useTeamOrders.ts | 99 + app/composables/useTerminus.ts | 294 + app/layouts/default.vue | 194 + app/layouts/map.vue | 121 + app/middleware/active-team.global.ts | 13 + app/middleware/auth-oidc.ts | 17 + app/novu/workflows.ts | 11 + app/pages/callback.vue | 16 + app/pages/catalog/hubs/[id].vue | 310 + app/pages/catalog/hubs/index.vue | 80 + app/pages/catalog/hubs/map.vue | 70 + app/pages/catalog/offers/[uuid].vue | 219 + app/pages/catalog/offers/index.vue | 76 + app/pages/catalog/offers/map.vue | 72 + app/pages/catalog/products/[id].vue | 384 + app/pages/catalog/suppliers/[id].vue | 251 + app/pages/catalog/suppliers/index.vue | 76 + app/pages/catalog/suppliers/map.vue | 70 + app/pages/clientarea/addresses/index.vue | 88 + app/pages/clientarea/addresses/map.vue | 75 + app/pages/clientarea/addresses/new.vue | 247 + app/pages/clientarea/ai/[id].vue | 4 + app/pages/clientarea/ai/index.vue | 120 + app/pages/clientarea/billing/index.vue | 181 + app/pages/clientarea/company-switch.vue | 160 + app/pages/clientarea/goods.vue | 9 + app/pages/clientarea/index.vue | 15 + app/pages/clientarea/kyc/index.vue | 156 + app/pages/clientarea/kyc/russia.vue | 93 + app/pages/clientarea/locations.vue | 9 + app/pages/clientarea/offers/[uuid].vue | 281 + app/pages/clientarea/offers/index.vue | 207 + app/pages/clientarea/offers/new.vue | 91 + app/pages/clientarea/orders/[id].vue | 243 + app/pages/clientarea/orders/index.vue | 174 + app/pages/clientarea/orders/map.vue | 85 + app/pages/clientarea/profile/debug-tokens.vue | 275 + app/pages/clientarea/profile/index.vue | 157 + app/pages/clientarea/request/[id].vue | 6 + app/pages/clientarea/team/index.vue | 196 + app/pages/clientarea/team/invite.vue | 103 + app/pages/clientarea/team/new.vue | 13 + app/pages/goods.vue | 5 + app/pages/index.vue | 195 + app/pages/locations.vue | 5 + app/pages/request/[id].vue | 5 + app/pages/request/index.vue | 5 + app/pages/search/index.vue | 36 + app/pages/select-location/index.vue | 198 + app/pages/select-location/map.vue | 103 + app/pages/supplier/[id].vue | 290 + app/pages/test-gantt.vue | 81 + app/pages/test-map.vue | 1318 ++ app/plugins/chatwoot.client.ts | 32 + app/plugins/logto-tokens.server.ts | 8 + app/plugins/logto-user.server.ts | 15 + app/plugins/me.server.ts | 17 + app/plugins/sentry.client.ts | 22 + app/server/api/novu.ts | 5 + app/stores/location.ts | 119 + app/stores/search.js | 96 + codegen.ts | 75 + eslint.config.mjs | 44 + .../public/exchange/GetLocationOffers.graphql | 28 + .../public/exchange/GetOffer.graphql | 28 + .../public/exchange/GetOffers.graphql | 29 + .../public/exchange/GetProduct.graphql | 9 + .../public/exchange/GetProductOffers.graphql | 28 + .../public/exchange/GetProducts.graphql | 9 + .../public/exchange/GetSupplierOffers.graphql | 28 + .../exchange/GetSupplierProfile.graphql | 13 + .../exchange/GetSupplierProfiles.graphql | 17 + .../operations/public/geo/FindRoutes.graphql | 19 + .../public/geo/GetAutoRoute.graphql | 6 + graphql/operations/public/geo/GetNode.graphql | 20 + .../public/geo/GetNodeConnections.graphql | 40 + .../operations/public/geo/GetNodes.graphql | 13 + .../public/geo/GetRailRoute.graphql | 6 + .../team/billing/GetTeamBalance.graphql | 8 + .../team/billing/GetTeamTransactions.graphql | 11 + .../team/exchange/CreateOffer.graphql | 8 + .../team/exchange/CreateRequest.graphql | 11 + .../team/exchange/GetRequests.graphql | 9 + .../operations/team/orders/GetOrder.graphql | 63 + .../team/orders/GetTeamOrders.graphql | 39 + .../team/teams/CreateTeamAddress.graphql | 7 + .../team/teams/DeleteTeamAddress.graphql | 6 + graphql/operations/team/teams/GetTeam.graphql | 10 + .../team/teams/GetTeamAddresses.graphql | 11 + .../team/teams/GetTeamMembers.graphql | 13 + .../team/teams/InviteMember.graphql | 6 + .../team/teams/SetSelectedLocation.graphql | 13 + .../user/kyc/CreateKYCRequestRussia.graphql | 11 + .../user/kyc/GetKYCRequestRussia.graphql | 16 + .../user/kyc/GetKYCRequestsRussia.graphql | 16 + .../operations/user/teams/CreateTeam.graphql | 9 + graphql/operations/user/teams/GetMe.graphql | 27 + .../user/teams/GetMeProfile.graphql | 14 + graphql/operations/user/teams/GetTeam.graphql | 22 + .../operations/user/teams/SwitchTeam.graphql | 14 + .../operations/user/teams/UpdateUser.graphql | 16 + i18n/locales/en/about.json | 6 + i18n/locales/en/aiAssistants.json | 29 + i18n/locales/en/auth.json | 17 + i18n/locales/en/billing.json | 28 + i18n/locales/en/breadcrumbs.json | 19 + i18n/locales/en/cabinetNav.json | 11 + i18n/locales/en/catalogAddress.json | 7 + i18n/locales/en/catalogHub.json | 47 + i18n/locales/en/catalogHubsSection.json | 20 + i18n/locales/en/catalogLanding.json | 13 + i18n/locales/en/catalogMap.json | 29 + i18n/locales/en/catalogOffer.json | 41 + i18n/locales/en/catalogOfferCard.json | 9 + i18n/locales/en/catalogOffersSection.json | 17 + i18n/locales/en/catalogProduct.json | 59 + i18n/locales/en/catalogSupplier.json | 40 + i18n/locales/en/catalogSuppliersSection.json | 17 + i18n/locales/en/clientOfferForm.json | 40 + i18n/locales/en/clientOffersList.json | 39 + i18n/locales/en/clientProfile.json | 20 + i18n/locales/en/clientRedirect.json | 7 + i18n/locales/en/clientTeam.json | 82 + i18n/locales/en/clientTeamSwitch.json | 11 + i18n/locales/en/common.json | 23 + i18n/locales/en/cta.json | 8 + i18n/locales/en/dashboard.json | 34 + i18n/locales/en/footer.json | 11 + i18n/locales/en/ganttTimeline.json | 36 + i18n/locales/en/goods.json | 27 + i18n/locales/en/howto.json | 17 + i18n/locales/en/kyc.json | 8 + i18n/locales/en/kycOverview.json | 63 + i18n/locales/en/kycRussia.json | 23 + i18n/locales/en/locations.json | 14 + i18n/locales/en/nav.json | 8 + i18n/locales/en/offersNew.json | 22 + i18n/locales/en/orderCalendar.json | 31 + i18n/locales/en/orderMap.json | 12 + i18n/locales/en/orders.json | 7 + i18n/locales/en/ordersDetail.json | 51 + i18n/locales/en/ordersList.json | 29 + i18n/locales/en/profile.json | 30 + i18n/locales/en/profileAddresses.json | 46 + i18n/locales/en/roles.json | 34 + i18n/locales/en/routeMap.json | 15 + i18n/locales/en/search.json | 81 + i18n/locales/en/searchPage.json | 12 + i18n/locales/en/sidebar.json | 11 + i18n/locales/en/stats.json | 9 + i18n/locales/en/supplier.json | 14 + i18n/locales/en/supplierFlow.json | 30 + i18n/locales/en/teams.json | 40 + i18n/locales/en/testMap.json | 13 + i18n/locales/en/testimonials.json | 5 + i18n/locales/en/timelineStages.json | 7 + i18n/locales/ru/about.json | 6 + i18n/locales/ru/aiAssistants.json | 29 + i18n/locales/ru/auth.json | 17 + i18n/locales/ru/billing.json | 27 + i18n/locales/ru/breadcrumbs.json | 19 + i18n/locales/ru/cabinetNav.json | 11 + i18n/locales/ru/catalogAddress.json | 7 + i18n/locales/ru/catalogHub.json | 47 + i18n/locales/ru/catalogHubsSection.json | 20 + i18n/locales/ru/catalogLanding.json | 13 + i18n/locales/ru/catalogMap.json | 29 + i18n/locales/ru/catalogOffer.json | 41 + i18n/locales/ru/catalogOfferCard.json | 9 + i18n/locales/ru/catalogOffersSection.json | 17 + i18n/locales/ru/catalogProduct.json | 59 + i18n/locales/ru/catalogSupplier.json | 40 + i18n/locales/ru/catalogSuppliersSection.json | 17 + i18n/locales/ru/clientOfferForm.json | 40 + i18n/locales/ru/clientOffersList.json | 39 + i18n/locales/ru/clientProfile.json | 20 + i18n/locales/ru/clientRedirect.json | 7 + i18n/locales/ru/clientTeam.json | 82 + i18n/locales/ru/clientTeamSwitch.json | 11 + i18n/locales/ru/common.json | 23 + i18n/locales/ru/cta.json | 8 + i18n/locales/ru/dashboard.json | 34 + i18n/locales/ru/footer.json | 11 + i18n/locales/ru/ganttTimeline.json | 36 + i18n/locales/ru/goods.json | 27 + i18n/locales/ru/howto.json | 17 + i18n/locales/ru/kyc.json | 8 + i18n/locales/ru/kycOverview.json | 63 + i18n/locales/ru/kycRussia.json | 23 + i18n/locales/ru/locations.json | 14 + i18n/locales/ru/nav.json | 8 + i18n/locales/ru/offersNew.json | 22 + i18n/locales/ru/orderCalendar.json | 31 + i18n/locales/ru/orderMap.json | 12 + i18n/locales/ru/orders.json | 7 + i18n/locales/ru/ordersDetail.json | 51 + i18n/locales/ru/ordersList.json | 29 + i18n/locales/ru/profile.json | 30 + i18n/locales/ru/profileAddresses.json | 46 + i18n/locales/ru/roles.json | 34 + i18n/locales/ru/routeMap.json | 15 + i18n/locales/ru/search.json | 81 + i18n/locales/ru/searchPage.json | 12 + i18n/locales/ru/sidebar.json | 11 + i18n/locales/ru/stats.json | 9 + i18n/locales/ru/supplier.json | 14 + i18n/locales/ru/supplierFlow.json | 30 + i18n/locales/ru/teams.json | 40 + i18n/locales/ru/testMap.json | 13 + i18n/locales/ru/testimonials.json | 5 + i18n/locales/ru/timelineStages.json | 7 + modules/@nuxtjs/tailwindcss.ts | 8 + modules/@pinia/nuxt.ts | 8 + nixpacks.toml | 25 + nuxt.config.ts | 238 + package.json | 68 + pnpm-lock.yaml | 18707 ++++++++++++++++ public/favicon.ico | Bin 0 -> 4286 bytes public/robots.txt | 2 + scripts/generate-stories.mjs | 115 + scripts/load-secrets.mjs | 48 + sentry.client.config.ts | 12 + sentry.server.config.ts | 7 + server/api/auth/debug-session.get.ts | 40 + server/api/auth/id-token-claims.get.ts | 18 + server/api/auth/id-token.get.ts | 18 + server/api/auth/refresh.post.ts | 76 + server/api/companies.get.ts | 148 + server/api/locations.get.ts | 34 + server/api/suppliers.get.ts | 126 + server/middleware/00-logto.ts | 152 + server/middleware/me.ts | 74 + tsconfig.json | 18 + 371 files changed, 43223 insertions(+) create mode 100644 .gitignore create mode 100644 .nvmrc create mode 100644 .storybook/main.ts create mode 100644 .storybook/preview.ts create mode 100644 .storybook/shims/graphql-typed-document-node-core.ts create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 app/app.vue create mode 100644 app/assets/css/tailwind.css create mode 100644 app/components/BankSearchRussia.stories.ts create mode 100644 app/components/BankSearchRussia.vue create mode 100644 app/components/CabinetBreadcrumbs.vue create mode 100644 app/components/CalcResultContent.stories.ts create mode 100644 app/components/CalcResultContent.vue create mode 100644 app/components/CompanyCard.stories.ts create mode 100644 app/components/CompanyCard.vue create mode 100644 app/components/CompanySearchRussia.stories.ts create mode 100644 app/components/CompanySearchRussia.vue create mode 100644 app/components/EmptyState.vue create mode 100644 app/components/FooterPublic.stories.ts create mode 100644 app/components/FooterPublic.vue create mode 100644 app/components/GanttTimeline.stories.ts create mode 100644 app/components/GanttTimeline.vue create mode 100644 app/components/GoodsContent.stories.ts create mode 100644 app/components/GoodsContent.vue create mode 100644 app/components/KYCFormRussia.stories.ts create mode 100644 app/components/KYCFormRussia.vue create mode 100644 app/components/LangSwitcher.stories.ts create mode 100644 app/components/LangSwitcher.vue create mode 100644 app/components/LocationsContent.stories.ts create mode 100644 app/components/LocationsContent.vue create mode 100644 app/components/MapSidebar.vue create mode 100644 app/components/MapboxGlobe.client.stories.ts create mode 100644 app/components/MapboxGlobe.client.vue create mode 100644 app/components/NearbyConnectionsSection.vue create mode 100644 app/components/NearbyHubsSection.vue create mode 100644 app/components/NovuNotificationBell.client.stories.ts create mode 100644 app/components/NovuNotificationBell.client.vue create mode 100644 app/components/OrderCalendar.stories.ts create mode 100644 app/components/OrderCalendar.vue create mode 100644 app/components/OrderMap.stories.ts create mode 100644 app/components/OrderMap.vue create mode 100644 app/components/OrderTimeline.stories.ts create mode 100644 app/components/OrderTimeline.vue create mode 100644 app/components/OrdersRoutesMap.client.vue create mode 100644 app/components/OrdersRoutesPreview.client.vue create mode 100644 app/components/PaginationLoadMore.vue create mode 100644 app/components/RequestRoutesMap.vue create mode 100644 app/components/RouteMap.stories.ts create mode 100644 app/components/RouteMap.vue create mode 100644 app/components/RouteMapPanel.vue create mode 100644 app/components/RouteStagesList.vue create mode 100644 app/components/RouteSummaryHeader.vue create mode 100644 app/components/Sidebar.vue create mode 100644 app/components/TeamCard.stories.ts create mode 100644 app/components/TeamCard.vue create mode 100644 app/components/TeamCreateForm.stories.ts create mode 100644 app/components/TeamCreateForm.vue create mode 100644 app/components/TimelineStages.stories.ts create mode 100644 app/components/TimelineStages.vue create mode 100644 app/components/TopBar.vue create mode 100644 app/components/TripBadge.stories.ts create mode 100644 app/components/TripBadge.vue create mode 100644 app/components/UserAvatar.stories.ts create mode 100644 app/components/UserAvatar.vue create mode 100644 app/components/catalog/AddressCard.vue create mode 100644 app/components/catalog/CatalogFilters.vue create mode 100644 app/components/catalog/CatalogHubsSection.vue create mode 100644 app/components/catalog/CatalogMap.vue create mode 100644 app/components/catalog/CatalogMapPanel.vue create mode 100644 app/components/catalog/CatalogMapSidebar.vue create mode 100644 app/components/catalog/CatalogOffersSection.vue create mode 100644 app/components/catalog/CatalogSuppliersSection.vue create mode 100644 app/components/catalog/HubCard.vue create mode 100644 app/components/catalog/MapHero.vue create mode 100644 app/components/catalog/OfferCard.vue create mode 100644 app/components/catalog/ProductCard.vue create mode 100644 app/components/catalog/SupplierCard.vue create mode 100644 app/components/ui/Alert.stories.ts create mode 100644 app/components/ui/Alert.vue create mode 100644 app/components/ui/Badge.vue create mode 100644 app/components/ui/Button.stories.ts create mode 100644 app/components/ui/Button.vue create mode 100644 app/components/ui/Card.stories.ts create mode 100644 app/components/ui/Card.vue create mode 100644 app/components/ui/Container.stories.ts create mode 100644 app/components/ui/Container.vue create mode 100644 app/components/ui/EmptyState.vue create mode 100644 app/components/ui/FieldButton.stories.ts create mode 100644 app/components/ui/FieldButton.vue create mode 100644 app/components/ui/Grid.stories.ts create mode 100644 app/components/ui/Grid.vue create mode 100644 app/components/ui/GridItem.stories.ts create mode 100644 app/components/ui/GridItem.vue create mode 100644 app/components/ui/Heading.stories.ts create mode 100644 app/components/ui/Heading.vue create mode 100644 app/components/ui/IconCircle.stories.ts create mode 100644 app/components/ui/IconCircle.vue create mode 100644 app/components/ui/Input.stories.ts create mode 100644 app/components/ui/Input.vue create mode 100644 app/components/ui/PageHeader.vue create mode 100644 app/components/ui/PageHeaderAction.vue create mode 100644 app/components/ui/Pill.stories.ts create mode 100644 app/components/ui/Pill.vue create mode 100644 app/components/ui/Section.stories.ts create mode 100644 app/components/ui/Section.vue create mode 100644 app/components/ui/SegmentedControl.vue create mode 100644 app/components/ui/Select.stories.ts create mode 100644 app/components/ui/Select.vue create mode 100644 app/components/ui/Spinner.stories.ts create mode 100644 app/components/ui/Spinner.vue create mode 100644 app/components/ui/Stack.stories.ts create mode 100644 app/components/ui/Stack.vue create mode 100644 app/components/ui/Text.stories.ts create mode 100644 app/components/ui/Text.vue create mode 100644 app/components/ui/Textarea.stories.ts create mode 100644 app/components/ui/Textarea.vue create mode 100644 app/composables/graphql/public/exchange-generated.ts create mode 100644 app/composables/graphql/public/geo-generated.ts create mode 100644 app/composables/graphql/team/billing-generated.ts create mode 100644 app/composables/graphql/team/exchange-generated.ts create mode 100644 app/composables/graphql/team/orders-generated.ts create mode 100644 app/composables/graphql/team/teams-generated.ts create mode 100644 app/composables/graphql/user/kyc-generated.ts create mode 100644 app/composables/graphql/user/teams-generated.ts create mode 100644 app/composables/useActiveTeam.ts create mode 100644 app/composables/useAuth.ts create mode 100644 app/composables/useCatalogHubs.ts create mode 100644 app/composables/useCatalogOffers.ts create mode 100644 app/composables/useCatalogSuppliers.ts create mode 100644 app/composables/useGraphQL.ts create mode 100644 app/composables/useLogtoTokens.ts create mode 100644 app/composables/useMapboxFlyAnimation.ts create mode 100644 app/composables/useMockLogto.ts create mode 100644 app/composables/useNovu.ts create mode 100644 app/composables/useOrdersRestAPI.js create mode 100644 app/composables/useServerQuery.ts create mode 100644 app/composables/useTeamAddresses.ts create mode 100644 app/composables/useTeamOrders.ts create mode 100644 app/composables/useTerminus.ts create mode 100644 app/layouts/default.vue create mode 100644 app/layouts/map.vue create mode 100644 app/middleware/active-team.global.ts create mode 100644 app/middleware/auth-oidc.ts create mode 100644 app/novu/workflows.ts create mode 100644 app/pages/callback.vue create mode 100644 app/pages/catalog/hubs/[id].vue create mode 100644 app/pages/catalog/hubs/index.vue create mode 100644 app/pages/catalog/hubs/map.vue create mode 100644 app/pages/catalog/offers/[uuid].vue create mode 100644 app/pages/catalog/offers/index.vue create mode 100644 app/pages/catalog/offers/map.vue create mode 100644 app/pages/catalog/products/[id].vue create mode 100644 app/pages/catalog/suppliers/[id].vue create mode 100644 app/pages/catalog/suppliers/index.vue create mode 100644 app/pages/catalog/suppliers/map.vue create mode 100644 app/pages/clientarea/addresses/index.vue create mode 100644 app/pages/clientarea/addresses/map.vue create mode 100644 app/pages/clientarea/addresses/new.vue create mode 100644 app/pages/clientarea/ai/[id].vue create mode 100644 app/pages/clientarea/ai/index.vue create mode 100644 app/pages/clientarea/billing/index.vue create mode 100644 app/pages/clientarea/company-switch.vue create mode 100644 app/pages/clientarea/goods.vue create mode 100644 app/pages/clientarea/index.vue create mode 100644 app/pages/clientarea/kyc/index.vue create mode 100644 app/pages/clientarea/kyc/russia.vue create mode 100644 app/pages/clientarea/locations.vue create mode 100644 app/pages/clientarea/offers/[uuid].vue create mode 100644 app/pages/clientarea/offers/index.vue create mode 100644 app/pages/clientarea/offers/new.vue create mode 100644 app/pages/clientarea/orders/[id].vue create mode 100644 app/pages/clientarea/orders/index.vue create mode 100644 app/pages/clientarea/orders/map.vue create mode 100644 app/pages/clientarea/profile/debug-tokens.vue create mode 100644 app/pages/clientarea/profile/index.vue create mode 100644 app/pages/clientarea/request/[id].vue create mode 100644 app/pages/clientarea/team/index.vue create mode 100644 app/pages/clientarea/team/invite.vue create mode 100644 app/pages/clientarea/team/new.vue create mode 100644 app/pages/goods.vue create mode 100644 app/pages/index.vue create mode 100644 app/pages/locations.vue create mode 100644 app/pages/request/[id].vue create mode 100644 app/pages/request/index.vue create mode 100644 app/pages/search/index.vue create mode 100644 app/pages/select-location/index.vue create mode 100644 app/pages/select-location/map.vue create mode 100644 app/pages/supplier/[id].vue create mode 100644 app/pages/test-gantt.vue create mode 100644 app/pages/test-map.vue create mode 100644 app/plugins/chatwoot.client.ts create mode 100644 app/plugins/logto-tokens.server.ts create mode 100644 app/plugins/logto-user.server.ts create mode 100644 app/plugins/me.server.ts create mode 100644 app/plugins/sentry.client.ts create mode 100644 app/server/api/novu.ts create mode 100644 app/stores/location.ts create mode 100644 app/stores/search.js create mode 100644 codegen.ts create mode 100644 eslint.config.mjs create mode 100644 graphql/operations/public/exchange/GetLocationOffers.graphql create mode 100644 graphql/operations/public/exchange/GetOffer.graphql create mode 100644 graphql/operations/public/exchange/GetOffers.graphql create mode 100644 graphql/operations/public/exchange/GetProduct.graphql create mode 100644 graphql/operations/public/exchange/GetProductOffers.graphql create mode 100644 graphql/operations/public/exchange/GetProducts.graphql create mode 100644 graphql/operations/public/exchange/GetSupplierOffers.graphql create mode 100644 graphql/operations/public/exchange/GetSupplierProfile.graphql create mode 100644 graphql/operations/public/exchange/GetSupplierProfiles.graphql create mode 100644 graphql/operations/public/geo/FindRoutes.graphql create mode 100644 graphql/operations/public/geo/GetAutoRoute.graphql create mode 100644 graphql/operations/public/geo/GetNode.graphql create mode 100644 graphql/operations/public/geo/GetNodeConnections.graphql create mode 100644 graphql/operations/public/geo/GetNodes.graphql create mode 100644 graphql/operations/public/geo/GetRailRoute.graphql create mode 100644 graphql/operations/team/billing/GetTeamBalance.graphql create mode 100644 graphql/operations/team/billing/GetTeamTransactions.graphql create mode 100644 graphql/operations/team/exchange/CreateOffer.graphql create mode 100644 graphql/operations/team/exchange/CreateRequest.graphql create mode 100644 graphql/operations/team/exchange/GetRequests.graphql create mode 100644 graphql/operations/team/orders/GetOrder.graphql create mode 100644 graphql/operations/team/orders/GetTeamOrders.graphql create mode 100644 graphql/operations/team/teams/CreateTeamAddress.graphql create mode 100644 graphql/operations/team/teams/DeleteTeamAddress.graphql create mode 100644 graphql/operations/team/teams/GetTeam.graphql create mode 100644 graphql/operations/team/teams/GetTeamAddresses.graphql create mode 100644 graphql/operations/team/teams/GetTeamMembers.graphql create mode 100644 graphql/operations/team/teams/InviteMember.graphql create mode 100644 graphql/operations/team/teams/SetSelectedLocation.graphql create mode 100644 graphql/operations/user/kyc/CreateKYCRequestRussia.graphql create mode 100644 graphql/operations/user/kyc/GetKYCRequestRussia.graphql create mode 100644 graphql/operations/user/kyc/GetKYCRequestsRussia.graphql create mode 100644 graphql/operations/user/teams/CreateTeam.graphql create mode 100644 graphql/operations/user/teams/GetMe.graphql create mode 100644 graphql/operations/user/teams/GetMeProfile.graphql create mode 100644 graphql/operations/user/teams/GetTeam.graphql create mode 100644 graphql/operations/user/teams/SwitchTeam.graphql create mode 100644 graphql/operations/user/teams/UpdateUser.graphql create mode 100644 i18n/locales/en/about.json create mode 100644 i18n/locales/en/aiAssistants.json create mode 100644 i18n/locales/en/auth.json create mode 100644 i18n/locales/en/billing.json create mode 100644 i18n/locales/en/breadcrumbs.json create mode 100644 i18n/locales/en/cabinetNav.json create mode 100644 i18n/locales/en/catalogAddress.json create mode 100644 i18n/locales/en/catalogHub.json create mode 100644 i18n/locales/en/catalogHubsSection.json create mode 100644 i18n/locales/en/catalogLanding.json create mode 100644 i18n/locales/en/catalogMap.json create mode 100644 i18n/locales/en/catalogOffer.json create mode 100644 i18n/locales/en/catalogOfferCard.json create mode 100644 i18n/locales/en/catalogOffersSection.json create mode 100644 i18n/locales/en/catalogProduct.json create mode 100644 i18n/locales/en/catalogSupplier.json create mode 100644 i18n/locales/en/catalogSuppliersSection.json create mode 100644 i18n/locales/en/clientOfferForm.json create mode 100644 i18n/locales/en/clientOffersList.json create mode 100644 i18n/locales/en/clientProfile.json create mode 100644 i18n/locales/en/clientRedirect.json create mode 100644 i18n/locales/en/clientTeam.json create mode 100644 i18n/locales/en/clientTeamSwitch.json create mode 100644 i18n/locales/en/common.json create mode 100644 i18n/locales/en/cta.json create mode 100644 i18n/locales/en/dashboard.json create mode 100644 i18n/locales/en/footer.json create mode 100644 i18n/locales/en/ganttTimeline.json create mode 100644 i18n/locales/en/goods.json create mode 100644 i18n/locales/en/howto.json create mode 100644 i18n/locales/en/kyc.json create mode 100644 i18n/locales/en/kycOverview.json create mode 100644 i18n/locales/en/kycRussia.json create mode 100644 i18n/locales/en/locations.json create mode 100644 i18n/locales/en/nav.json create mode 100644 i18n/locales/en/offersNew.json create mode 100644 i18n/locales/en/orderCalendar.json create mode 100644 i18n/locales/en/orderMap.json create mode 100644 i18n/locales/en/orders.json create mode 100644 i18n/locales/en/ordersDetail.json create mode 100644 i18n/locales/en/ordersList.json create mode 100644 i18n/locales/en/profile.json create mode 100644 i18n/locales/en/profileAddresses.json create mode 100644 i18n/locales/en/roles.json create mode 100644 i18n/locales/en/routeMap.json create mode 100644 i18n/locales/en/search.json create mode 100644 i18n/locales/en/searchPage.json create mode 100644 i18n/locales/en/sidebar.json create mode 100644 i18n/locales/en/stats.json create mode 100644 i18n/locales/en/supplier.json create mode 100644 i18n/locales/en/supplierFlow.json create mode 100644 i18n/locales/en/teams.json create mode 100644 i18n/locales/en/testMap.json create mode 100644 i18n/locales/en/testimonials.json create mode 100644 i18n/locales/en/timelineStages.json create mode 100644 i18n/locales/ru/about.json create mode 100644 i18n/locales/ru/aiAssistants.json create mode 100644 i18n/locales/ru/auth.json create mode 100644 i18n/locales/ru/billing.json create mode 100644 i18n/locales/ru/breadcrumbs.json create mode 100644 i18n/locales/ru/cabinetNav.json create mode 100644 i18n/locales/ru/catalogAddress.json create mode 100644 i18n/locales/ru/catalogHub.json create mode 100644 i18n/locales/ru/catalogHubsSection.json create mode 100644 i18n/locales/ru/catalogLanding.json create mode 100644 i18n/locales/ru/catalogMap.json create mode 100644 i18n/locales/ru/catalogOffer.json create mode 100644 i18n/locales/ru/catalogOfferCard.json create mode 100644 i18n/locales/ru/catalogOffersSection.json create mode 100644 i18n/locales/ru/catalogProduct.json create mode 100644 i18n/locales/ru/catalogSupplier.json create mode 100644 i18n/locales/ru/catalogSuppliersSection.json create mode 100644 i18n/locales/ru/clientOfferForm.json create mode 100644 i18n/locales/ru/clientOffersList.json create mode 100644 i18n/locales/ru/clientProfile.json create mode 100644 i18n/locales/ru/clientRedirect.json create mode 100644 i18n/locales/ru/clientTeam.json create mode 100644 i18n/locales/ru/clientTeamSwitch.json create mode 100644 i18n/locales/ru/common.json create mode 100644 i18n/locales/ru/cta.json create mode 100644 i18n/locales/ru/dashboard.json create mode 100644 i18n/locales/ru/footer.json create mode 100644 i18n/locales/ru/ganttTimeline.json create mode 100644 i18n/locales/ru/goods.json create mode 100644 i18n/locales/ru/howto.json create mode 100644 i18n/locales/ru/kyc.json create mode 100644 i18n/locales/ru/kycOverview.json create mode 100644 i18n/locales/ru/kycRussia.json create mode 100644 i18n/locales/ru/locations.json create mode 100644 i18n/locales/ru/nav.json create mode 100644 i18n/locales/ru/offersNew.json create mode 100644 i18n/locales/ru/orderCalendar.json create mode 100644 i18n/locales/ru/orderMap.json create mode 100644 i18n/locales/ru/orders.json create mode 100644 i18n/locales/ru/ordersDetail.json create mode 100644 i18n/locales/ru/ordersList.json create mode 100644 i18n/locales/ru/profile.json create mode 100644 i18n/locales/ru/profileAddresses.json create mode 100644 i18n/locales/ru/roles.json create mode 100644 i18n/locales/ru/routeMap.json create mode 100644 i18n/locales/ru/search.json create mode 100644 i18n/locales/ru/searchPage.json create mode 100644 i18n/locales/ru/sidebar.json create mode 100644 i18n/locales/ru/stats.json create mode 100644 i18n/locales/ru/supplier.json create mode 100644 i18n/locales/ru/supplierFlow.json create mode 100644 i18n/locales/ru/teams.json create mode 100644 i18n/locales/ru/testMap.json create mode 100644 i18n/locales/ru/testimonials.json create mode 100644 i18n/locales/ru/timelineStages.json create mode 100644 modules/@nuxtjs/tailwindcss.ts create mode 100644 modules/@pinia/nuxt.ts create mode 100644 nixpacks.toml create mode 100644 nuxt.config.ts create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/favicon.ico create mode 100644 public/robots.txt create mode 100644 scripts/generate-stories.mjs create mode 100644 scripts/load-secrets.mjs create mode 100644 sentry.client.config.ts create mode 100644 sentry.server.config.ts create mode 100644 server/api/auth/debug-session.get.ts create mode 100644 server/api/auth/id-token-claims.get.ts create mode 100644 server/api/auth/id-token.get.ts create mode 100644 server/api/auth/refresh.post.ts create mode 100644 server/api/companies.get.ts create mode 100644 server/api/locations.get.ts create mode 100644 server/api/suppliers.get.ts create mode 100644 server/middleware/00-logto.ts create mode 100644 server/middleware/me.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a7f73a --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Nuxt dev/build outputs +.output +.data +.nuxt +.nitro +.cache +dist + +# Node dependencies +node_modules + +# Logs +logs +*.log + +# Misc +.DS_Store +.fleet +.idea + +# Local env files +.env +.env.* +!.env.example diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..8fdd954 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22 \ No newline at end of file diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 0000000..cca485b --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,46 @@ +import path from 'node:path' +import type { StorybookConfig } from '@storybook/vue3-vite' +import vue from '@vitejs/plugin-vue' + +const config: StorybookConfig = { + stories: ['../app/components/**/*.stories.@(js|ts)'], + addons: ['@storybook/addon-essentials', '@storybook/addon-interactions'], + framework: { + name: '@storybook/vue3-vite', + options: {} + }, + core: { + disableTelemetry: true + }, + docs: { + autodocs: false + }, + viteFinal: async (baseConfig) => { + const projectRoot = path.resolve(__dirname, '..') + baseConfig.resolve = baseConfig.resolve || {} + baseConfig.resolve.alias = { + ...baseConfig.resolve.alias, + '~': path.resolve(__dirname, '../app'), + '@': path.resolve(__dirname, '../app'), + '@graphql-typed-document-node/core': path.resolve(__dirname, './shims/graphql-typed-document-node-core.ts') + } + baseConfig.plugins = baseConfig.plugins || [] + baseConfig.plugins.push(vue()) + baseConfig.root = projectRoot + baseConfig.server = { + ...(baseConfig.server || {}), + fs: { + ...(baseConfig.server?.fs || {}), + allow: Array.from( + new Set([ + ...(baseConfig.server?.fs?.allow || []), + projectRoot + ]) + ) + } + } + return baseConfig + } +} + +export default config diff --git a/.storybook/preview.ts b/.storybook/preview.ts new file mode 100644 index 0000000..2dd4ec9 --- /dev/null +++ b/.storybook/preview.ts @@ -0,0 +1,23 @@ +import type { Preview } from '@storybook/vue3' +import { setup } from '@storybook/vue3' + +import '../app/assets/css/tailwind.css' + +setup((app) => { + app.config.globalProperties.$t = (key: string) => key + app.config.globalProperties.$d = (value: any) => value +}) + +const preview: Preview = { + parameters: { + actions: { argTypesRegex: '^on[A-Z].*' }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/ + } + } + } +} + +export default preview diff --git a/.storybook/shims/graphql-typed-document-node-core.ts b/.storybook/shims/graphql-typed-document-node-core.ts new file mode 100644 index 0000000..90030ff --- /dev/null +++ b/.storybook/shims/graphql-typed-document-node-core.ts @@ -0,0 +1,10 @@ +// Minimal runtime shim so Vite/Storybook can resolve generated GraphQL imports. +import type { DocumentNode } from 'graphql' + +export type TypedDocumentNode> = DocumentNode & { + __resultType?: TResult + __variablesType?: TVariables +} + +// Runtime placeholder; generated files import the symbol but do not use the value. +export const TypedDocumentNode = {} as unknown as TypedDocumentNode diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6444f5c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +FROM node:22-slim AS build + +ENV PNPM_HOME=/pnpm +ENV PATH=$PNPM_HOME:$PATH + +WORKDIR /app + +RUN corepack enable + +ARG INFISICAL_API_URL +ARG INFISICAL_CLIENT_ID +ARG INFISICAL_CLIENT_SECRET +ARG INFISICAL_PROJECT_ID +ARG INFISICAL_ENV + +ENV INFISICAL_API_URL=$INFISICAL_API_URL \ + INFISICAL_CLIENT_ID=$INFISICAL_CLIENT_ID \ + INFISICAL_CLIENT_SECRET=$INFISICAL_CLIENT_SECRET \ + INFISICAL_PROJECT_ID=$INFISICAL_PROJECT_ID \ + INFISICAL_ENV=$INFISICAL_ENV + +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +COPY . . +RUN node scripts/load-secrets.mjs && . ./.env.infisical && pnpm run build + +FROM node:22-slim + +WORKDIR /app + +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOST=0.0.0.0 + +COPY --from=build /app/.output ./.output +COPY --from=build /app/public ./public +COPY --from=build /app/scripts ./scripts +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/package.json ./package.json + +EXPOSE 3000 + +CMD ["sh", "-c", "node scripts/load-secrets.mjs && . ./.env.infisical && node --import ./.output/server/sentry.server.config.mjs .output/server/index.mjs"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..25b5821 --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# Nuxt Minimal Starter + +Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. + +## Setup + +Make sure to install dependencies: + +```bash +# npm +npm install + +# pnpm +pnpm install + +# yarn +yarn install + +# bun +bun install +``` + +## Development Server + +Start the development server on `http://localhost:3000`: + +```bash +# npm +npm run dev + +# pnpm +pnpm dev + +# yarn +yarn dev + +# bun +bun run dev +``` + +## Production + +Build the application for production: + +```bash +# npm +npm run build + +# pnpm +pnpm build + +# yarn +yarn build + +# bun +bun run build +``` + +Locally preview production build: + +```bash +# npm +npm run preview + +# pnpm +pnpm preview + +# yarn +yarn preview + +# bun +bun run preview +``` + +Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. diff --git a/app/app.vue b/app/app.vue new file mode 100644 index 0000000..07891fb --- /dev/null +++ b/app/app.vue @@ -0,0 +1,14 @@ + + + diff --git a/app/assets/css/tailwind.css b/app/assets/css/tailwind.css new file mode 100644 index 0000000..d5c9f64 --- /dev/null +++ b/app/assets/css/tailwind.css @@ -0,0 +1,72 @@ +@import "tailwindcss"; +@plugin "daisyui"; + +@plugin "daisyui/theme" { + name: "silk"; + default: true; + prefersdark: false; + color-scheme: "light"; + --color-base-100: oklch(97% 0.0035 67.78); + --color-base-200: oklch(95% 0.0081 61.42); + --color-base-300: oklch(90% 0.0081 61.42); + --color-base-content: oklch(40% 0.0081 61.42); + --color-primary: oklch(23.27% 0.0249 284.3); + --color-primary-content: oklch(94.22% 0.2505 117.44); + --color-secondary: oklch(23.27% 0.0249 284.3); + --color-secondary-content: oklch(73.92% 0.2135 50.94); + --color-accent: oklch(23.27% 0.0249 284.3); + --color-accent-content: oklch(88.92% 0.2061 189.9); + --color-neutral: oklch(20% 0 0); + --color-neutral-content: oklch(80% 0.0081 61.42); + --color-info: oklch(80.39% 0.1148 241.68); + --color-info-content: oklch(30.39% 0.1148 241.68); + --color-success: oklch(83.92% 0.0901 136.87); + --color-success-content: oklch(23.92% 0.0901 136.87); + --color-warning: oklch(83.92% 0.1085 80); + --color-warning-content: oklch(43.92% 0.1085 80); + --color-error: oklch(75.1% 0.1814 22.37); + --color-error-content: oklch(35.1% 0.1814 22.37); + --radius-selector: 2rem; + --radius-field: 1rem; + --radius-box: 1rem; + --size-selector: 0.28125rem; + --size-field: 0.28125rem; + --border: 0.5px; + --depth: 0; + --noise: 0; +} + +@plugin "daisyui/theme" { + name: "night"; + default: false; + prefersdark: true; + color-scheme: "dark"; + --color-base-100: oklch(20.768% 0.039 265.754); + --color-base-200: oklch(19.314% 0.037 265.754); + --color-base-300: oklch(17.86% 0.034 265.754); + --color-base-content: oklch(84.153% 0.007 265.754); + --color-primary: oklch(75.351% 0.138 232.661); + --color-primary-content: oklch(15.07% 0.027 232.661); + --color-secondary: oklch(68.011% 0.158 276.934); + --color-secondary-content: oklch(13.602% 0.031 276.934); + --color-accent: oklch(72.36% 0.176 350.048); + --color-accent-content: oklch(14.472% 0.035 350.048); + --color-neutral: oklch(27.949% 0.036 260.03); + --color-neutral-content: oklch(85.589% 0.007 260.03); + --color-info: oklch(68.455% 0.148 237.251); + --color-info-content: oklch(0% 0 0); + --color-success: oklch(78.452% 0.132 181.911); + --color-success-content: oklch(15.69% 0.026 181.911); + --color-warning: oklch(83.242% 0.139 82.95); + --color-warning-content: oklch(16.648% 0.027 82.95); + --color-error: oklch(71.785% 0.17 13.118); + --color-error-content: oklch(14.357% 0.034 13.118); + --radius-selector: 1rem; + --radius-field: 1rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 0.5px; + --depth: 0; + --noise: 0; +} diff --git a/app/components/BankSearchRussia.stories.ts b/app/components/BankSearchRussia.stories.ts new file mode 100644 index 0000000..af669de --- /dev/null +++ b/app/components/BankSearchRussia.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './BankSearchRussia.vue' + +const meta: Meta = { + title: 'BankSearchRussia', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/BankSearchRussia.vue b/app/components/BankSearchRussia.vue new file mode 100644 index 0000000..13349c4 --- /dev/null +++ b/app/components/BankSearchRussia.vue @@ -0,0 +1,130 @@ + + + diff --git a/app/components/CabinetBreadcrumbs.vue b/app/components/CabinetBreadcrumbs.vue new file mode 100644 index 0000000..ed7addc --- /dev/null +++ b/app/components/CabinetBreadcrumbs.vue @@ -0,0 +1,63 @@ + + + diff --git a/app/components/CalcResultContent.stories.ts b/app/components/CalcResultContent.stories.ts new file mode 100644 index 0000000..dc94921 --- /dev/null +++ b/app/components/CalcResultContent.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './CalcResultContent.vue' + +const meta: Meta = { + title: 'CalcResultContent', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/CalcResultContent.vue b/app/components/CalcResultContent.vue new file mode 100644 index 0000000..badc316 --- /dev/null +++ b/app/components/CalcResultContent.vue @@ -0,0 +1,248 @@ + + + diff --git a/app/components/CompanyCard.stories.ts b/app/components/CompanyCard.stories.ts new file mode 100644 index 0000000..276f991 --- /dev/null +++ b/app/components/CompanyCard.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './CompanyCard.vue' + +const meta: Meta = { + title: 'CompanyCard', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/CompanyCard.vue b/app/components/CompanyCard.vue new file mode 100644 index 0000000..a548562 --- /dev/null +++ b/app/components/CompanyCard.vue @@ -0,0 +1,138 @@ + + + diff --git a/app/components/CompanySearchRussia.stories.ts b/app/components/CompanySearchRussia.stories.ts new file mode 100644 index 0000000..1bc64f2 --- /dev/null +++ b/app/components/CompanySearchRussia.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './CompanySearchRussia.vue' + +const meta: Meta = { + title: 'CompanySearchRussia', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/CompanySearchRussia.vue b/app/components/CompanySearchRussia.vue new file mode 100644 index 0000000..6b6b71b --- /dev/null +++ b/app/components/CompanySearchRussia.vue @@ -0,0 +1,137 @@ + + + diff --git a/app/components/EmptyState.vue b/app/components/EmptyState.vue new file mode 100644 index 0000000..182c7fe --- /dev/null +++ b/app/components/EmptyState.vue @@ -0,0 +1,32 @@ + + + diff --git a/app/components/FooterPublic.stories.ts b/app/components/FooterPublic.stories.ts new file mode 100644 index 0000000..8830c3b --- /dev/null +++ b/app/components/FooterPublic.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './FooterPublic.vue' + +const meta: Meta = { + title: 'FooterPublic', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/FooterPublic.vue b/app/components/FooterPublic.vue new file mode 100644 index 0000000..601a1f3 --- /dev/null +++ b/app/components/FooterPublic.vue @@ -0,0 +1,9 @@ + diff --git a/app/components/GanttTimeline.stories.ts b/app/components/GanttTimeline.stories.ts new file mode 100644 index 0000000..7fc3726 --- /dev/null +++ b/app/components/GanttTimeline.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './GanttTimeline.vue' + +const meta: Meta = { + title: 'GanttTimeline', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/GanttTimeline.vue b/app/components/GanttTimeline.vue new file mode 100644 index 0000000..e7cc5e3 --- /dev/null +++ b/app/components/GanttTimeline.vue @@ -0,0 +1,272 @@ + + + diff --git a/app/components/GoodsContent.stories.ts b/app/components/GoodsContent.stories.ts new file mode 100644 index 0000000..256e704 --- /dev/null +++ b/app/components/GoodsContent.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './GoodsContent.vue' + +const meta: Meta = { + title: 'GoodsContent', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/GoodsContent.vue b/app/components/GoodsContent.vue new file mode 100644 index 0000000..244e25b --- /dev/null +++ b/app/components/GoodsContent.vue @@ -0,0 +1,64 @@ + + + diff --git a/app/components/KYCFormRussia.stories.ts b/app/components/KYCFormRussia.stories.ts new file mode 100644 index 0000000..b574106 --- /dev/null +++ b/app/components/KYCFormRussia.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './KYCFormRussia.vue' + +const meta: Meta = { + title: 'KYCFormRussia', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/KYCFormRussia.vue b/app/components/KYCFormRussia.vue new file mode 100644 index 0000000..1ccdaa8 --- /dev/null +++ b/app/components/KYCFormRussia.vue @@ -0,0 +1,242 @@ + + + diff --git a/app/components/LangSwitcher.stories.ts b/app/components/LangSwitcher.stories.ts new file mode 100644 index 0000000..4036f2b --- /dev/null +++ b/app/components/LangSwitcher.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './LangSwitcher.vue' + +const meta: Meta = { + title: 'LangSwitcher', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/LangSwitcher.vue b/app/components/LangSwitcher.vue new file mode 100644 index 0000000..c370870 --- /dev/null +++ b/app/components/LangSwitcher.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/LocationsContent.stories.ts b/app/components/LocationsContent.stories.ts new file mode 100644 index 0000000..c606ca2 --- /dev/null +++ b/app/components/LocationsContent.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './LocationsContent.vue' + +const meta: Meta = { + title: 'LocationsContent', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/LocationsContent.vue b/app/components/LocationsContent.vue new file mode 100644 index 0000000..2709a43 --- /dev/null +++ b/app/components/LocationsContent.vue @@ -0,0 +1,120 @@ + + + diff --git a/app/components/MapSidebar.vue b/app/components/MapSidebar.vue new file mode 100644 index 0000000..2b1acd8 --- /dev/null +++ b/app/components/MapSidebar.vue @@ -0,0 +1,117 @@ + + + diff --git a/app/components/MapboxGlobe.client.stories.ts b/app/components/MapboxGlobe.client.stories.ts new file mode 100644 index 0000000..463d689 --- /dev/null +++ b/app/components/MapboxGlobe.client.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './MapboxGlobe.client.vue' + +const meta: Meta = { + title: 'MapboxGlobe.client', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/MapboxGlobe.client.vue b/app/components/MapboxGlobe.client.vue new file mode 100644 index 0000000..abd4ddb --- /dev/null +++ b/app/components/MapboxGlobe.client.vue @@ -0,0 +1,390 @@ + + + diff --git a/app/components/NearbyConnectionsSection.vue b/app/components/NearbyConnectionsSection.vue new file mode 100644 index 0000000..d564221 --- /dev/null +++ b/app/components/NearbyConnectionsSection.vue @@ -0,0 +1,442 @@ + + + diff --git a/app/components/NearbyHubsSection.vue b/app/components/NearbyHubsSection.vue new file mode 100644 index 0000000..539ac63 --- /dev/null +++ b/app/components/NearbyHubsSection.vue @@ -0,0 +1,374 @@ + + + diff --git a/app/components/NovuNotificationBell.client.stories.ts b/app/components/NovuNotificationBell.client.stories.ts new file mode 100644 index 0000000..74cd986 --- /dev/null +++ b/app/components/NovuNotificationBell.client.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './NovuNotificationBell.client.vue' + +const meta: Meta = { + title: 'NovuNotificationBell.client', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/NovuNotificationBell.client.vue b/app/components/NovuNotificationBell.client.vue new file mode 100644 index 0000000..cb0fef2 --- /dev/null +++ b/app/components/NovuNotificationBell.client.vue @@ -0,0 +1,202 @@ + + + diff --git a/app/components/OrderCalendar.stories.ts b/app/components/OrderCalendar.stories.ts new file mode 100644 index 0000000..00368bc --- /dev/null +++ b/app/components/OrderCalendar.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './OrderCalendar.vue' + +const meta: Meta = { + title: 'OrderCalendar', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/OrderCalendar.vue b/app/components/OrderCalendar.vue new file mode 100644 index 0000000..f1469ea --- /dev/null +++ b/app/components/OrderCalendar.vue @@ -0,0 +1,244 @@ + + + diff --git a/app/components/OrderMap.stories.ts b/app/components/OrderMap.stories.ts new file mode 100644 index 0000000..1423fd9 --- /dev/null +++ b/app/components/OrderMap.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './OrderMap.vue' + +const meta: Meta = { + title: 'OrderMap', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/OrderMap.vue b/app/components/OrderMap.vue new file mode 100644 index 0000000..254e413 --- /dev/null +++ b/app/components/OrderMap.vue @@ -0,0 +1,147 @@ + + + diff --git a/app/components/OrderTimeline.stories.ts b/app/components/OrderTimeline.stories.ts new file mode 100644 index 0000000..94c6d6c --- /dev/null +++ b/app/components/OrderTimeline.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './OrderTimeline.vue' + +const meta: Meta = { + title: 'OrderTimeline', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/OrderTimeline.vue b/app/components/OrderTimeline.vue new file mode 100644 index 0000000..10f320f --- /dev/null +++ b/app/components/OrderTimeline.vue @@ -0,0 +1,184 @@ + + + diff --git a/app/components/OrdersRoutesMap.client.vue b/app/components/OrdersRoutesMap.client.vue new file mode 100644 index 0000000..4571429 --- /dev/null +++ b/app/components/OrdersRoutesMap.client.vue @@ -0,0 +1,417 @@ + + + diff --git a/app/components/OrdersRoutesPreview.client.vue b/app/components/OrdersRoutesPreview.client.vue new file mode 100644 index 0000000..3f68d87 --- /dev/null +++ b/app/components/OrdersRoutesPreview.client.vue @@ -0,0 +1,234 @@ + + + diff --git a/app/components/PaginationLoadMore.vue b/app/components/PaginationLoadMore.vue new file mode 100644 index 0000000..f1ffa24 --- /dev/null +++ b/app/components/PaginationLoadMore.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/RequestRoutesMap.vue b/app/components/RequestRoutesMap.vue new file mode 100644 index 0000000..8133a91 --- /dev/null +++ b/app/components/RequestRoutesMap.vue @@ -0,0 +1,401 @@ + + + diff --git a/app/components/RouteMap.stories.ts b/app/components/RouteMap.stories.ts new file mode 100644 index 0000000..b4efbcb --- /dev/null +++ b/app/components/RouteMap.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './RouteMap.vue' + +const meta: Meta = { + title: 'RouteMap', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/RouteMap.vue b/app/components/RouteMap.vue new file mode 100644 index 0000000..f994b37 --- /dev/null +++ b/app/components/RouteMap.vue @@ -0,0 +1,281 @@ + + + diff --git a/app/components/RouteMapPanel.vue b/app/components/RouteMapPanel.vue new file mode 100644 index 0000000..04d6650 --- /dev/null +++ b/app/components/RouteMapPanel.vue @@ -0,0 +1,39 @@ + + + diff --git a/app/components/RouteStagesList.vue b/app/components/RouteStagesList.vue new file mode 100644 index 0000000..2f151e3 --- /dev/null +++ b/app/components/RouteStagesList.vue @@ -0,0 +1,59 @@ + + + diff --git a/app/components/RouteSummaryHeader.vue b/app/components/RouteSummaryHeader.vue new file mode 100644 index 0000000..5033d0e --- /dev/null +++ b/app/components/RouteSummaryHeader.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/components/Sidebar.vue b/app/components/Sidebar.vue new file mode 100644 index 0000000..5990a07 --- /dev/null +++ b/app/components/Sidebar.vue @@ -0,0 +1,395 @@ + + + diff --git a/app/components/TeamCard.stories.ts b/app/components/TeamCard.stories.ts new file mode 100644 index 0000000..57a2fa8 --- /dev/null +++ b/app/components/TeamCard.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './TeamCard.vue' + +const meta: Meta = { + title: 'TeamCard', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/TeamCard.vue b/app/components/TeamCard.vue new file mode 100644 index 0000000..55cee85 --- /dev/null +++ b/app/components/TeamCard.vue @@ -0,0 +1,65 @@ + + + diff --git a/app/components/TeamCreateForm.stories.ts b/app/components/TeamCreateForm.stories.ts new file mode 100644 index 0000000..c64b510 --- /dev/null +++ b/app/components/TeamCreateForm.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './TeamCreateForm.vue' + +const meta: Meta = { + title: 'TeamCreateForm', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/TeamCreateForm.vue b/app/components/TeamCreateForm.vue new file mode 100644 index 0000000..17b3bd1 --- /dev/null +++ b/app/components/TeamCreateForm.vue @@ -0,0 +1,104 @@ + + + diff --git a/app/components/TimelineStages.stories.ts b/app/components/TimelineStages.stories.ts new file mode 100644 index 0000000..7ccfd04 --- /dev/null +++ b/app/components/TimelineStages.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './TimelineStages.vue' + +const meta: Meta = { + title: 'TimelineStages', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/TimelineStages.vue b/app/components/TimelineStages.vue new file mode 100644 index 0000000..9ee6674 --- /dev/null +++ b/app/components/TimelineStages.vue @@ -0,0 +1,129 @@ + + + diff --git a/app/components/TopBar.vue b/app/components/TopBar.vue new file mode 100644 index 0000000..2da5ac7 --- /dev/null +++ b/app/components/TopBar.vue @@ -0,0 +1,182 @@ + + + diff --git a/app/components/TripBadge.stories.ts b/app/components/TripBadge.stories.ts new file mode 100644 index 0000000..5bdc8d0 --- /dev/null +++ b/app/components/TripBadge.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './TripBadge.vue' + +const meta: Meta = { + title: 'TripBadge', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/TripBadge.vue b/app/components/TripBadge.vue new file mode 100644 index 0000000..d620ba8 --- /dev/null +++ b/app/components/TripBadge.vue @@ -0,0 +1,129 @@ + + + diff --git a/app/components/UserAvatar.stories.ts b/app/components/UserAvatar.stories.ts new file mode 100644 index 0000000..48b38da --- /dev/null +++ b/app/components/UserAvatar.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './UserAvatar.vue' + +const meta: Meta = { + title: 'UserAvatar', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/UserAvatar.vue b/app/components/UserAvatar.vue new file mode 100644 index 0000000..bfe1600 --- /dev/null +++ b/app/components/UserAvatar.vue @@ -0,0 +1,123 @@ + + + diff --git a/app/components/catalog/AddressCard.vue b/app/components/catalog/AddressCard.vue new file mode 100644 index 0000000..ba726ec --- /dev/null +++ b/app/components/catalog/AddressCard.vue @@ -0,0 +1,52 @@ + + + diff --git a/app/components/catalog/CatalogFilters.vue b/app/components/catalog/CatalogFilters.vue new file mode 100644 index 0000000..3cc6772 --- /dev/null +++ b/app/components/catalog/CatalogFilters.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/catalog/CatalogHubsSection.vue b/app/components/catalog/CatalogHubsSection.vue new file mode 100644 index 0000000..76cb76f --- /dev/null +++ b/app/components/catalog/CatalogHubsSection.vue @@ -0,0 +1,80 @@ + + + diff --git a/app/components/catalog/CatalogMap.vue b/app/components/catalog/CatalogMap.vue new file mode 100644 index 0000000..548be35 --- /dev/null +++ b/app/components/catalog/CatalogMap.vue @@ -0,0 +1,192 @@ + + + diff --git a/app/components/catalog/CatalogMapPanel.vue b/app/components/catalog/CatalogMapPanel.vue new file mode 100644 index 0000000..8b227c1 --- /dev/null +++ b/app/components/catalog/CatalogMapPanel.vue @@ -0,0 +1,155 @@ + + + diff --git a/app/components/catalog/CatalogMapSidebar.vue b/app/components/catalog/CatalogMapSidebar.vue new file mode 100644 index 0000000..50e6871 --- /dev/null +++ b/app/components/catalog/CatalogMapSidebar.vue @@ -0,0 +1,59 @@ + + + diff --git a/app/components/catalog/CatalogOffersSection.vue b/app/components/catalog/CatalogOffersSection.vue new file mode 100644 index 0000000..4b43f22 --- /dev/null +++ b/app/components/catalog/CatalogOffersSection.vue @@ -0,0 +1,69 @@ + + + diff --git a/app/components/catalog/CatalogSuppliersSection.vue b/app/components/catalog/CatalogSuppliersSection.vue new file mode 100644 index 0000000..c8c012c --- /dev/null +++ b/app/components/catalog/CatalogSuppliersSection.vue @@ -0,0 +1,63 @@ + + + diff --git a/app/components/catalog/HubCard.vue b/app/components/catalog/HubCard.vue new file mode 100644 index 0000000..05886be --- /dev/null +++ b/app/components/catalog/HubCard.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/catalog/MapHero.vue b/app/components/catalog/MapHero.vue new file mode 100644 index 0000000..9d3aa4c --- /dev/null +++ b/app/components/catalog/MapHero.vue @@ -0,0 +1,114 @@ + + + diff --git a/app/components/catalog/OfferCard.vue b/app/components/catalog/OfferCard.vue new file mode 100644 index 0000000..dc650f8 --- /dev/null +++ b/app/components/catalog/OfferCard.vue @@ -0,0 +1,118 @@ + + + diff --git a/app/components/catalog/ProductCard.vue b/app/components/catalog/ProductCard.vue new file mode 100644 index 0000000..19b9ec0 --- /dev/null +++ b/app/components/catalog/ProductCard.vue @@ -0,0 +1,52 @@ + + + diff --git a/app/components/catalog/SupplierCard.vue b/app/components/catalog/SupplierCard.vue new file mode 100644 index 0000000..723b8be --- /dev/null +++ b/app/components/catalog/SupplierCard.vue @@ -0,0 +1,95 @@ + + + diff --git a/app/components/ui/Alert.stories.ts b/app/components/ui/Alert.stories.ts new file mode 100644 index 0000000..4f86067 --- /dev/null +++ b/app/components/ui/Alert.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Alert.vue' + +const meta: Meta = { + title: 'Ui/Alert', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Alert.vue b/app/components/ui/Alert.vue new file mode 100644 index 0000000..128d3b9 --- /dev/null +++ b/app/components/ui/Alert.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/Badge.vue b/app/components/ui/Badge.vue new file mode 100644 index 0000000..3f1fb79 --- /dev/null +++ b/app/components/ui/Badge.vue @@ -0,0 +1,40 @@ + + + diff --git a/app/components/ui/Button.stories.ts b/app/components/ui/Button.stories.ts new file mode 100644 index 0000000..dd7bfed --- /dev/null +++ b/app/components/ui/Button.stories.ts @@ -0,0 +1,46 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import Button from './Button.vue' + +const meta: Meta = { + title: 'UI/Button', + component: Button, + render: (args) => ({ + components: { Button }, + setup() { + return { args } + }, + template: '' + }), + argTypes: { + variant: { + control: { type: 'select' }, + options: ['primary', 'outline'] + } + }, + tags: ['autodocs'] +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: { + label: 'Primary button', + variant: 'primary' + } +} + +export const Outline: Story = { + args: { + label: 'Outline button', + variant: 'outline' + } +} + +export const FullWidth: Story = { + args: { + label: 'Full width', + variant: 'primary', + fullWidth: true + } +} diff --git a/app/components/ui/Button.vue b/app/components/ui/Button.vue new file mode 100644 index 0000000..869d6d4 --- /dev/null +++ b/app/components/ui/Button.vue @@ -0,0 +1,45 @@ + + + diff --git a/app/components/ui/Card.stories.ts b/app/components/ui/Card.stories.ts new file mode 100644 index 0000000..fe39624 --- /dev/null +++ b/app/components/ui/Card.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Card.vue' + +const meta: Meta = { + title: 'Ui/Card', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Card.vue b/app/components/ui/Card.vue new file mode 100644 index 0000000..ea0cbe1 --- /dev/null +++ b/app/components/ui/Card.vue @@ -0,0 +1,42 @@ + + + diff --git a/app/components/ui/Container.stories.ts b/app/components/ui/Container.stories.ts new file mode 100644 index 0000000..70cd031 --- /dev/null +++ b/app/components/ui/Container.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Container.vue' + +const meta: Meta = { + title: 'Ui/Container', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Container.vue b/app/components/ui/Container.vue new file mode 100644 index 0000000..111ed05 --- /dev/null +++ b/app/components/ui/Container.vue @@ -0,0 +1,29 @@ + + + diff --git a/app/components/ui/EmptyState.vue b/app/components/ui/EmptyState.vue new file mode 100644 index 0000000..58cbd0d --- /dev/null +++ b/app/components/ui/EmptyState.vue @@ -0,0 +1,50 @@ + + + diff --git a/app/components/ui/FieldButton.stories.ts b/app/components/ui/FieldButton.stories.ts new file mode 100644 index 0000000..9156f91 --- /dev/null +++ b/app/components/ui/FieldButton.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './FieldButton.vue' + +const meta: Meta = { + title: 'Ui/FieldButton', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/FieldButton.vue b/app/components/ui/FieldButton.vue new file mode 100644 index 0000000..ddfc572 --- /dev/null +++ b/app/components/ui/FieldButton.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/ui/Grid.stories.ts b/app/components/ui/Grid.stories.ts new file mode 100644 index 0000000..10ac5cc --- /dev/null +++ b/app/components/ui/Grid.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Grid.vue' + +const meta: Meta = { + title: 'Ui/Grid', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Grid.vue b/app/components/ui/Grid.vue new file mode 100644 index 0000000..d1a3173 --- /dev/null +++ b/app/components/ui/Grid.vue @@ -0,0 +1,52 @@ + + + diff --git a/app/components/ui/GridItem.stories.ts b/app/components/ui/GridItem.stories.ts new file mode 100644 index 0000000..eb5e383 --- /dev/null +++ b/app/components/ui/GridItem.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './GridItem.vue' + +const meta: Meta = { + title: 'Ui/GridItem', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/GridItem.vue b/app/components/ui/GridItem.vue new file mode 100644 index 0000000..2206b69 --- /dev/null +++ b/app/components/ui/GridItem.vue @@ -0,0 +1,32 @@ + + + diff --git a/app/components/ui/Heading.stories.ts b/app/components/ui/Heading.stories.ts new file mode 100644 index 0000000..22ae46b --- /dev/null +++ b/app/components/ui/Heading.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Heading.vue' + +const meta: Meta = { + title: 'Ui/Heading', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Heading.vue b/app/components/ui/Heading.vue new file mode 100644 index 0000000..2af1f9d --- /dev/null +++ b/app/components/ui/Heading.vue @@ -0,0 +1,45 @@ + + + diff --git a/app/components/ui/IconCircle.stories.ts b/app/components/ui/IconCircle.stories.ts new file mode 100644 index 0000000..263fba9 --- /dev/null +++ b/app/components/ui/IconCircle.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './IconCircle.vue' + +const meta: Meta = { + title: 'Ui/IconCircle', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/IconCircle.vue b/app/components/ui/IconCircle.vue new file mode 100644 index 0000000..f83c7d4 --- /dev/null +++ b/app/components/ui/IconCircle.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/components/ui/Input.stories.ts b/app/components/ui/Input.stories.ts new file mode 100644 index 0000000..3a292d2 --- /dev/null +++ b/app/components/ui/Input.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Input.vue' + +const meta: Meta = { + title: 'Ui/Input', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Input.vue b/app/components/ui/Input.vue new file mode 100644 index 0000000..7b693bc --- /dev/null +++ b/app/components/ui/Input.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/ui/PageHeader.vue b/app/components/ui/PageHeader.vue new file mode 100644 index 0000000..19501fd --- /dev/null +++ b/app/components/ui/PageHeader.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/components/ui/PageHeaderAction.vue b/app/components/ui/PageHeaderAction.vue new file mode 100644 index 0000000..1f8504d --- /dev/null +++ b/app/components/ui/PageHeaderAction.vue @@ -0,0 +1,24 @@ + + + diff --git a/app/components/ui/Pill.stories.ts b/app/components/ui/Pill.stories.ts new file mode 100644 index 0000000..1de37b1 --- /dev/null +++ b/app/components/ui/Pill.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Pill.vue' + +const meta: Meta = { + title: 'Ui/Pill', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Pill.vue b/app/components/ui/Pill.vue new file mode 100644 index 0000000..2690816 --- /dev/null +++ b/app/components/ui/Pill.vue @@ -0,0 +1,42 @@ + + + diff --git a/app/components/ui/Section.stories.ts b/app/components/ui/Section.stories.ts new file mode 100644 index 0000000..9176e5d --- /dev/null +++ b/app/components/ui/Section.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Section.vue' + +const meta: Meta = { + title: 'Ui/Section', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Section.vue b/app/components/ui/Section.vue new file mode 100644 index 0000000..5a9f066 --- /dev/null +++ b/app/components/ui/Section.vue @@ -0,0 +1,35 @@ + + + diff --git a/app/components/ui/SegmentedControl.vue b/app/components/ui/SegmentedControl.vue new file mode 100644 index 0000000..2cbb560 --- /dev/null +++ b/app/components/ui/SegmentedControl.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/ui/Select.stories.ts b/app/components/ui/Select.stories.ts new file mode 100644 index 0000000..4790dbc --- /dev/null +++ b/app/components/ui/Select.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Select.vue' + +const meta: Meta = { + title: 'Ui/Select', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Select.vue b/app/components/ui/Select.vue new file mode 100644 index 0000000..ea6b5e7 --- /dev/null +++ b/app/components/ui/Select.vue @@ -0,0 +1,5 @@ + diff --git a/app/components/ui/Spinner.stories.ts b/app/components/ui/Spinner.stories.ts new file mode 100644 index 0000000..8bae206 --- /dev/null +++ b/app/components/ui/Spinner.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Spinner.vue' + +const meta: Meta = { + title: 'Ui/Spinner', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Spinner.vue b/app/components/ui/Spinner.vue new file mode 100644 index 0000000..120768c --- /dev/null +++ b/app/components/ui/Spinner.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/ui/Stack.stories.ts b/app/components/ui/Stack.stories.ts new file mode 100644 index 0000000..d3f9bce --- /dev/null +++ b/app/components/ui/Stack.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Stack.vue' + +const meta: Meta = { + title: 'Ui/Stack', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Stack.vue b/app/components/ui/Stack.vue new file mode 100644 index 0000000..1adfc1f --- /dev/null +++ b/app/components/ui/Stack.vue @@ -0,0 +1,74 @@ + + + diff --git a/app/components/ui/Text.stories.ts b/app/components/ui/Text.stories.ts new file mode 100644 index 0000000..d2cbbce --- /dev/null +++ b/app/components/ui/Text.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Text.vue' + +const meta: Meta = { + title: 'Ui/Text', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Text.vue b/app/components/ui/Text.vue new file mode 100644 index 0000000..0fb9a5e --- /dev/null +++ b/app/components/ui/Text.vue @@ -0,0 +1,79 @@ + + + diff --git a/app/components/ui/Textarea.stories.ts b/app/components/ui/Textarea.stories.ts new file mode 100644 index 0000000..8ae8c22 --- /dev/null +++ b/app/components/ui/Textarea.stories.ts @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/vue3' +import StoryComponent from './Textarea.vue' + +const meta: Meta = { + title: 'Ui/Textarea', + component: StoryComponent, + render: (args) => ({ + components: { StoryComponent }, + setup() { + return { args } + }, + template: '' + }) +} + +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: {} +} diff --git a/app/components/ui/Textarea.vue b/app/components/ui/Textarea.vue new file mode 100644 index 0000000..a8bc0fc --- /dev/null +++ b/app/components/ui/Textarea.vue @@ -0,0 +1,44 @@ +