Compare commits

...

2 Commits

Author SHA1 Message Date
5f34855233 Merge branch 'dev' into demo
Some checks failed
ERP-Deploy-Demo / deploy-demo (push) Has been cancelled
2026-03-13 16:19:00 +08:00
bee8ecb55b [FIX] 修正盤調單明細插入時的欄位名稱錯誤並更新簡報/圖片處理套件 2026-03-13 16:18:13 +08:00
4 changed files with 7505 additions and 6605 deletions

View File

@@ -49,7 +49,7 @@ class AdjustService
if (abs($item->diff_qty) < 0.0001) continue;
$itemsToInsert[] = [
'inventory_adjust_doc_id' => $adjDoc->id,
'adjust_doc_id' => $adjDoc->id,
'product_id' => $item->product_id,
'batch_number' => $item->batch_number,
'qty_before' => $item->system_qty,
@@ -108,7 +108,7 @@ class AdjustService
$qtyBefore = $inventory ? $inventory->quantity : 0;
$itemsToInsert[] = [
'inventory_adjust_doc_id' => $doc->id,
'adjust_doc_id' => $doc->id,
'product_id' => $data['product_id'],
'batch_number' => $data['batch_number'] ?? null,
'qty_before' => $qtyBefore,

216
generate_pptx.cjs Normal file
View File

@@ -0,0 +1,216 @@
const pptxgen = require("pptxgenjs");
const React = require("react");
const ReactDOMServer = require("react-dom/server");
const sharp = require("sharp");
const {
LayoutDashboard,
Mail,
Cpu,
Layout,
BellRing,
Factory,
ShieldAlert,
Target,
Zap
} = require("lucide-react");
let pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.author = 'AI Assistant';
pres.title = '每週三的開發成果發表';
// Colors
const colors = {
primary: "36454F",
secondary: "F2F2F2",
accent: "028090",
textWhite: "FFFFFF",
textDark: "1E293B",
textMuted: "64748B"
};
// Icon rendering helper
function renderIconSvg(IconComponent, color = "#000000", size = 256) {
return ReactDOMServer.renderToStaticMarkup(
React.createElement(IconComponent, { color, size: String(size) })
);
}
async function iconToBase64Png(IconComponent, color, size = 256) {
const svg = renderIconSvg(IconComponent, color, size);
const pngBuffer = await sharp(Buffer.from(svg)).png().toBuffer();
return "image/png;base64," + pngBuffer.toString("base64");
}
pres.defineSlideMaster({
title: 'MASTER_TITLE', background: { color: colors.primary },
});
pres.defineSlideMaster({
title: 'MASTER_CONTENT', background: { color: colors.secondary },
});
async function generate() {
// ==========================================
// Slide 1: 封面 (Title Slide)
// ==========================================
let slide1 = pres.addSlide({ masterName: "MASTER_TITLE" });
slide1.addShape(pres.shapes.RECTANGLE, { x: 0, y: 2.8, w: 10, h: 0.1, fill: { color: colors.accent } });
slide1.addText("每週三的開發成果發表", {
x: 0.5, y: 1.5, w: 9, h: 1.2,
fontSize: 44, fontFace: "Arial Black", color: colors.textWhite,
align: "center", bold: true
});
slide1.addText("Star ERP & Star Cloud 核心功能、架構優化與系統穩定性提升", {
x: 0.5, y: 3.2, w: 9, h: 1,
fontSize: 20, fontFace: "Outfit", color: "CADCFC",
align: "center"
});
// ==========================================
// Slide 2: 本週核心亮點總覽 (Agenda)
// ==========================================
let slide2 = pres.addSlide({ masterName: "MASTER_CONTENT" });
slide2.addText("本週核心亮點總覽", { x: 0.5, y: 0.5, w: 9, h: 0.8, fontSize: 32, fontFace: "Arial Black", color: colors.primary, bold: true });
slide2.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 1.3, w: 7.5, h: 0.05, fill: { color: colors.accent } });
let card1Y = 2.2;
const cardShadow = { type: "outer", color: "000000", blur: 6, offset: 2, angle: 135, opacity: 0.1 };
// Card 1: UI
slide2.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: card1Y, w: 2.8, h: 2.7, fill: { color: colors.textWhite }, shadow: cardShadow });
const iconCloud = await iconToBase64Png(LayoutDashboard, "#" + colors.accent);
slide2.addImage({ data: iconCloud, x: 1.5, y: card1Y + 0.2, w: 0.6, h: 0.6 });
slide2.addText("UI 視覺重構", { x: 0.7, y: card1Y + 0.9, w: 2.4, h: 0.4, fontSize: 18, fontFace: "Arial", color: colors.accent, bold: true, align: "center" });
slide2.addText("Star Cloud 系統日誌大改造,全面導入極簡奢華風 UI。", { x: 0.7, y: card1Y + 1.4, w: 2.4, h: 1.2, fontSize: 14, fontFace: "Calibri", color: colors.textDark, align: "center", valign: "top" });
// Card 2: ERP
slide2.addShape(pres.shapes.RECTANGLE, { x: 3.6, y: card1Y, w: 2.8, h: 2.7, fill: { color: colors.textWhite }, shadow: cardShadow });
const iconErp = await iconToBase64Png(Mail, "#" + colors.accent);
slide2.addImage({ data: iconErp, x: 4.6, y: card1Y + 0.2, w: 0.6, h: 0.6 });
slide2.addText("系統提醒機制", { x: 3.8, y: card1Y + 0.9, w: 2.4, h: 0.4, fontSize: 18, fontFace: "Arial", color: colors.accent, bold: true, align: "center" });
slide2.addText("Star ERP 公共事業費提醒與生產工單損耗產出管理。", { x: 3.8, y: card1Y + 1.4, w: 2.4, h: 1.2, fontSize: 14, fontFace: "Calibri", color: colors.textDark, align: "center", valign: "top" });
// Card 3: Arch
slide2.addShape(pres.shapes.RECTANGLE, { x: 6.7, y: card1Y, w: 2.8, h: 2.7, fill: { color: colors.textWhite }, shadow: cardShadow });
const iconArch = await iconToBase64Png(Cpu, "#" + colors.accent);
slide2.addImage({ data: iconArch, x: 7.7, y: card1Y + 0.2, w: 0.6, h: 0.6 });
slide2.addText("底層核心架構", { x: 6.9, y: card1Y + 0.9, w: 2.4, h: 0.4, fontSize: 18, fontFace: "Arial", color: colors.accent, bold: true, align: "center" });
slide2.addText("修正閉包變數地雷並導入 SQL select 效能優化與多租戶隔離。", { x: 6.9, y: card1Y + 1.4, w: 2.4, h: 1.2, fontSize: 14, fontFace: "Calibri", color: colors.textDark, align: "center", valign: "top" });
// ==========================================
// Slide 3: 亮點 1 - Star Cloud 視覺與架構升級
// ==========================================
let slide3 = pres.addSlide({ masterName: "MASTER_CONTENT" });
slide3.addText("亮點 1: Star Cloud 視覺與架構升級", { x: 0.5, y: 0.5, w: 9, h: 0.8, fontSize: 32, fontFace: "Arial Black", color: colors.primary, bold: true });
slide3.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 1.3, w: 6.5, h: 0.05, fill: { color: colors.accent } });
slide3.addText("本週開發功能與 Demo", { x: 0.5, y: 1.8, w: 4.5, h: 0.5, fontSize: 24, fontFace: "Arial", color: colors.accent, bold: true });
slide3.addText("儀表板與系統日誌介面大改造", { x: 0.5, y: 2.5, w: 4.5, h: 0.4, fontSize: 18, fontFace: "Calibri", color: colors.textDark, bullet: true });
slide3.addText("移除舊版復古風,全面導入極簡奢華風、深色模式及 Outfit 字型", { x: 0.5, y: 3.0, w: 4.5, h: 0.6, fontSize: 18, fontFace: "Calibri", color: colors.textDark, bullet: true });
slide3.addText("顯著提升 SaaS 系統高級感", { x: 0.5, y: 3.7, w: 4.5, h: 0.4, fontSize: 18, fontFace: "Calibri", color: colors.textDark, bullet: true });
slide3.addShape(pres.shapes.RECTANGLE, { x: 5.2, y: 1.8, w: 4.3, h: 3, fill: { color: colors.primary }, shadow: { ...cardShadow, opacity: 0.2 } });
const iconZap = await iconToBase64Png(Zap, "#FFFFFF");
slide3.addImage({ data: iconZap, x: 5.7, y: 2.0, w: 0.4, h: 0.4 });
slide3.addText("技術邏輯", { x: 6.2, y: 2.0, w: 3.5, h: 0.5, fontSize: 22, fontFace: "Arial", color: colors.textWhite, bold: true });
slide3.addText("建構 IoT 高併發機台通訊架構", { x: 5.7, y: 2.6, w: 3.5, h: 0.4, fontSize: 16, fontFace: "Calibri", color: colors.textWhite, bullet: true });
slide3.addText("全面改用 Redis Queue 異步處理海量機台心跳與日誌回報", { x: 5.7, y: 3.1, w: 3.5, h: 0.6, fontSize: 16, fontFace: "Calibri", color: colors.textWhite, bullet: true });
// ==========================================
// Slide 4: 亮點 2 - Star ERP 公共事業費發信機制
// ==========================================
let slide4 = pres.addSlide({ masterName: "MASTER_CONTENT" });
slide4.addText("亮點 2: Star ERP 公共事業費發信機制", { x: 0.5, y: 0.5, w: 9, h: 0.8, fontSize: 32, fontFace: "Arial Black", color: colors.primary, bold: true });
slide4.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 1.3, w: 6.5, h: 0.05, fill: { color: colors.accent } });
slide4.addText("本週開發功能", { x: 0.5, y: 1.6, w: 9, h: 0.5, fontSize: 24, fontFace: "Arial", color: colors.accent, bold: true });
const iconBell = await iconToBase64Png(BellRing, "#" + colors.accent);
slide4.addImage({ data: iconBell, x: 2.0, y: 1.65, w: 0.4, h: 0.4 });
slide4.addText("實作公共事業費逾期提醒機制、租戶自訂通知設定及發送測試信功能。", { x: 0.5, y: 2.1, w: 9, h: 0.5, fontSize: 18, fontFace: "Calibri", color: colors.textDark });
let timelineY = 3.5;
slide4.addShape(pres.shapes.LINE, { x: 1, y: timelineY, w: 8, h: 0, line: { color: colors.primary, width: 4 } });
slide4.addShape(pres.shapes.OVAL, { x: 1.5, y: timelineY - 0.2, w: 0.4, h: 0.4, fill: { color: colors.accent } });
slide4.addText("前 7 天", { x: 1.0, y: timelineY + 0.3, w: 1.4, h: 0.5, fontSize: 14, fontFace: "Arial", align: "center", bold: true, color: colors.textDark });
slide4.addShape(pres.shapes.OVAL, { x: 3.8, y: timelineY - 0.2, w: 0.4, h: 0.4, fill: { color: colors.accent } });
slide4.addText("前 3 天", { x: 3.3, y: timelineY + 0.3, w: 1.4, h: 0.5, fontSize: 14, fontFace: "Arial", align: "center", bold: true, color: colors.textDark });
slide4.addShape(pres.shapes.OVAL, { x: 6.1, y: timelineY - 0.2, w: 0.4, h: 0.4, fill: { color: colors.accent } });
slide4.addText("到期日 (0 天)", { x: 5.6, y: timelineY + 0.3, w: 1.4, h: 0.5, fontSize: 14, fontFace: "Arial", align: "center", bold: true, color: colors.textDark });
slide4.addShape(pres.shapes.OVAL, { x: 8.4, y: timelineY - 0.2, w: 0.4, h: 0.4, fill: { color: "990011" } });
slide4.addText("逾期 (每日)", { x: 7.9, y: timelineY + 0.3, w: 1.4, h: 0.5, fontSize: 14, fontFace: "Arial", align: "center", bold: true, color: "990011" });
slide4.addText("附件防呆:實作公共事業費憑證附件上傳管理與前端防呆機制", { x: 0.5, y: 4.5, w: 9, h: 0.5, fontSize: 18, fontFace: "Calibri", color: colors.textDark, align: "center", italic: true });
// ==========================================
// Slide 5: 亮點 3 - Star ERP 生產工單耗損與產出管理
// ==========================================
let slide5 = pres.addSlide({ masterName: "MASTER_CONTENT" });
slide5.addText("亮點 3: Star ERP 生產工單耗損與產出管理", { x: 0.5, y: 0.5, w: 9, h: 0.8, fontSize: 32, fontFace: "Arial Black", color: colors.primary, bold: true });
slide5.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 1.3, w: 6.5, h: 0.05, fill: { color: colors.accent } });
slide5.addText("本週開發功能", { x: 0.5, y: 1.6, w: 9, h: 0.5, fontSize: 24, fontFace: "Arial", color: colors.accent, bold: true });
const iconFactory = await iconToBase64Png(Factory, "#" + colors.accent);
slide5.addImage({ data: iconFactory, x: 2.0, y: 1.65, w: 0.4, h: 0.4 });
slide5.addText("新增生產工單「實際產量」填寫與「耗損原因」紀錄。", { x: 0.5, y: 2.1, w: 9, h: 0.5, fontSize: 18, fontFace: "Calibri", color: colors.textDark });
slide5.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 2.8, w: 4.2, h: 2.2, fill: { color: colors.textWhite }, shadow: cardShadow });
slide5.addText("後端設計", { x: 0.7, y: 2.9, w: 3.8, h: 0.5, fontSize: 20, fontFace: "Arial", color: colors.accent, bold: true });
slide5.addText([
{ text: "新增資料庫欄位以儲存實際產量與耗損原因", options: { bullet: true, breakLine: true } },
{ text: "完善 API 狀態推進與實際產量/成本的計算邏輯", options: { bullet: true, breakLine: true } },
{ text: "修正完工入庫金額未計算問題", options: { bullet: true } }
], { x: 0.7, y: 3.4, w: 3.8, h: 1.4, fontSize: 16, fontFace: "Calibri", color: colors.textDark, valign: "top" });
slide5.addShape(pres.shapes.RECTANGLE, { x: 5.3, y: 2.8, w: 4.2, h: 2.2, fill: { color: colors.textWhite }, shadow: cardShadow });
slide5.addText("前端優化", { x: 5.5, y: 2.9, w: 3.8, h: 0.5, fontSize: 20, fontFace: "Arial", color: colors.accent, bold: true });
slide5.addText([
{ text: "完工入庫實作原生數字輸入框", options: { bullet: true, breakLine: true } },
{ text: "支援 step=1 加減功能", options: { bullet: true, breakLine: true } },
{ text: "加入嚴謹的資料驗證", options: { bullet: true } }
], { x: 5.5, y: 3.4, w: 3.8, h: 1.4, fontSize: 16, fontFace: "Calibri", color: colors.textDark, valign: "top" });
// ==========================================
// Slide 6: 深層技術挑戰與解法
// ==========================================
let slide6 = pres.addSlide({ masterName: "MASTER_CONTENT" });
slide6.addText("深層技術挑戰與解法", { x: 0.5, y: 0.5, w: 9, h: 0.8, fontSize: 32, fontFace: "Arial Black", color: colors.primary, bold: true });
slide6.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 1.3, w: 1, h: 0.05, fill: { color: colors.accent } });
slide6.addShape(pres.shapes.RECTANGLE, { x: 0.5, y: 1.8, w: 4.2, h: 2.8, fill: { color: "990011" }, shadow: { ...cardShadow, opacity: 0.2 } });
slide6.addText("日漸增長的效能隱患與閉包變數地雷", { x: 0.7, y: 2.0, w: 3.8, h: 0.8, fontSize: 20, fontFace: "Arial", color: colors.textWhite, bold: true });
slide6.addShape(pres.shapes.LINE, { x: 0.7, y: 2.8, w: 3.8, h: 0, line: { color: colors.textWhite, width: 2 } });
slide6.addText("全站 Service/Controller 加入 SQL select 具體欄位限制,配置租戶資料表索引 (Index);修正 PHP InventoryService 閉包參考失效的潛藏 Bug。", { x: 0.7, y: 3.0, w: 3.8, h: 1.4, fontSize: 16, fontFace: "Calibri", color: colors.textWhite, valign: "top" });
slide6.addShape(pres.shapes.RECTANGLE, { x: 5.3, y: 1.8, w: 4.2, h: 2.8, fill: { color: colors.accent }, shadow: { ...cardShadow, opacity: 0.2 } });
slide6.addText("跨租戶管理的安全顧慮", { x: 5.5, y: 2.0, w: 3.8, h: 0.8, fontSize: 20, fontFace: "Arial", color: colors.textWhite, bold: true });
slide6.addShape(pres.shapes.LINE, { x: 5.5, y: 2.8, w: 3.8, h: 0, line: { color: colors.textWhite, width: 2 } });
slide6.addText("強化與整理了開發與 Git 規範文件,隔離多租戶目錄被誤推的風險。", { x: 5.5, y: 3.0, w: 3.8, h: 1.4, fontSize: 16, fontFace: "Calibri", color: colors.textWhite, valign: "top" });
// ==========================================
// Slide 7: 未來計畫
// ==========================================
let slide7 = pres.addSlide({ masterName: "MASTER_TITLE" });
const iconTarget = await iconToBase64Png(Target, "#" + colors.accent);
slide7.addImage({ data: iconTarget, x: 4.8, y: 0.8, w: 0.5, h: 0.5 });
slide7.addText("未來計畫 (Next Steps)", { x: 0.5, y: 1.5, w: 9, h: 1.0, fontSize: 36, fontFace: "Arial Black", color: colors.accent, align: "center", bold: true });
slide7.addText("開始開發 Star Cloud維護 ERP 系統", { x: 0.5, y: 2.8, w: 9, h: 1.5, fontSize: 28, fontFace: "Arial", color: colors.textWhite, align: "center" });
// Save
pres.writeFile({ fileName: "/home/mama/projects/demo_day_presentation.pptx" }).then(fileName => {
console.log(`created file: ${fileName}`);
});
}
generate().catch(err => {
console.error(err);
process.exit(1);
});

