+
+
\ No newline at end of file
diff --git a/src/modules/chatbot/components/dialogue-phrase.vue b/src/modules/chatbot/components/dialogue-phrase.vue
new file mode 100644
index 0000000..5d89874
--- /dev/null
+++ b/src/modules/chatbot/components/dialogue-phrase.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
diff --git a/src/modules/chatbot/composables/chatbot-api.ts b/src/modules/chatbot/composables/chatbot-api.ts
new file mode 100644
index 0000000..69d50dc
--- /dev/null
+++ b/src/modules/chatbot/composables/chatbot-api.ts
@@ -0,0 +1,30 @@
+// composables/chat-api.ts
+import { useI18n } from "vue-i18n";
+import { useChatbotStore } from "src/stores/chatbot-store";
+
+export const useChatbotApi = () => {
+ const chatbot_store = useChatbotStore();
+ const { t } = useI18n();
+
+ const sendMessage = async (user_message: string) => {
+ // push user input
+ chatbot_store.messages.push({
+ text: user_message,
+ sent: true,
+ isThinking: false,
+ })
+
+ // automatically push chatbot pending reply
+ chatbot_store.messages.push({
+ text: t('chatbot.chat_thinking'),
+ sent: false,
+ isThinking: true
+ })
+
+ await chatbot_store.sendChatMessage(user_message);
+ };
+
+ return {
+ sendMessage,
+ };
+};
diff --git a/src/modules/chatbot/models/dialogue-message.model.ts b/src/modules/chatbot/models/dialogue-message.model.ts
new file mode 100644
index 0000000..2e26586
--- /dev/null
+++ b/src/modules/chatbot/models/dialogue-message.model.ts
@@ -0,0 +1,5 @@
+export interface Message {
+ text: string;
+ sent: boolean;
+ isThinking: boolean;
+}
diff --git a/src/modules/chatbot/models/page-context.model.ts b/src/modules/chatbot/models/page-context.model.ts
new file mode 100644
index 0000000..ea6e5d7
--- /dev/null
+++ b/src/modules/chatbot/models/page-context.model.ts
@@ -0,0 +1,111 @@
+import { RouteNames } from "src/router/router-constants";
+
+export interface chatbotPageContext {
+ name: string;
+ description: string;
+ features: string[];
+ path: RouteNames | null;
+}
+
+export const dashboardContext: chatbotPageContext = {
+ name: "Dashboard",
+ description: "Landing page containing useful links and a carousel showcasing recent news, as well as a local weather widget in the top right corner",
+ features: [
+ "Used as a landing platform and navigate the left drawer",
+ "Access the AI chatbot from the header",
+ "Access common external tools using the links below the news Carousel",
+ ],
+ path: RouteNames.DASHBOARD,
+};
+
+export const leftDrawerContext: chatbotPageContext = {
+ name: "Left Drawer",
+ description: "A drawer that acts as a navigation bar, routes to different parts of the website. Some icons will be hidden according to user access",
+ features: [
+ "The user can navigate to the home page.",
+ "Can review and approve timesheets. requires access to timesheet_approval module.",
+ "By default, the user can see the full list of employees. Requires user_management module access to edit, add, or view detailed profiles.",
+ "Can access the timesheet interface to input employee hours.",
+ "Can access your user profile to view information or change your UI preferences (light/dark mode and display language)",
+ "Can access the Help page to view common Q&A regarding different modules",
+ "Can logout",
+ ],
+ path: null,
+};
+
+export const profileContext: chatbotPageContext = {
+ name: "Profile",
+ description: "Display and edit user information",
+ features: [
+ "View personal information such as first and last name, phone, birthdate and address.",
+ "View Career information such as job title, company, supervisor, email and hiring date.",
+ "Edit available preferences such as Display options of light and dark mode, as well as display language",
+ ],
+ path: RouteNames.PROFILE,
+};
+
+export const employeeListContext: chatbotPageContext = {
+ name: "Employee List",
+ description: "View all the hired and currently active Staff",
+ features: [
+ "View the list of hired and active employees",
+ "Access an individual employee's detailed profile if user has user_management module access",
+ "Add, edit, or remove an employee if user has user_management module access",
+ "Add, edit, or remove module access for any given employee if user has user_managmenet module access",
+ "Add, edit, or remove schedule presets and assign those presets to employees. These presets can then be applied to the employee's timesheet with a single click. Requires user_management module access."
+ ],
+ path: RouteNames.EMPLOYEE_LIST,
+};
+
+export const timesheetApprovalContext: chatbotPageContext = {
+ name: "Timesheet Approval",
+ description: "Page where employee hours and shifts are approved for accounting purposes. Requires timesheet_approval module access.",
+ features: [
+ "See a grid or list view of total hours for all employees in the given 2-week pay period.",
+ "Access different periods thanks to the pay period navigator buttons (previous, next, date picker)",
+ "Approve the hours for the cards displayed.",
+ "Open a detailed dialog window for any employee",
+ "The detailed dialog window includes bar and circle charts to visually see employee hours worked daily, the type of shifts worked, and expenses accrued",
+ "The detailed dialog window allows the user to edit the any employee's timesheets or expenses",
+ ],
+ path: RouteNames.TIMESHEET_APPROVALS,
+};
+
+export const timesheetContext: chatbotPageContext = {
+ name: "Timesheet",
+ description:
+ "Page where an employee can enter their hours for their day and week. Display in 2-week pay periods.",
+ features: [
+ "Enter your in and out times per day",
+ "Add and edit what kind of hours your shift was example regular, overtime, vacation etc.",
+ "Edit your own shift hours",
+ "Delete your shift hours",
+ "List your expenses for the week",
+ "Add expenses for the week, along with attached files for said expenses",
+ ],
+ path: RouteNames.TIMESHEET,
+};
+
+export const helpContext: chatbotPageContext = {
+ name: "Help",
+ description: "page containing common Q&A segments regarding website functionalities",
+ features: [
+ "Browse by module for common questions and answers",
+ "The modules displayed will only be those the user has access to.",
+ "Each module consists of a series of Expanding Items. Clicking on a question item reveals the answer beneath.",
+ "Each Expanding Item also has its own support image that appears next to the items.",
+ ],
+ path: RouteNames.HELP,
+}
+
+export const PageContexts: Record = {
+ "login": null,
+ "login-success": null,
+ "error": null,
+ "/": dashboardContext,
+ "employees": employeeListContext,
+ "profile": profileContext,
+ "timesheet": timesheetContext,
+ "timesheet-approvals": timesheetApprovalContext,
+ "help": helpContext,
+}
diff --git a/src/modules/chatbot/pages/chatbot-page.vue b/src/modules/chatbot/pages/chatbot-page.vue
new file mode 100644
index 0000000..9d3a2b4
--- /dev/null
+++ b/src/modules/chatbot/pages/chatbot-page.vue
@@ -0,0 +1,15 @@
+
+
+
+