// Name: טיפים לבטיחות אש // Description: בחר קטגוריה וקבל טיפים מהירים לבטיחות אש, עם אפשרות להעתקה ושמירה כקובץ. // Author: TEMAM59 // GitHub: TEMAM59 import "@johnlindquist/kit" const categories = [ { name: "בית", description: "טיפים למניעת שריפות בבית" }, { name: "מטבח", description: "בטיחות אש בזמן בישול" }, { name: "משרד", description: "שמירה על סביבת עבודה בטוחה" }, { name: "קמפינג", description: "הדלקת מדורות ובטיחות בשטח" }, { name: "רכב", description: "מניעת שריפות בכלי רכב" }, { name: "כללי", description: "טיפים חשובים לכל מצב" }, { name: "כל הקטגוריות", description: "איסוף טיפים מכל הקטגוריות" }, ] const tipsMap: Record<string, string[]> = { "בית": [ "התקינו גלאי עשן ובדקו סוללות אחת לחודש.", "החזיקו מטף כיבוי נגיש ובדקו תוקף מדי שנה.", "אל תעמיסו שקעים ומפצלים; השתמשו במפסק פחת תקין.", "הרחיקו חומרים דליקים ממקורות חום (תנורים/רדיאטורים/נרות).", "תכננו נתיב מילוט וקבעו נקודת מפגש מחוץ לבית." ], "מטבח": [ "אל תשאירו בישול ללא השגחה, במיוחד טיגון בשמן.", "החזיקו מכסה בקרבת מקום כדי לחנוק להבת שמן. לעולם אל תשפכו מים על שמן בוער.", "נקו שומן מצטבר מתנור ומקולט אדים באופן שוטף.", "הרחקת מגבות, נייר סופג וחומרים דליקים מהכיריים.", "לאחר השימוש: כבו כיריים ובדקו סגירת ברז הגז." ], "משרד": [ "השאירו יציאות חירום נקיות וחופשיות ממכשולים.", "נתקו מטענים שאינם בשימוש והימנעו מהארכת כבלים מיותרת.", "החליפו כבלים פגומים מיד; אל תשתמשו בכבל חשוף.", "תרגלו פינוי חירום תקופתי והכירו את מיקומי המטפים.", "שמרו מסמכים חשובים בעותק דיגיטלי וגיבוי מחוץ למשרד." ], "קמפינג": [ "הדליקו מדורה רק במקומות מורשים ושמרו מרחק מצמחייה יבשה.", "החזיקו מים/חול על מנת לכבות את האש במהירות במקרה הצורך.", "כיבוי מלא לפני עזיבה: שפכו מים, ערבבו אפר וודאו שהאפר קר.", "אל תדליקו אש ברוח חזקה; הקפידו על תנאי מזג האוויר.", "אחסנו דלק ומציתים הרחק מהאש ובמיכלים תקניים." ], "רכב": [ "החזיקו מטף רכב תקני ונגיש ובדקו תוקפו.", "אל תשאירו מטענים מחוברים ללא השגחה, במיוחד בשמש.", "אל תשאירו תרסיסים/מצתים בתא סגור בחום קיצוני.", "בכל ריח שרוף/עשן – עצרו בבטחה, התרחקו וחייגו 102.", "ברכב חשמלי – פעלו לפי הוראות היצרן והימנעו מטעינה במפצלים זולים." ], "כללי": [ "במקרה חירום חייגו 102 (כיבוי אש).", "אם יש עשן סמיך – זחלו נמוך, האוויר צלול יותר סמוך לרצפה.", "אם הבגדים נדלקו – עצור, שכב, התגלגל (Stop, Drop, Roll).", "אל תחזרו למבנה בוער לקחת חפצים.", "דווחו לאחרים והכוונו את כוחות החירום למיקום מדויק." ] } const selected = await arg("בחר קטגוריה לטיפים לבטיחות אש", categories as any) const allKeys = Object.keys(tipsMap) let tips: string[] = [] if (selected === "כל הקטגוריות") { const set = new Set<string>() for (const key of allKeys) { for (const tip of tipsMap[key]) set.add(tip) } tips = Array.from(set) } else { tips = tipsMap[selected] || [] } if (!tips.length) { await div(md(`לא נמצאו טיפים לקטגוריה: ${selected}`)) exit() } const dateStr = formatDate(new Date(), "yyyy-MM-dd") const title = `טיפים לבטיחות אש — ${selected}` const contentMd = `# ${title} תאריך: ${dateStr} ${tips.map(t => `- ${t}`).join("\n")} ` const fileName = `טיפים-בטיחות-אש-${selected}-${dateStr}.md` await div( md(contentMd), [ { name: "העתק ללוח", shortcut: `${cmd}+c`, onAction: async () => { await copy(contentMd) await toast("הטיפים הועתקו ללוח") }, }, { name: "שמור לשולחן העבודה (MD)", shortcut: `${cmd}+s`, onAction: async () => { const filePath = home("Desktop", fileName) await writeFile(filePath, contentMd, "utf8") await revealFile(filePath) await toast("הקובץ נשמר בשולחן העבודה") }, }, { name: "סגור", shortcut: "esc", onAction: async () => { submit(null) }, close: true, }, ] )// Name: טיפים לבטיחות אש // Description: בחר קטגוריה וקבל טיפים מהירים לבטיחות אש, עם אפשרות להעתקה ושמירה כקובץ. // Author: TEMAM59 // GitHub: TEMAM59 import "@johnlindquist/kit" // מקור הטיפים כ-map מוקפא לסכמת טיפוס מוצקה ובטוחה const tipsMap = { בית: [ "התקינו גלאי עשן ובדקו סוללות אחת לחודש.", "החזיקו מטף כיבוי נגיש ובדקו תוקף מדי שנה.", "אל תעמיסו שקעים ומפצלים; השתמשו במפסק פחת תקין.", "הרחיקו חומרים דליקים ממקורות חום (תנורים/רדיאטורים/נרות).", "תכננו נתיב מילוט וקבעו נקודת מפגש מחוץ לבית.", ], מטבח: [ "אל תשאירו בישול ללא השגחה, במיוחד טיגון בשמן.", "החזיקו מכסה בקרבת מקום כדי לחנוק להבת שמן. לעולם אל תשפכו מים על שמן בוער.", "נקו שומן מצטבר מתנור ומקולט אדים באופן שוטף.", "הרחקת מגבות, נייר סופג וחומרים דליקים מהכיריים.", "לאחר השימוש: כבו כיריים ובדקו סגירת ברז הגז.", ], משרד: [ "השאירו יציאות חירום נקיות וחופשיות ממכשולים.", "נתקו מטענים שאינם בשימוש והימנעו מהארכת כבלים מיותרת.", "החליפו כבלים פגומים מיד; אל תשתמשו בכבל חשוף.", "תרגלו פינוי חירום תקופתי והכירו את מיקומי המטפים.", "שמרו מסמכים חשובים בעותק דיגיטלי וגיבוי מחוץ למשרד.", ], קמפינג: [ "הדליקו מדורה רק במקומות מורשים ושמרו מרחק מצמחייה יבשה.", "החזיקו מים/חול על מנת לכבות את האש במהירות במקרה הצורך.", "כיבוי מלא לפני עזיבה: שפכו מים, ערבבו אפר וודאו שהאפר קר.", "אל תדליקו אש ברוח חזקה; הקפידו על תנאי מזג האוויר.", "אחסנו דלק ומציתים הרחק מהאש ובמיכלים תקניים.", ], רכב: [ "החזיקו מטף רכב תקני ונגיש ובדקו תוקפו.", "אל תשאירו מטענים מחוברים ללא השגחה, במיוחד בשמש.", "אל תשאירו תרסיסים/מצתים בתא סגור בחום קיצוני.", "בכל ריח שרוף/עשן – עצרו בבטחה, התרחקו וחייגו 102.", "ברכב חשמלי – פעלו לפי הוראות היצרן והימנעו מטעינה במפצלים זולים.", ], כללי: [ "במקרה חירום חייגו 102 (כיבוי אש).", "אם יש עשן סמיך – זחלו נמוך, האוויר צלול יותר סמוך לרצפה.", "אם הבגדים נדלקו – עצור, שכב, התגלגל (Stop, Drop, Roll).", "אל תחזרו למבנה בוער לקחת חפצים.", "דווחו לאחרים והכוונו את כוחות החירום למיקום מדויק.", ], } as const type CategoryKey = keyof typeof tipsMap const ALL_CATEGORIES = "כל הקטגוריות" as const // בחירת קטגוריה עם טיפוס מחמיר: הערך המוחזר הוא value של הבחירה const categories: Choice<string>[] = [ { name: "בית", description: "טיפים למניעת שריפות בבית", value: "בית" }, { name: "מטבח", description: "בטיחות אש בזמן בישול", value: "מטבח" }, { name: "משרד", description: "שמירה על סביבת עבודה בטוחה", value: "משרד" }, { name: "קמפינג", description: "הדלקת מדורות ובטיחות בשטח", value: "קמפינג" }, { name: "רכב", description: "מניעת שריפות בכלי רכב", value: "רכב" }, { name: "כללי", description: "טיפים חשובים לכל מצב", value: "כללי" }, { name: "כל הקטגוריות", description: "איסוף טיפים מכל הקטגוריות", value: ALL_CATEGORIES }, ] // type guard מהיר ובטוח למפתח קיים ב-tipsMap const isCategoryKey = (k: string): k is CategoryKey => Object.prototype.hasOwnProperty.call(tipsMap, k) // יצירת רשימת טיפים בהתאם לבחירה (כולל איחוד כל הקטגוריות ללא כפילויות) const getTipsForSelection = (selection: CategoryKey | typeof ALL_CATEGORIES): string[] => { if (selection === ALL_CATEGORIES) { // שימוש ב-Set להסרת כפילויות ביעילות const set = new Set<string>() for (const key of Object.keys(tipsMap) as CategoryKey[]) { for (const tip of tipsMap[key]) set.add(tip) } return Array.from(set) } return [...tipsMap[selection]] } // הרצת בחירת הקטגוריה עם טיפול בבריחה (Escape) let selection: string | undefined try { selection = await arg<string>("בחר קטגוריה לטיפים לבטיחות אש", categories) } catch { // המשתמש ביטל את הבחירה exit() } if (!selection) exit() // בדיקת תקינות הבחירה והרכבת רשימת הטיפים const tips = selection === ALL_CATEGORIES ? getTipsForSelection(ALL_CATEGORIES) : isCategoryKey(selection) ? getTipsForSelection(selection) : [] if (!tips.length) { await div(md(`לא נמצאו טיפים לקטגוריה: ${selection}`)) exit() } // בניית התוכן להצגה/שמירה const dateStr = formatDate(new Date(), "yyyy-MM-dd") const title = `טיפים לבטיחות אש — ${selection}` const contentMd = [ `# ${title}`, ``, `תאריך: ${dateStr}`, ``, ...tips.map(t => `- ${t}`), ].join("\n") // שם קובץ קריא ותואם לבחירה const fileName = `טיפים-בטיחות-אש-${selection}-${dateStr}.md` // הצגה עם פעולות: העתקה, שמירה, סגירה await div(md(contentMd), [ { name: "העתק ללוח", shortcut: `${cmd}+c`, onAction: async () => { try { await copy(contentMd) await toast("הטיפים הועתקו ללוח") } catch (err) { warn(`שגיאה בהעתקה: ${String(err)}`) await toast("אירעה שגיאה בהעתקה ללוח") } }, }, { name: "שמור לשולחן העבודה (MD)", shortcut: `${cmd}+s`, onAction: async () => { try { const filePath = home("Desktop", fileName) await writeFile(filePath, contentMd, "utf8") await revealFile(filePath) await toast("הקובץ נשמר בשולחן העבודה") } catch (err) { warn(`שגיאה בשמירת הקובץ: ${String(err)}`) await toast("אירעה שגיאה בשמירת הקובץ") } }, }, { name: "סגור", shortcut: "esc", onAction: async () => { submit(null) }, close: true, }, ])