684
package-lock.json generated
View File

@@ -33,12 +33,14 @@
"jsbarcode": "^3.12.1",
"lodash": "^4.17.21",
"lucide-react": "^0.562.0",
"pptxgenjs": "^4.0.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-hot-toast": "^2.6.0",
"react-markdown": "^10.1.0",
"recharts": "^3.7.0",
"remark-gfm": "^4.0.1",
"sharp": "^0.34.5",
"sonner": "^2.0.7",
"tailwind-merge": "^3.4.0"
},
@@ -320,6 +322,16 @@
"node": ">=6.9.0"
}
},
"node_modules/@emnapi/runtime": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
"integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@esbuild/aix-ppc64": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
@@ -774,6 +786,471 @@
"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
"license": "MIT"
},
"node_modules/@img/colour": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
"integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@img/sharp-darwin-arm64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
"integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
"cpu": [
"arm64"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-darwin-arm64": "1.2.4"
}
},
"node_modules/@img/sharp-darwin-x64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
"integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
"cpu": [
"x64"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-darwin-x64": "1.2.4"
}
},
"node_modules/@img/sharp-libvips-darwin-arm64": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
"integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
"cpu": [
"arm64"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"darwin"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-darwin-x64": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
"integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
"cpu": [
"x64"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"darwin"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-arm": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
"integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
"cpu": [
"arm"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-arm64": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
"integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
"cpu": [
"arm64"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-ppc64": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
"integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
"cpu": [
"ppc64"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-riscv64": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
"integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
"cpu": [
"riscv64"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-s390x": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
"integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
"cpu": [
"s390x"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-x64": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
"integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
"cpu": [
"x64"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linuxmusl-arm64": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
"integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
"cpu": [
"arm64"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linuxmusl-x64": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
"integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
"cpu": [
"x64"
],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
"linux"
],
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-linux-arm": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
"integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
"cpu": [
"arm"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-arm": "1.2.4"
}
},
"node_modules/@img/sharp-linux-arm64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
"integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
"cpu": [
"arm64"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-arm64": "1.2.4"
}
},
"node_modules/@img/sharp-linux-ppc64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
"integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
"cpu": [
"ppc64"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-ppc64": "1.2.4"
}
},
"node_modules/@img/sharp-linux-riscv64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
"integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
"cpu": [
"riscv64"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-riscv64": "1.2.4"
}
},
"node_modules/@img/sharp-linux-s390x": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
"integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
"cpu": [
"s390x"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-s390x": "1.2.4"
}
},
"node_modules/@img/sharp-linux-x64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
"integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
"cpu": [
"x64"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-x64": "1.2.4"
}
},
"node_modules/@img/sharp-linuxmusl-arm64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
"integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
"cpu": [
"arm64"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
}
},
"node_modules/@img/sharp-linuxmusl-x64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
"integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
"cpu": [
"x64"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linuxmusl-x64": "1.2.4"
}
},
"node_modules/@img/sharp-wasm32": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
"integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
"cpu": [
"wasm32"
],
"license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
"optional": true,
"dependencies": {
"@emnapi/runtime": "^1.7.0"
},
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-arm64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
"integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-ia32": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
"integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
"cpu": [
"ia32"
],
"license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-x64": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
"integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND LGPL-3.0-or-later",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@inertiajs/core": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.3.4.tgz",
@@ -3291,6 +3768,12 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"license": "MIT"
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -3499,7 +3982,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": ">=8"
@@ -3972,6 +4454,33 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/https": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz",
"integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==",
"license": "ISC"
},
"node_modules/image-size": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz",
"integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==",
"license": "MIT",
"dependencies": {
"queue": "6.0.2"
},
"bin": {
"image-size": "bin/image-size.js"
},
"engines": {
"node": ">=16.x"
}
},
"node_modules/immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"license": "MIT"
},
"node_modules/immer": {
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz",
@@ -3982,6 +4491,12 @@
"url": "https://opencollective.com/immer"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
"node_modules/inline-style-parser": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz",
@@ -4063,6 +4578,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"license": "MIT"
},
"node_modules/jiti": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
@@ -4109,6 +4630,18 @@
"node": ">=6"
}
},
"node_modules/jszip": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"license": "(MIT OR GPL-3.0-or-later)",
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"setimmediate": "^1.0.5"
}
},
"node_modules/laravel-precognition": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/laravel-precognition/-/laravel-precognition-1.0.0.tgz",
@@ -4139,6 +4672,15 @@
"vite": "^7.0.0"
}
},
"node_modules/lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"license": "MIT",
"dependencies": {
"immediate": "~3.0.5"
}
},
"node_modules/lightningcss": {
"version": "1.30.2",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz",
@@ -5366,6 +5908,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"license": "(MIT AND Zlib)"
},
"node_modules/parse-entities": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
@@ -5498,6 +6046,39 @@
"node": ">=4"
}
},
"node_modules/pptxgenjs": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pptxgenjs/-/pptxgenjs-4.0.1.tgz",
"integrity": "sha512-TeJISr8wouAuXw4C1F/mC33xbZs/FuEG6nH9FG1Zj+nuPcGMP5YRHl6X+j3HSUnS1f3at6k75ZZXPMZlA5Lj9A==",
"license": "MIT",
"dependencies": {
"@types/node": "^22.8.1",
"https": "^1.0.0",
"image-size": "^1.2.1",
"jszip": "^3.10.1"
}
},
"node_modules/pptxgenjs/node_modules/@types/node": {
"version": "22.19.15",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz",
"integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"node_modules/pptxgenjs/node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"license": "MIT"
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"license": "MIT"
},
"node_modules/property-information": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
@@ -5529,6 +6110,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/queue": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
"integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
"license": "MIT",
"dependencies": {
"inherits": "~2.0.3"
}
},
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -5709,6 +6299,21 @@
}
}
},
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/recharts": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/recharts/-/recharts-3.7.0.tgz",
@@ -5888,6 +6493,12 @@
"tslib": "^2.1.0"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT"
},
"node_modules/scheduler": {
"version": "0.23.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
@@ -5906,6 +6517,68 @@
"semver": "bin/semver.js"
}
},
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"license": "MIT"
},
"node_modules/sharp": {
"version": "0.34.5",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
"integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@img/colour": "^1.0.0",
"detect-libc": "^2.1.2",
"semver": "^7.7.3"
},
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-darwin-arm64": "0.34.5",
"@img/sharp-darwin-x64": "0.34.5",
"@img/sharp-libvips-darwin-arm64": "1.2.4",
"@img/sharp-libvips-darwin-x64": "1.2.4",
"@img/sharp-libvips-linux-arm": "1.2.4",
"@img/sharp-libvips-linux-arm64": "1.2.4",
"@img/sharp-libvips-linux-ppc64": "1.2.4",
"@img/sharp-libvips-linux-riscv64": "1.2.4",
"@img/sharp-libvips-linux-s390x": "1.2.4",
"@img/sharp-libvips-linux-x64": "1.2.4",
"@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
"@img/sharp-libvips-linuxmusl-x64": "1.2.4",
"@img/sharp-linux-arm": "0.34.5",
"@img/sharp-linux-arm64": "0.34.5",
"@img/sharp-linux-ppc64": "0.34.5",
"@img/sharp-linux-riscv64": "0.34.5",
"@img/sharp-linux-s390x": "0.34.5",
"@img/sharp-linux-x64": "0.34.5",
"@img/sharp-linuxmusl-arm64": "0.34.5",
"@img/sharp-linuxmusl-x64": "0.34.5",
"@img/sharp-wasm32": "0.34.5",
"@img/sharp-win32-arm64": "0.34.5",
"@img/sharp-win32-ia32": "0.34.5",
"@img/sharp-win32-x64": "0.34.5"
}
},
"node_modules/sharp/node_modules/semver": {
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/shell-quote": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
@@ -6020,6 +6693,15 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",

View File

@@ -48,12 +48,14 @@
"jsbarcode": "^3.12.1",
"lodash": "^4.17.21",
"lucide-react": "^0.562.0",
"pptxgenjs": "^4.0.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-hot-toast": "^2.6.0",
"react-markdown": "^10.1.0",
"recharts": "^3.7.0",
"remark-gfm": "^4.0.1",
"sharp": "^0.34.5",
"sonner": "^2.0.7",
"tailwind-merge": "^3.4.0"
}