|
-
+
{dept.name}
@@ -213,7 +253,7 @@ export default function WeeklySchedule({
return (
|
diff --git a/k8s.yaml b/k8s.yaml
index f8b68c6..5ac12be 100644
--- a/k8s.yaml
+++ b/k8s.yaml
@@ -16,7 +16,7 @@ spec:
spec:
containers:
- name: frontend-container
- image: git.demonkernel.io.vn/foodsurf/frontend:1.1.0
+ image: git.demonkernel.io.vn/foodsurf/frontend:1.1.2
ports:
- containerPort: 3000
resources:
diff --git a/lib/shift-context.tsx b/lib/shift-context.tsx
index 2fa7400..485e481 100644
--- a/lib/shift-context.tsx
+++ b/lib/shift-context.tsx
@@ -1,6 +1,12 @@
"use client";
-import { ReactNode, createContext, useCallback, useContext, useState } from "react";
+import {
+ ReactNode,
+ createContext,
+ useCallback,
+ useContext,
+ useState,
+} from "react";
import { MOCK_SHIFT_SLOTS } from "./constants";
import type { ShiftSlot, ShiftStatus } from "./types";
@@ -24,7 +30,11 @@ interface ShiftContextType {
goToToday: () => void;
// Shift actions
- registerShift: (shiftId: string, staffId: number, staffName: string) => { success: boolean; error?: string };
+ registerShift: (
+ shiftId: string,
+ staffId: number,
+ staffName: string,
+ ) => { success: boolean; error?: string };
unregisterShift: (shiftId: string, staffId: number) => void;
createShift: (shift: Omit) => void;
updateShift: (shift: ShiftSlot) => void;
@@ -34,7 +44,13 @@ interface ShiftContextType {
getShiftsForDate: (date: string) => ShiftSlot[];
getShiftsForWeek: (weekStart: Date) => ShiftSlot[];
getWeekDates: () => Date[];
- hasConflict: (date: string, startTime: string, endTime: string, staffId: number, excludeShiftId?: string) => boolean;
+ hasConflict: (
+ date: string,
+ startTime: string,
+ endTime: string,
+ staffId: number,
+ excludeShiftId?: string,
+ ) => boolean;
getWeeklyBudget: () => number;
}
@@ -198,7 +214,15 @@ export function ShiftProvider({ children }: { children: ReactNode }) {
return { success: false, error: "Bạn đã đăng ký ca này rồi." };
}
- if (hasConflict(shift.date, shift.startTime, shift.endTime, staffId, shiftId)) {
+ if (
+ hasConflict(
+ shift.date,
+ shift.startTime,
+ shift.endTime,
+ staffId,
+ shiftId,
+ )
+ ) {
return {
success: false,
error: "Xung đột lịch! Bạn đã có ca làm trùng giờ trong ngày này.",
@@ -210,7 +234,10 @@ export function ShiftProvider({ children }: { children: ReactNode }) {
s.id === shiftId
? {
...s,
- registeredStaff: [...s.registeredStaff, { id: staffId, name: staffName }],
+ registeredStaff: [
+ ...s.registeredStaff,
+ { id: staffId, name: staffName },
+ ],
status: "registered" as ShiftStatus,
}
: s,
@@ -230,7 +257,8 @@ export function ShiftProvider({ children }: { children: ReactNode }) {
return {
...s,
registeredStaff: updated,
- status: updated.length === 0 ? ("available" as ShiftStatus) : s.status,
+ status:
+ updated.length === 0 ? ("available" as ShiftStatus) : s.status,
};
}),
);
diff --git a/lib/types.ts b/lib/types.ts
index 910551d..a1f858b 100644
--- a/lib/types.ts
+++ b/lib/types.ts
@@ -116,7 +116,11 @@ export interface Combo {
}
// ===== SHIFT / SCHEDULE TYPES =====
-export type ShiftStatus = "available" | "registered" | "approved_leave" | "absent";
+export type ShiftStatus =
+ | "available"
+ | "registered"
+ | "approved_leave"
+ | "absent";
export interface RegisteredStaff {
id: number;
diff --git a/package-lock.json b/package-lock.json
index 97848ca..89ad516 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "temp",
- "version": "1.1.0",
+ "version": "1.1.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "temp",
- "version": "1.1.0",
+ "version": "1.1.2",
"dependencies": {
"@tailwindcss/postcss": "^4.2.2",
"@types/node": "^20.19.37",
diff --git a/package.json b/package.json
index 9c5d4bb..1bcd383 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "temp",
- "version": "1.1.0",
+ "version": "1.1.2",
"private": true,
"scripts": {
"dev": "next dev",
@@ -30,7 +30,7 @@
"@types/react-dom": "^19.2.3",
"eslint": "^9.39.4",
"eslint-config-next": "16.1.7",
- "prettier": "^3.8.1",
+ "prettier": "^3.8.2",
"prettier-plugin-embed": "^0.5.1",
"prettier-plugin-groovy": "^0.2.1",
"prettier-plugin-tailwindcss": "^0.7.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f3b8fdb..ed158af 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -47,7 +47,7 @@ importers:
version: 13.1.5(semantic-release@25.0.3(typescript@5.9.3))
'@trivago/prettier-plugin-sort-imports':
specifier: ^6.0.2
- version: 6.0.2(prettier@3.8.1)
+ version: 6.0.2(prettier@3.8.2)
'@types/react-dom':
specifier: ^19.2.3
version: 19.2.3(@types/react@19.2.14)
@@ -56,19 +56,19 @@ importers:
version: 9.39.4(jiti@2.6.1)
eslint-config-next:
specifier: 16.1.7
- version: 16.1.7(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ version: 16.1.7(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
prettier:
- specifier: ^3.8.1
- version: 3.8.1
+ specifier: ^3.8.2
+ version: 3.8.2
prettier-plugin-embed:
specifier: ^0.5.1
version: 0.5.1
prettier-plugin-groovy:
specifier: ^0.2.1
- version: 0.2.1(prettier@3.8.1)
+ version: 0.2.1(prettier@3.8.2)
prettier-plugin-tailwindcss:
specifier: ^0.7.2
- version: 0.7.2(@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.1))(prettier@3.8.1)
+ version: 0.7.2(@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.2))(prettier@3.8.2)
semantic-release:
specifier: ^25.0.3
version: 25.0.3(typescript@5.9.3)
@@ -766,63 +766,63 @@ packages:
'@types/responselike@1.0.3':
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
- '@typescript-eslint/eslint-plugin@8.58.0':
- resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==}
+ '@typescript-eslint/eslint-plugin@8.58.2':
+ resolution: {integrity: sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.58.0
+ '@typescript-eslint/parser': ^8.58.2
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/parser@8.58.0':
- resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==}
+ '@typescript-eslint/parser@8.58.2':
+ resolution: {integrity: sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/project-service@8.58.0':
- resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==}
+ '@typescript-eslint/project-service@8.58.2':
+ resolution: {integrity: sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/scope-manager@8.58.0':
- resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==}
+ '@typescript-eslint/scope-manager@8.58.2':
+ resolution: {integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.58.0':
- resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==}
+ '@typescript-eslint/tsconfig-utils@8.58.2':
+ resolution: {integrity: sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/type-utils@8.58.0':
- resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==}
+ '@typescript-eslint/type-utils@8.58.2':
+ resolution: {integrity: sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/types@8.58.0':
- resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==}
+ '@typescript-eslint/types@8.58.2':
+ resolution: {integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.58.0':
- resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==}
+ '@typescript-eslint/typescript-estree@8.58.2':
+ resolution: {integrity: sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/utils@8.58.0':
- resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==}
+ '@typescript-eslint/utils@8.58.2':
+ resolution: {integrity: sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/visitor-keys@8.58.0':
- resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==}
+ '@typescript-eslint/visitor-keys@8.58.2':
+ resolution: {integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
@@ -1074,8 +1074,8 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
- axe-core@4.11.2:
- resolution: {integrity: sha512-byD6KPdvo72y/wj2T/4zGEvvlis+PsZsn/yPS3pEO+sFpcrqRpX/TJCxvVaEsNeMrfQbCr7w163YqoD9IYwHXw==}
+ axe-core@4.11.3:
+ resolution: {integrity: sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==}
engines: {node: '>=4'}
axobject-query@4.1.0:
@@ -1092,8 +1092,8 @@ packages:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
- baseline-browser-mapping@2.10.15:
- resolution: {integrity: sha512-1nfKCq9wuAZFTkA2ey/3OXXx7GzFjLdkTiFVNwlJ9WqdI706CZRIhEqjuwanjMIja+84jDLa9rcyZDPDiVkASQ==}
+ baseline-browser-mapping@2.10.18:
+ resolution: {integrity: sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -1118,11 +1118,11 @@ packages:
bottleneck@2.19.5:
resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==}
- brace-expansion@1.1.13:
- resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==}
+ brace-expansion@1.1.14:
+ resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==}
- brace-expansion@2.0.3:
- resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==}
+ brace-expansion@2.1.0:
+ resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==}
brace-expansion@5.0.5:
resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
@@ -1159,8 +1159,8 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
- call-bind@1.0.8:
- resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ call-bind@1.0.9:
+ resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==}
engines: {node: '>= 0.4'}
call-bound@1.0.4:
@@ -1171,8 +1171,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001786:
- resolution: {integrity: sha512-4oxTZEvqmLLrERwxO76yfKM7acZo310U+v4kqexI2TL1DkkUEMT8UijrxxcnVdxR3qkVf5awGRX+4Z6aPHVKrA==}
+ caniuse-lite@1.0.30001787:
+ resolution: {integrity: sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==}
chalk@2.4.1:
resolution: {integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==}
@@ -1463,8 +1463,8 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.331:
- resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==}
+ electron-to-chromium@1.5.336:
+ resolution: {integrity: sha512-AbH9q9J455r/nLmdNZes0G0ZKcRX73FicwowalLs6ijwOmCJSRRrLX63lcAlzy9ux3dWK1w1+1nsBJEWN11hcQ==}
emoji-regex@10.6.0:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
@@ -1504,8 +1504,8 @@ packages:
error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
- es-abstract@1.24.1:
- resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
+ es-abstract@1.24.2:
+ resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==}
engines: {node: '>= 0.4'}
es-array-method-boxes-properly@1.0.0:
@@ -1519,8 +1519,8 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- es-iterator-helpers@1.3.1:
- resolution: {integrity: sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==}
+ es-iterator-helpers@1.3.2:
+ resolution: {integrity: sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==}
engines: {node: '>= 0.4'}
es-object-atoms@1.1.1:
@@ -2480,8 +2480,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.3.0:
- resolution: {integrity: sha512-sr8xPKE25m6vJVcrdn6NxtC0fVfuPowbscLypegRgOm0yXSqr5JNHCAY3hnusdJ7HRBW04j6Ip4khvHU778DuQ==}
+ lru-cache@11.3.5:
+ resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==}
engines: {node: 20 || >=22}
lru-cache@5.1.1:
@@ -2992,8 +2992,8 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
- postcss@8.5.8:
- resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
+ postcss@8.5.9:
+ resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
@@ -3064,8 +3064,8 @@ packages:
prettier-plugin-svelte:
optional: true
- prettier@3.8.1:
- resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
+ prettier@3.8.2:
+ resolution: {integrity: sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==}
engines: {node: '>=14'}
hasBin: true
@@ -3295,8 +3295,8 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- side-channel-list@1.0.0:
- resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ side-channel-list@1.0.1:
+ resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==}
engines: {node: '>= 0.4'}
side-channel-map@1.0.1:
@@ -3530,8 +3530,8 @@ packages:
tiny-jsonc@1.0.2:
resolution: {integrity: sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw==}
- tinyglobby@0.2.15:
- resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ tinyglobby@0.2.16:
+ resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
engines: {node: '>=12.0.0'}
to-readable-stream@2.1.0:
@@ -3610,8 +3610,8 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
- typescript-eslint@8.58.0:
- resolution: {integrity: sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==}
+ typescript-eslint@8.58.2:
+ resolution: {integrity: sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
@@ -3638,8 +3638,8 @@ packages:
resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==}
engines: {node: '>=18.17'}
- undici@7.24.7:
- resolution: {integrity: sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==}
+ undici@7.25.0:
+ resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==}
engines: {node: '>=20.18.1'}
unicode-emoji-modifier-base@1.0.0:
@@ -4345,8 +4345,8 @@ snapshots:
mime: 4.1.0
p-filter: 4.1.0
semantic-release: 25.0.3(typescript@5.9.3)
- tinyglobby: 0.2.15
- undici: 7.24.7
+ tinyglobby: 0.2.16
+ undici: 7.25.0
url-join: 5.0.0
transitivePeerDependencies:
- supports-color
@@ -4468,10 +4468,10 @@ snapshots:
'@alloc/quick-lru': 5.2.0
'@tailwindcss/node': 4.2.2
'@tailwindcss/oxide': 4.2.2
- postcss: 8.5.8
+ postcss: 8.5.9
tailwindcss: 4.2.2
- '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.1)':
+ '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.2)':
dependencies:
'@babel/generator': 7.29.1
'@babel/parser': 7.29.2
@@ -4481,7 +4481,7 @@ snapshots:
lodash-es: 4.18.1
minimatch: 9.0.9
parse-imports-exports: 0.2.4
- prettier: 3.8.1
+ prettier: 3.8.2
transitivePeerDependencies:
- supports-color
@@ -4536,14 +4536,14 @@ snapshots:
dependencies:
'@types/node': 20.19.39
- '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.58.0
- '@typescript-eslint/type-utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.58.0
+ '@typescript-eslint/parser': 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.58.2
+ '@typescript-eslint/type-utils': 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.58.2
eslint: 9.39.4(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
@@ -4552,41 +4552,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.58.0
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.58.0
+ '@typescript-eslint/scope-manager': 8.58.2
+ '@typescript-eslint/types': 8.58.2
+ '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.58.2
debug: 4.4.3
eslint: 9.39.4(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.58.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.58.2(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.58.0
+ '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.9.3)
+ '@typescript-eslint/types': 8.58.2
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.58.0':
+ '@typescript-eslint/scope-manager@8.58.2':
dependencies:
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/visitor-keys': 8.58.0
+ '@typescript-eslint/types': 8.58.2
+ '@typescript-eslint/visitor-keys': 8.58.2
- '@typescript-eslint/tsconfig-utils@8.58.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.58.2(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.58.2
+ '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.4(jiti@2.6.1)
ts-api-utils: 2.5.0(typescript@5.9.3)
@@ -4594,37 +4594,37 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.58.0': {}
+ '@typescript-eslint/types@8.58.2': {}
- '@typescript-eslint/typescript-estree@8.58.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.58.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/visitor-keys': 8.58.0
+ '@typescript-eslint/project-service': 8.58.2(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.9.3)
+ '@typescript-eslint/types': 8.58.2
+ '@typescript-eslint/visitor-keys': 8.58.2
debug: 4.4.3
minimatch: 10.2.5
semver: 7.7.4
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.16
ts-api-utils: 2.5.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.58.0
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.58.2
+ '@typescript-eslint/types': 8.58.2
+ '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
eslint: 9.39.4(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.58.0':
+ '@typescript-eslint/visitor-keys@8.58.2':
dependencies:
- '@typescript-eslint/types': 8.58.0
+ '@typescript-eslint/types': 8.58.2
eslint-visitor-keys: 5.0.1
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
@@ -4770,10 +4770,10 @@ snapshots:
array-includes@3.1.9:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
is-string: 1.1.1
@@ -4783,43 +4783,43 @@ snapshots:
array.prototype.findlast@1.2.5:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
array.prototype.findlastindex@1.2.6:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
array.prototype.flat@1.3.3:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-shim-unscopables: 1.1.0
array.prototype.flatmap@1.3.3:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-shim-unscopables: 1.1.0
array.prototype.reduce@1.0.8:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-array-method-boxes-properly: 1.0.0
es-errors: 1.3.0
es-object-atoms: 1.1.1
@@ -4827,18 +4827,18 @@ snapshots:
array.prototype.tosorted@1.1.4:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-errors: 1.3.0
es-shim-unscopables: 1.1.0
arraybuffer.prototype.slice@1.0.4:
dependencies:
array-buffer-byte-length: 1.0.2
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-errors: 1.3.0
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
@@ -4861,7 +4861,7 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
- axe-core@4.11.2: {}
+ axe-core@4.11.3: {}
axobject-query@4.1.0: {}
@@ -4874,7 +4874,7 @@ snapshots:
balanced-match@4.0.4: {}
- baseline-browser-mapping@2.10.15: {}
+ baseline-browser-mapping@2.10.18: {}
basic-auth@2.0.1:
dependencies:
@@ -4905,12 +4905,12 @@ snapshots:
bottleneck@2.19.5: {}
- brace-expansion@1.1.13:
+ brace-expansion@1.1.14:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.3:
+ brace-expansion@2.1.0:
dependencies:
balanced-match: 1.0.2
@@ -4924,9 +4924,9 @@ snapshots:
browserslist@4.28.2:
dependencies:
- baseline-browser-mapping: 2.10.15
- caniuse-lite: 1.0.30001786
- electron-to-chromium: 1.5.331
+ baseline-browser-mapping: 2.10.18
+ caniuse-lite: 1.0.30001787
+ electron-to-chromium: 1.5.336
node-releases: 2.0.37
update-browserslist-db: 1.2.3(browserslist@4.28.2)
@@ -4956,7 +4956,7 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
- call-bind@1.0.8:
+ call-bind@1.0.9:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
@@ -4970,7 +4970,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001786: {}
+ caniuse-lite@1.0.30001787: {}
chalk@2.4.1:
dependencies:
@@ -5255,7 +5255,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.331: {}
+ electron-to-chromium@1.5.336: {}
emoji-regex@10.6.0: {}
@@ -5289,12 +5289,12 @@ snapshots:
dependencies:
is-arrayish: 0.2.1
- es-abstract@1.24.1:
+ es-abstract@1.24.2:
dependencies:
array-buffer-byte-length: 1.0.2
arraybuffer.prototype.slice: 1.0.4
available-typed-arrays: 1.0.7
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
data-view-buffer: 1.0.2
data-view-byte-length: 1.0.2
@@ -5352,12 +5352,12 @@ snapshots:
es-errors@1.3.0: {}
- es-iterator-helpers@1.3.1:
+ es-iterator-helpers@1.3.2:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-errors: 1.3.0
es-set-tostringtag: 2.1.0
function-bind: 1.1.2
@@ -5370,7 +5370,6 @@ snapshots:
internal-slot: 1.1.0
iterator.prototype: 1.1.5
math-intrinsics: 1.1.0
- safe-array-concat: 1.1.3
es-object-atoms@1.1.1:
dependencies:
@@ -5403,18 +5402,18 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-config-next@16.1.7(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3):
+ eslint-config-next@16.1.7(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3):
dependencies:
'@next/eslint-plugin-next': 16.1.7
eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1))
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1))
eslint-plugin-react-hooks: 7.0.1(eslint@9.39.4(jiti@2.6.1))
globals: 16.4.0
- typescript-eslint: 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ typescript-eslint: 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
@@ -5439,25 +5438,25 @@ snapshots:
get-tsconfig: 4.13.7
is-bun-module: 2.0.0
stable-hash: 0.0.5
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.16
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -5468,7 +5467,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.39.4(jiti@2.6.1)
eslint-import-resolver-node: 0.3.10
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@2.6.1))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -5480,7 +5479,7 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -5492,7 +5491,7 @@ snapshots:
array-includes: 3.1.9
array.prototype.flatmap: 1.3.3
ast-types-flow: 0.0.8
- axe-core: 4.11.2
+ axe-core: 4.11.3
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
@@ -5523,7 +5522,7 @@ snapshots:
array.prototype.flatmap: 1.3.3
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
- es-iterator-helpers: 1.3.1
+ es-iterator-helpers: 1.3.2
eslint: 9.39.4(jiti@2.6.1)
estraverse: 5.3.0
hasown: 2.0.2
@@ -5825,7 +5824,7 @@ snapshots:
function.prototype.name@1.1.8:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
functions-have-names: 1.2.3
@@ -6013,7 +6012,7 @@ snapshots:
hosted-git-info@9.0.2:
dependencies:
- lru-cache: 11.3.0
+ lru-cache: 11.3.5
http-cache-semantics@4.2.0: {}
@@ -6098,7 +6097,7 @@ snapshots:
is-array-buffer@3.0.5:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
get-intrinsic: 1.3.0
@@ -6453,7 +6452,7 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.3.0: {}
+ lru-cache@11.3.5: {}
lru-cache@5.1.1:
dependencies:
@@ -6534,11 +6533,11 @@ snapshots:
minimatch@3.1.5:
dependencies:
- brace-expansion: 1.1.13
+ brace-expansion: 1.1.14
minimatch@9.0.9:
dependencies:
- brace-expansion: 2.0.3
+ brace-expansion: 2.1.0
minimist@1.2.8: {}
@@ -6580,8 +6579,8 @@ snapshots:
dependencies:
'@next/env': 16.1.7
'@swc/helpers': 0.5.15
- baseline-browser-mapping: 2.10.15
- caniuse-lite: 1.0.30001786
+ baseline-browser-mapping: 2.10.18
+ caniuse-lite: 1.0.30001787
postcss: 8.4.31
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
@@ -6659,7 +6658,7 @@ snapshots:
object.assign@4.1.7:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
@@ -6668,37 +6667,37 @@ snapshots:
object.entries@1.1.9:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
object.fromentries@2.0.8:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-object-atoms: 1.1.1
object.getownpropertydescriptors@2.1.9:
dependencies:
array.prototype.reduce: 1.0.8
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-object-atoms: 1.1.1
gopd: 1.2.0
safe-array-concat: 1.1.3
object.groupby@1.0.3:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
object.values@1.2.1:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
@@ -6863,7 +6862,7 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
- postcss@8.5.8:
+ postcss@8.5.9:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
@@ -6882,17 +6881,17 @@ snapshots:
transitivePeerDependencies:
- babel-plugin-macros
- prettier-plugin-groovy@0.2.1(prettier@3.8.1):
+ prettier-plugin-groovy@0.2.1(prettier@3.8.2):
dependencies:
- prettier: 3.8.1
+ prettier: 3.8.2
- prettier-plugin-tailwindcss@0.7.2(@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.1))(prettier@3.8.1):
+ prettier-plugin-tailwindcss@0.7.2(@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.2))(prettier@3.8.2):
dependencies:
- prettier: 3.8.1
+ prettier: 3.8.2
optionalDependencies:
- '@trivago/prettier-plugin-sort-imports': 6.0.2(prettier@3.8.1)
+ '@trivago/prettier-plugin-sort-imports': 6.0.2(prettier@3.8.2)
- prettier@3.8.1: {}
+ prettier@3.8.2: {}
pretty-ms@9.3.0:
dependencies:
@@ -7008,9 +7007,9 @@ snapshots:
reflect.getprototypeof@1.0.10:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
@@ -7023,7 +7022,7 @@ snapshots:
regexp.prototype.flags@1.5.4:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
es-errors: 1.3.0
get-proto: 1.0.1
@@ -7065,7 +7064,7 @@ snapshots:
safe-array-concat@1.1.3:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
get-intrinsic: 1.3.0
has-symbols: 1.1.0
@@ -7223,7 +7222,7 @@ snapshots:
shebang-regex@3.0.0: {}
- side-channel-list@1.0.0:
+ side-channel-list@1.0.1:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.4
@@ -7247,7 +7246,7 @@ snapshots:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.4
- side-channel-list: 1.0.0
+ side-channel-list: 1.0.1
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
@@ -7329,16 +7328,16 @@ snapshots:
string.prototype.includes@2.0.1:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
string.prototype.matchall@4.0.12:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
@@ -7352,28 +7351,28 @@ snapshots:
string.prototype.repeat@1.0.0:
dependencies:
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
string.prototype.trim@1.2.10:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-data-property: 1.1.4
define-properties: 1.2.1
- es-abstract: 1.24.1
+ es-abstract: 1.24.2
es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
string.prototype.trimend@1.0.9:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
string.prototype.trimstart@1.0.8:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
define-properties: 1.2.1
es-object-atoms: 1.1.1
@@ -7509,7 +7508,7 @@ snapshots:
tiny-jsonc@1.0.2: {}
- tinyglobby@0.2.15:
+ tinyglobby@0.2.16:
dependencies:
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
@@ -7568,7 +7567,7 @@ snapshots:
typed-array-byte-length@1.0.3:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
for-each: 0.3.5
gopd: 1.2.0
has-proto: 1.2.0
@@ -7577,7 +7576,7 @@ snapshots:
typed-array-byte-offset@1.0.4:
dependencies:
available-typed-arrays: 1.0.7
- call-bind: 1.0.8
+ call-bind: 1.0.9
for-each: 0.3.5
gopd: 1.2.0
has-proto: 1.2.0
@@ -7586,19 +7585,19 @@ snapshots:
typed-array-length@1.0.7:
dependencies:
- call-bind: 1.0.8
+ call-bind: 1.0.9
for-each: 0.3.5
gopd: 1.2.0
is-typed-array: 1.1.15
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- typescript-eslint@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3):
+ typescript-eslint@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/typescript-estree': 8.58.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.58.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.58.2(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.39.4(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
@@ -7620,7 +7619,7 @@ snapshots:
undici@6.24.1: {}
- undici@7.24.7: {}
+ undici@7.25.0: {}
unicode-emoji-modifier-base@1.0.0: {}
@@ -7747,7 +7746,7 @@ snapshots:
which-typed-array@1.1.20:
dependencies:
available-typed-arrays: 1.0.7
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
for-each: 0.3.5
get-proto: 1.0.1
diff --git a/register-shift-feature-prompt.md b/register-shift-feature-prompt.md
index f83085c..56c77ad 100644
--- a/register-shift-feature-prompt.md
+++ b/register-shift-feature-prompt.md
@@ -2,15 +2,21 @@
## Tổng Quan
-Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng ký ca làm việc theo khung thời gian do quản lý tạo ra. Tính năng hỗ trợ cả hai vai trò: **Manager** và **Staff**, với giao diện responsive thích ứng theo kích thước màn hình.
+Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng ký ca làm
+việc theo khung thời gian do quản lý tạo ra. Tính năng hỗ trợ cả hai vai trò:
+**Manager** và **Staff**, với giao diện responsive thích ứng theo kích thước màn
+hình.
---
## Mục Đích
-- Cho phép nhân viên xem danh sách các khung thời gian ca làm khả dụng và đăng ký vào ca mà họ muốn làm.
-- Quản lý (Manager) có toàn quyền tạo, chỉnh sửa và xóa các khung thời gian ca làm.
-- Nhân viên có thể thấy ca làm của đồng nghiệp để tránh xung đột hoặc điều chỉnh lịch phù hợp.
+- Cho phép nhân viên xem danh sách các khung thời gian ca làm khả dụng và đăng
+ ký vào ca mà họ muốn làm.
+- Quản lý (Manager) có toàn quyền tạo, chỉnh sửa và xóa các khung thời gian ca
+ làm.
+- Nhân viên có thể thấy ca làm của đồng nghiệp để tránh xung đột hoặc điều chỉnh
+ lịch phù hợp.
- Cả Manager và Staff đều có thể chỉnh sửa hoặc hủy ca đã đăng ký của nhân viên.
---
@@ -18,6 +24,7 @@ Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng
## Vai Trò & Phân Quyền
### Manager
+
- Tạo, chỉnh sửa, xóa khung thời gian ca làm (shift slots).
- Xem lịch làm việc của toàn bộ nhân viên theo tuần hoặc tháng.
- Phê duyệt hoặc từ chối yêu cầu đăng ký ca.
@@ -25,10 +32,12 @@ Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng
- Gán ca làm cho nhân viên cụ thể nếu cần.
### Staff (Nhân Viên)
+
- Xem danh sách ca làm khả dụng trong tuần hoặc tháng.
- Đăng ký vào ca mà mình muốn làm.
- Xem ca đã được đăng ký bởi các nhân viên khác.
-- Hủy hoặc chỉnh sửa ca đã đăng ký của bản thân (trong giới hạn thời gian cho phép).
+- Hủy hoặc chỉnh sửa ca đã đăng ký của bản thân (trong giới hạn thời gian cho
+ phép).
---
@@ -36,28 +45,34 @@ Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng
### Desktop (≥ 1024px) — Dạng Bảng Lịch Tuần/Tháng
-- Hiển thị lịch làm việc dạng **table theo tuần** (mặc định), với khả năng chuyển sang **xem theo tháng**.
+- Hiển thị lịch làm việc dạng **table theo tuần** (mặc định), với khả năng
+ chuyển sang **xem theo tháng**.
- Mỗi cột đại diện cho một ngày trong tuần (Mon–Sun).
- Mỗi hàng đại diện cho một nhân viên hoặc một khung giờ.
- Các ca làm được hiển thị dưới dạng **card màu** trong ô tương ứng, gồm:
- Tên ca / Khung giờ (ví dụ: `08:00 – 12:00`)
- Số giờ làm & mức lương dự kiến (ví dụ: `4h · 120k`)
- Trạng thái: `Available`, `Registered`, `Approved Leave`, `Absent`
-- **Bộ lọc tuần/tháng** ở góc trên, cho phép điều hướng qua lại giữa các tuần/tháng.
+- **Bộ lọc tuần/tháng** ở góc trên, cho phép điều hướng qua lại giữa các
+ tuần/tháng.
- Hiển thị **tổng ngân sách tuần** (Weekly Budget) ở đầu bảng.
- Nhóm nhân viên theo **department/role** (ví dụ: Bar Staff, Janitors,...).
- Mỗi ca làm có thể click để xem chi tiết, chỉnh sửa hoặc xóa.
#### Chế Độ Xem Theo Tháng (Month View)
+
- Hiển thị dạng **calendar grid** (lưới 7 cột × ~5 hàng).
-- Mỗi ô ngày hiển thị số ca đã đăng ký hoặc dấu chấm màu trạng thái (tương tự ảnh tham khảo).
-- Cho phép nhân viên và manager tính toán ngày có thể nghỉ hoặc đăng ký ca xa hơn trong tháng.
+- Mỗi ô ngày hiển thị số ca đã đăng ký hoặc dấu chấm màu trạng thái (tương tự
+ ảnh tham khảo).
+- Cho phép nhân viên và manager tính toán ngày có thể nghỉ hoặc đăng ký ca xa
+ hơn trong tháng.
---
### Mobile (< 768px) — Dạng Lịch Dọc + Dot Indicator
-- Hiển thị **calendar theo tháng dạng nhỏ gọn** (compact calendar) ở đầu màn hình.
+- Hiển thị **calendar theo tháng dạng nhỏ gọn** (compact calendar) ở đầu màn
+ hình.
- Các ngày có ca làm được đánh dấu bằng **dot màu** phía dưới số ngày:
- 🟡 Vàng: Ca đang mở / khả dụng
- 🟢 Xanh lá: Ca đã được đăng ký
@@ -75,7 +90,7 @@ Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng
## Trạng Thái Ca Làm (Shift Status)
| Trạng Thái | Màu | Mô Tả |
-|----------------|-----------------|-----------------------------------|
+| -------------- | --------------- | --------------------------------- |
| Available | Xanh dương nhạt | Ca đang mở, chưa có ai đăng ký |
| Registered | Xanh dương đậm | Nhân viên đã đăng ký ca này |
| Approved Leave | Tím/Lavender | Nhân viên đã được duyệt nghỉ phép |
@@ -86,6 +101,7 @@ Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng
## Luồng Chức Năng Chính
### Staff — Đăng Ký Ca
+
1. Truy cập màn hình Register Shift.
2. Chọn tuần hoặc tháng muốn xem.
3. Xem các ca làm khả dụng (Available).
@@ -94,21 +110,26 @@ Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng
6. Ca chuyển sang trạng thái **Registered**.
### Manager — Tạo Ca Làm Mới
+
1. Vào giao diện dashboard của manager.
2. Vào giao diện lịch của nhóm/department.
3. Click vào ô ngày muốn tạo ca.
-4. Nhập thông tin: Khung giờ bắt đầu – kết thúc, số lượng nhân viên cần, mức lương.
+4. Nhập thông tin: Khung giờ bắt đầu – kết thúc, số lượng nhân viên cần, mức
+ lương.
5. Lưu → Ca hiển thị trên lịch với trạng thái **Available**.
### Xóa / Chỉnh Sửa Ca
+
- **Manager**: Có thể chỉnh sửa hoặc xóa bất kỳ ca nào của bất kỳ nhân viên nào.
-- **Staff**: Chỉ có thể hủy ca của bản thân, trong phạm vi thời gian cho phép (ví dụ: trước 24h so với giờ bắt đầu ca).
+- **Staff**: Chỉ có thể hủy ca của bản thân, trong phạm vi thời gian cho phép
+ (ví dụ: trước 24h so với giờ bắt đầu ca).
---
## Dữ Liệu & Logic
### Shift Slot Object
+
```json
{
"id": "shift_001",
@@ -119,9 +140,7 @@ Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng
"wage": 80,
"department": "Bar Staff",
"maxStaff": 2,
- "registeredStaff": [
- { "id": "staff_01", "name": "Carol Saragosa" }
- ],
+ "registeredStaff": [{ "id": "staff_01", "name": "Carol Saragosa" }],
"status": "registered"
}
```
@@ -131,5 +150,7 @@ Xây dựng tính năng **Register Shift** cho phép nhân viên xem và đăng
## Ghi Chú Bổ Sung
- Nhân viên **không được đăng ký 2 ca trùng giờ** trong cùng một ngày.
-- Hệ thống cần hiển thị **cảnh báo xung đột** khi nhân viên cố đăng ký ca bị trùng lịch.
-- Cần hỗ trợ **thông báo (notification)** khi ca làm bị thay đổi hoặc bị hủy bởi manager.
+- Hệ thống cần hiển thị **cảnh báo xung đột** khi nhân viên cố đăng ký ca bị
+ trùng lịch.
+- Cần hỗ trợ **thông báo (notification)** khi ca làm bị thay đổi hoặc bị hủy bởi
+ manager.
|