gitextract_dmcys4tl/ ├── .github/ │ └── workflows/ │ ├── nextjs-app-ci.yml │ ├── nextjs-pages-ci.yml │ └── react-vite-ci.yml ├── .gitignore ├── .husky/ │ └── pre-commit ├── LICENSE ├── README.md ├── apps/ │ ├── nextjs-app/ │ │ ├── .eslintrc.cjs │ │ ├── .gitignore │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── .storybook/ │ │ │ ├── main.ts │ │ │ └── preview.tsx │ │ ├── .vscode/ │ │ │ ├── extensions.json │ │ │ └── settings.json │ │ ├── README.md │ │ ├── __mocks__/ │ │ │ ├── vitest-env.d.ts │ │ │ └── zustand.ts │ │ ├── e2e/ │ │ │ ├── .eslintrc.cjs │ │ │ └── tests/ │ │ │ ├── auth.setup.ts │ │ │ ├── profile.spec.ts │ │ │ └── smoke.spec.ts │ │ ├── generators/ │ │ │ └── component/ │ │ │ ├── component.stories.tsx.hbs │ │ │ ├── component.tsx.hbs │ │ │ ├── index.cjs │ │ │ └── index.ts.hbs │ │ ├── index.html │ │ ├── lint-staged.config.mjs │ │ ├── mock-server.ts │ │ ├── next-env.d.ts │ │ ├── next.config.mjs │ │ ├── package.json │ │ ├── playwright.config.ts │ │ ├── plopfile.cjs │ │ ├── postcss.config.cjs │ │ ├── public/ │ │ │ ├── _redirects │ │ │ ├── mockServiceWorker.js │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ ├── dashboard-info.tsx │ │ │ │ │ │ └── dashboard-layout.tsx │ │ │ │ │ ├── discussions/ │ │ │ │ │ │ ├── [discussionId]/ │ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ │ └── discussion.test.tsx │ │ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ │ │ └── discussion.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── discussions.test.tsx │ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ │ └── discussions.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── profile/ │ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ │ └── profile.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── users/ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ ├── admin-guard.tsx │ │ │ │ │ │ └── users.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── auth/ │ │ │ │ │ ├── _components/ │ │ │ │ │ │ └── auth-layout.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── login/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── register/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── not-found.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── provider.tsx │ │ │ │ └── public/ │ │ │ │ └── discussions/ │ │ │ │ └── [discussionId]/ │ │ │ │ └── page.tsx │ │ │ ├── components/ │ │ │ │ ├── errors/ │ │ │ │ │ └── main.tsx │ │ │ │ ├── layouts/ │ │ │ │ │ └── content-layout.tsx │ │ │ │ └── ui/ │ │ │ │ ├── button/ │ │ │ │ │ ├── button.stories.tsx │ │ │ │ │ ├── button.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── dialog/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── dialog.test.tsx │ │ │ │ │ ├── confirmation-dialog/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── confirmation-dialog.test.tsx │ │ │ │ │ │ ├── confirmation-dialog.stories.tsx │ │ │ │ │ │ ├── confirmation-dialog.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dialog.stories.tsx │ │ │ │ │ ├── dialog.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── drawer/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── drawer.test.tsx │ │ │ │ │ ├── drawer.stories.tsx │ │ │ │ │ ├── drawer.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── dropdown/ │ │ │ │ │ ├── dropdown.stories.tsx │ │ │ │ │ ├── dropdown.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── form/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── form.test.tsx │ │ │ │ │ ├── error.tsx │ │ │ │ │ ├── field-wrapper.tsx │ │ │ │ │ ├── form-drawer.tsx │ │ │ │ │ ├── form.stories.tsx │ │ │ │ │ ├── form.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── input.tsx │ │ │ │ │ ├── label.tsx │ │ │ │ │ ├── select.tsx │ │ │ │ │ ├── switch.tsx │ │ │ │ │ └── textarea.tsx │ │ │ │ ├── link/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── link.stories.tsx │ │ │ │ │ └── link.tsx │ │ │ │ ├── md-preview/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── md-preview.stories.tsx │ │ │ │ │ └── md-preview.tsx │ │ │ │ ├── notifications/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── notifications.test.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification.stories.tsx │ │ │ │ │ ├── notification.tsx │ │ │ │ │ ├── notifications-store.ts │ │ │ │ │ └── notifications.tsx │ │ │ │ ├── spinner/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── spinner.stories.tsx │ │ │ │ │ └── spinner.tsx │ │ │ │ └── table/ │ │ │ │ ├── index.ts │ │ │ │ ├── pagination.tsx │ │ │ │ ├── table.stories.tsx │ │ │ │ └── table.tsx │ │ │ ├── config/ │ │ │ │ ├── env.ts │ │ │ │ └── paths.ts │ │ │ ├── features/ │ │ │ │ ├── auth/ │ │ │ │ │ └── components/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── login-form.test.tsx │ │ │ │ │ │ └── register-form.test.tsx │ │ │ │ │ ├── login-form.tsx │ │ │ │ │ └── register-form.tsx │ │ │ │ ├── comments/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── create-comment.ts │ │ │ │ │ │ ├── delete-comment.ts │ │ │ │ │ │ └── get-comments.ts │ │ │ │ │ └── components/ │ │ │ │ │ ├── comments-list.tsx │ │ │ │ │ ├── comments.tsx │ │ │ │ │ ├── create-comment.tsx │ │ │ │ │ └── delete-comment.tsx │ │ │ │ ├── discussions/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── create-discussion.ts │ │ │ │ │ │ ├── delete-discussion.ts │ │ │ │ │ │ ├── get-discussion.ts │ │ │ │ │ │ ├── get-discussions.ts │ │ │ │ │ │ └── update-discussion.ts │ │ │ │ │ └── components/ │ │ │ │ │ ├── create-discussion.tsx │ │ │ │ │ ├── delete-discussion.tsx │ │ │ │ │ ├── discussion-view.tsx │ │ │ │ │ ├── discussions-list.tsx │ │ │ │ │ └── update-discussion.tsx │ │ │ │ ├── teams/ │ │ │ │ │ └── api/ │ │ │ │ │ └── get-teams.ts │ │ │ │ └── users/ │ │ │ │ ├── api/ │ │ │ │ │ ├── delete-user.ts │ │ │ │ │ ├── get-users.ts │ │ │ │ │ └── update-profile.ts │ │ │ │ └── components/ │ │ │ │ ├── delete-user.tsx │ │ │ │ ├── update-profile.tsx │ │ │ │ └── users-list.tsx │ │ │ ├── hooks/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── use-disclosure.test.ts │ │ │ │ └── use-disclosure.ts │ │ │ ├── lib/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── authorization.test.tsx │ │ │ │ ├── api-client.ts │ │ │ │ ├── auth.tsx │ │ │ │ ├── authorization.ts │ │ │ │ └── react-query.ts │ │ │ ├── styles/ │ │ │ │ └── globals.css │ │ │ ├── testing/ │ │ │ │ ├── data-generators.ts │ │ │ │ ├── mocks/ │ │ │ │ │ ├── browser.ts │ │ │ │ │ ├── db.ts │ │ │ │ │ ├── handlers/ │ │ │ │ │ │ ├── auth.ts │ │ │ │ │ │ ├── comments.ts │ │ │ │ │ │ ├── discussions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── teams.ts │ │ │ │ │ │ └── users.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── server.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── setup-tests.ts │ │ │ │ └── test-utils.tsx │ │ │ ├── types/ │ │ │ │ └── api.ts │ │ │ └── utils/ │ │ │ ├── auth.ts │ │ │ ├── cn.ts │ │ │ └── format.ts │ │ ├── tailwind.config.cjs │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── nextjs-pages/ │ │ ├── .eslintrc.cjs │ │ ├── .gitignore │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── .storybook/ │ │ │ ├── main.ts │ │ │ └── preview.tsx │ │ ├── .vscode/ │ │ │ ├── extensions.json │ │ │ └── settings.json │ │ ├── README.md │ │ ├── __mocks__/ │ │ │ ├── vitest-env.d.ts │ │ │ └── zustand.ts │ │ ├── e2e/ │ │ │ ├── .eslintrc.cjs │ │ │ └── tests/ │ │ │ ├── auth.setup.ts │ │ │ ├── profile.spec.ts │ │ │ └── smoke.spec.ts │ │ ├── generators/ │ │ │ └── component/ │ │ │ ├── component.stories.tsx.hbs │ │ │ ├── component.tsx.hbs │ │ │ ├── index.cjs │ │ │ └── index.ts.hbs │ │ ├── lint-staged.config.mjs │ │ ├── mock-server.ts │ │ ├── next-env.d.ts │ │ ├── next.config.mjs │ │ ├── package.json │ │ ├── playwright.config.ts │ │ ├── plopfile.cjs │ │ ├── postcss.config.cjs │ │ ├── public/ │ │ │ ├── _redirects │ │ │ ├── mockServiceWorker.js │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── pages/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── dashboard.tsx │ │ │ │ │ │ ├── discussions/ │ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ │ ├── discussion.test.tsx │ │ │ │ │ │ │ │ └── discussions.test.tsx │ │ │ │ │ │ │ ├── discussion.tsx │ │ │ │ │ │ │ └── discussions.tsx │ │ │ │ │ │ ├── profile.tsx │ │ │ │ │ │ └── users.tsx │ │ │ │ │ └── auth/ │ │ │ │ │ ├── login.tsx │ │ │ │ │ └── register.tsx │ │ │ │ └── provider.tsx │ │ │ ├── components/ │ │ │ │ ├── errors/ │ │ │ │ │ └── main.tsx │ │ │ │ ├── layouts/ │ │ │ │ │ ├── auth-layout.tsx │ │ │ │ │ ├── content-layout.tsx │ │ │ │ │ ├── dashboard-layout.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── seo/ │ │ │ │ │ ├── head.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── button/ │ │ │ │ │ ├── button.stories.tsx │ │ │ │ │ ├── button.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── dialog/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── dialog.test.tsx │ │ │ │ │ ├── confirmation-dialog/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── confirmation-dialog.test.tsx │ │ │ │ │ │ ├── confirmation-dialog.stories.tsx │ │ │ │ │ │ ├── confirmation-dialog.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dialog.stories.tsx │ │ │ │ │ ├── dialog.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── drawer/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── drawer.test.tsx │ │ │ │ │ ├── drawer.stories.tsx │ │ │ │ │ ├── drawer.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── dropdown/ │ │ │ │ │ ├── dropdown.stories.tsx │ │ │ │ │ ├── dropdown.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── form/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── form.test.tsx │ │ │ │ │ ├── error.tsx │ │ │ │ │ ├── field-wrapper.tsx │ │ │ │ │ ├── form-drawer.tsx │ │ │ │ │ ├── form.stories.tsx │ │ │ │ │ ├── form.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── input.tsx │ │ │ │ │ ├── label.tsx │ │ │ │ │ ├── select.tsx │ │ │ │ │ ├── switch.tsx │ │ │ │ │ └── textarea.tsx │ │ │ │ ├── link/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── link.stories.tsx │ │ │ │ │ └── link.tsx │ │ │ │ ├── md-preview/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── md-preview.stories.tsx │ │ │ │ │ └── md-preview.tsx │ │ │ │ ├── notifications/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── notifications.test.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification.stories.tsx │ │ │ │ │ ├── notification.tsx │ │ │ │ │ ├── notifications-store.ts │ │ │ │ │ └── notifications.tsx │ │ │ │ ├── spinner/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── spinner.stories.tsx │ │ │ │ │ └── spinner.tsx │ │ │ │ └── table/ │ │ │ │ ├── index.ts │ │ │ │ ├── pagination.tsx │ │ │ │ ├── table.stories.tsx │ │ │ │ └── table.tsx │ │ │ ├── config/ │ │ │ │ ├── env.ts │ │ │ │ └── paths.ts │ │ │ ├── features/ │ │ │ │ ├── auth/ │ │ │ │ │ └── components/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── login-form.test.tsx │ │ │ │ │ │ └── register-form.test.tsx │ │ │ │ │ ├── login-form.tsx │ │ │ │ │ └── register-form.tsx │ │ │ │ ├── comments/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── create-comment.ts │ │ │ │ │ │ ├── delete-comment.ts │ │ │ │ │ │ └── get-comments.ts │ │ │ │ │ └── components/ │ │ │ │ │ ├── comments-list.tsx │ │ │ │ │ ├── comments.tsx │ │ │ │ │ ├── create-comment.tsx │ │ │ │ │ └── delete-comment.tsx │ │ │ │ ├── discussions/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── create-discussion.ts │ │ │ │ │ │ ├── delete-discussion.ts │ │ │ │ │ │ ├── get-discussion.ts │ │ │ │ │ │ ├── get-discussions.ts │ │ │ │ │ │ └── update-discussion.ts │ │ │ │ │ └── components/ │ │ │ │ │ ├── create-discussion.tsx │ │ │ │ │ ├── delete-discussion.tsx │ │ │ │ │ ├── discussion-view.tsx │ │ │ │ │ ├── discussions-list.tsx │ │ │ │ │ └── update-discussion.tsx │ │ │ │ ├── teams/ │ │ │ │ │ └── api/ │ │ │ │ │ └── get-teams.ts │ │ │ │ └── users/ │ │ │ │ ├── api/ │ │ │ │ │ ├── delete-user.ts │ │ │ │ │ ├── get-users.ts │ │ │ │ │ └── update-profile.ts │ │ │ │ └── components/ │ │ │ │ ├── delete-user.tsx │ │ │ │ ├── update-profile.tsx │ │ │ │ └── users-list.tsx │ │ │ ├── hooks/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── use-disclosure.test.ts │ │ │ │ └── use-disclosure.ts │ │ │ ├── lib/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── authorization.test.tsx │ │ │ │ ├── api-client.ts │ │ │ │ ├── auth.tsx │ │ │ │ ├── authorization.tsx │ │ │ │ └── react-query.ts │ │ │ ├── pages/ │ │ │ │ ├── 404.tsx │ │ │ │ ├── _app.tsx │ │ │ │ ├── app/ │ │ │ │ │ ├── discussions/ │ │ │ │ │ │ ├── [discussionId].tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── profile.tsx │ │ │ │ │ └── users.tsx │ │ │ │ ├── auth/ │ │ │ │ │ ├── login.tsx │ │ │ │ │ └── register.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── public/ │ │ │ │ └── discussions/ │ │ │ │ └── [discussionId].tsx │ │ │ ├── styles/ │ │ │ │ └── globals.css │ │ │ ├── testing/ │ │ │ │ ├── data-generators.ts │ │ │ │ ├── mocks/ │ │ │ │ │ ├── browser.ts │ │ │ │ │ ├── db.ts │ │ │ │ │ ├── handlers/ │ │ │ │ │ │ ├── auth.ts │ │ │ │ │ │ ├── comments.ts │ │ │ │ │ │ ├── discussions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── teams.ts │ │ │ │ │ │ └── users.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── server.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── setup-tests.ts │ │ │ │ └── test-utils.tsx │ │ │ ├── types/ │ │ │ │ └── api.ts │ │ │ └── utils/ │ │ │ ├── cn.ts │ │ │ └── format.ts │ │ ├── tailwind.config.cjs │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ └── react-vite/ │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── .storybook/ │ │ ├── main.ts │ │ └── preview.tsx │ ├── .vscode/ │ │ ├── extensions.json │ │ └── settings.json │ ├── README.md │ ├── __mocks__/ │ │ ├── vitest-env.d.ts │ │ └── zustand.ts │ ├── e2e/ │ │ ├── .eslintrc.cjs │ │ └── tests/ │ │ ├── auth.setup.ts │ │ ├── profile.spec.ts │ │ └── smoke.spec.ts │ ├── generators/ │ │ └── component/ │ │ ├── component.stories.tsx.hbs │ │ ├── component.tsx.hbs │ │ ├── index.cjs │ │ └── index.ts.hbs │ ├── index.html │ ├── mock-server.ts │ ├── package.json │ ├── playwright.config.ts │ ├── plopfile.cjs │ ├── postcss.config.cjs │ ├── public/ │ │ ├── _redirects │ │ ├── mockServiceWorker.js │ │ └── robots.txt │ ├── src/ │ │ ├── app/ │ │ │ ├── index.tsx │ │ │ ├── provider.tsx │ │ │ ├── router.tsx │ │ │ └── routes/ │ │ │ ├── app/ │ │ │ │ ├── dashboard.tsx │ │ │ │ ├── discussions/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── discussion.test.tsx │ │ │ │ │ │ └── discussions.test.tsx │ │ │ │ │ ├── discussion.tsx │ │ │ │ │ └── discussions.tsx │ │ │ │ ├── profile.tsx │ │ │ │ ├── root.tsx │ │ │ │ └── users.tsx │ │ │ ├── auth/ │ │ │ │ ├── login.tsx │ │ │ │ └── register.tsx │ │ │ ├── landing.tsx │ │ │ └── not-found.tsx │ │ ├── components/ │ │ │ ├── errors/ │ │ │ │ └── main.tsx │ │ │ ├── layouts/ │ │ │ │ ├── auth-layout.tsx │ │ │ │ ├── content-layout.tsx │ │ │ │ ├── dashboard-layout.tsx │ │ │ │ └── index.ts │ │ │ ├── seo/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── head.test.tsx │ │ │ │ ├── head.tsx │ │ │ │ └── index.ts │ │ │ └── ui/ │ │ │ ├── button/ │ │ │ │ ├── button.stories.tsx │ │ │ │ ├── button.tsx │ │ │ │ └── index.ts │ │ │ ├── dialog/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── dialog.test.tsx │ │ │ │ ├── confirmation-dialog/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── confirmation-dialog.test.tsx │ │ │ │ │ ├── confirmation-dialog.stories.tsx │ │ │ │ │ ├── confirmation-dialog.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── dialog.stories.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ └── index.ts │ │ │ ├── drawer/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── drawer.test.tsx │ │ │ │ ├── drawer.stories.tsx │ │ │ │ ├── drawer.tsx │ │ │ │ └── index.ts │ │ │ ├── dropdown/ │ │ │ │ ├── dropdown.stories.tsx │ │ │ │ ├── dropdown.tsx │ │ │ │ └── index.ts │ │ │ ├── form/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── form.test.tsx │ │ │ │ ├── error.tsx │ │ │ │ ├── field-wrapper.tsx │ │ │ │ ├── form-drawer.tsx │ │ │ │ ├── form.stories.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── switch.tsx │ │ │ │ └── textarea.tsx │ │ │ ├── link/ │ │ │ │ ├── index.ts │ │ │ │ ├── link.stories.tsx │ │ │ │ └── link.tsx │ │ │ ├── md-preview/ │ │ │ │ ├── index.ts │ │ │ │ ├── md-preview.stories.tsx │ │ │ │ └── md-preview.tsx │ │ │ ├── notifications/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── notifications.test.ts │ │ │ │ ├── index.ts │ │ │ │ ├── notification.stories.tsx │ │ │ │ ├── notification.tsx │ │ │ │ ├── notifications-store.ts │ │ │ │ └── notifications.tsx │ │ │ ├── spinner/ │ │ │ │ ├── index.ts │ │ │ │ ├── spinner.stories.tsx │ │ │ │ └── spinner.tsx │ │ │ └── table/ │ │ │ ├── index.ts │ │ │ ├── pagination.tsx │ │ │ ├── table.stories.tsx │ │ │ └── table.tsx │ │ ├── config/ │ │ │ ├── env.ts │ │ │ └── paths.ts │ │ ├── features/ │ │ │ ├── auth/ │ │ │ │ └── components/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── login-form.test.tsx │ │ │ │ │ └── register-form.test.tsx │ │ │ │ ├── login-form.tsx │ │ │ │ └── register-form.tsx │ │ │ ├── comments/ │ │ │ │ ├── api/ │ │ │ │ │ ├── create-comment.ts │ │ │ │ │ ├── delete-comment.ts │ │ │ │ │ └── get-comments.ts │ │ │ │ └── components/ │ │ │ │ ├── comments-list.tsx │ │ │ │ ├── comments.tsx │ │ │ │ ├── create-comment.tsx │ │ │ │ └── delete-comment.tsx │ │ │ ├── discussions/ │ │ │ │ ├── api/ │ │ │ │ │ ├── create-discussion.ts │ │ │ │ │ ├── delete-discussion.ts │ │ │ │ │ ├── get-discussion.ts │ │ │ │ │ ├── get-discussions.ts │ │ │ │ │ └── update-discussion.ts │ │ │ │ └── components/ │ │ │ │ ├── create-discussion.tsx │ │ │ │ ├── delete-discussion.tsx │ │ │ │ ├── discussion-view.tsx │ │ │ │ ├── discussions-list.tsx │ │ │ │ └── update-discussion.tsx │ │ │ ├── teams/ │ │ │ │ └── api/ │ │ │ │ └── get-teams.ts │ │ │ └── users/ │ │ │ ├── api/ │ │ │ │ ├── delete-user.ts │ │ │ │ ├── get-users.ts │ │ │ │ └── update-profile.ts │ │ │ └── components/ │ │ │ ├── delete-user.tsx │ │ │ ├── update-profile.tsx │ │ │ └── users-list.tsx │ │ ├── hooks/ │ │ │ ├── __tests__/ │ │ │ │ └── use-disclosure.test.ts │ │ │ └── use-disclosure.ts │ │ ├── index.css │ │ ├── lib/ │ │ │ ├── __tests__/ │ │ │ │ └── authorization.test.tsx │ │ │ ├── api-client.ts │ │ │ ├── auth.tsx │ │ │ ├── authorization.tsx │ │ │ └── react-query.ts │ │ ├── main.tsx │ │ ├── testing/ │ │ │ ├── data-generators.ts │ │ │ ├── mocks/ │ │ │ │ ├── browser.ts │ │ │ │ ├── db.ts │ │ │ │ ├── handlers/ │ │ │ │ │ ├── auth.ts │ │ │ │ │ ├── comments.ts │ │ │ │ │ ├── discussions.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── teams.ts │ │ │ │ │ └── users.ts │ │ │ │ ├── index.ts │ │ │ │ ├── server.ts │ │ │ │ └── utils.ts │ │ │ ├── setup-tests.ts │ │ │ └── test-utils.tsx │ │ ├── types/ │ │ │ └── api.ts │ │ ├── utils/ │ │ │ ├── cn.ts │ │ │ └── format.ts │ │ └── vite-env.d.ts │ ├── tailwind.config.cjs │ ├── tsconfig.json │ ├── vite-env.d.ts │ └── vite.config.ts ├── docs/ │ ├── additional-resources.md │ ├── api-layer.md │ ├── application-overview.md │ ├── components-and-styling.md │ ├── deployment.md │ ├── error-handling.md │ ├── performance.md │ ├── project-standards.md │ ├── project-structure.md │ ├── security.md │ ├── state-management.md │ └── testing.md └── package.json