[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G2ABFCF59HCEWQH7HPWRWZ":3,"skill-same:01M6G2ABFCF59HCEWQH7HPWRWZ":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6G2ABFCF59HCEWQH7HPWRWZ","frontend-slides",null,"从零开始或通过转换PowerPoint文件创建令人惊艳、动画丰富的HTML演示文稿。当用户想要构建演示文稿、将PPT\u002FPPTX转换为网页格式，或为演讲\u002F推介创建幻灯片时使用。帮助非设计师通过视觉探索而非抽象选择发现他们的美学。","oabdelmaksoud\u002FAgention","oabdelmaksoud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F50699149?v=4","01M6D5CVVN778ZCDP1WHS816SP","Omar Abdelmaksoud","01M6D8A4TE76V3DCSH3D94VG1V",2,"MIT","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Ffrontend-slides\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000003","演示文稿","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[27,28,29,30,31,32,33,34],"frontend","slides","frontend slides","pptx","design","演示","动画","文件","2026-11-10 10:12:30",false,"---\nname: frontend-slides\ndescription: 从零开始或通过转换PowerPoint文件创建令人惊艳、动画丰富的HTML演示文稿。当用户想要构建演示文稿、将PPT\u002FPPTX转换为网页格式，或为演讲\u002F推介创建幻灯片时使用。帮助非设计师通过视觉探索而非抽象选择发现他们的美学。\norigin: ECC\n---\n\n# 前端幻灯片\n\n创建零依赖、动画丰富的 HTML 演示文稿，完全在浏览器中运行。\n\n受 zarazhangrui（鸣谢：@zarazhangrui）作品中展示的视觉探索方法的启发。\n\n## 何时启用\n\n* 创建演讲文稿、推介文稿、研讨会文稿或内部演示文稿时\n* 将 `.ppt` 或 `.pptx` 幻灯片转换为 HTML 演示文稿时\n* 改进现有 HTML 演示文稿的布局、动效或排版时\n* 与尚不清楚其设计偏好的用户一起探索演示文稿风格时\n\n## 不可妥协的原则\n\n1. **零依赖**：默认使用一个包含内联 CSS 和 JS 的自包含 HTML 文件。\n2. **必须适配视口**：每张幻灯片必须适配一个视口，内部不允许滚动。\n3. **展示，而非描述**：使用视觉预览，而非抽象的风格问卷。\n4. **独特设计**：避免通用的紫色渐变、白色背景加 Inter 字体、模板化的文稿外观。\n5. **生产质量**：保持代码注释清晰、可访问、响应式且性能良好。\n\n在生成之前，请阅读 `STYLE_PRESETS.md` 以了解视口安全的 CSS 基础、密度限制、预设目录和 CSS 陷阱。\n\n## 工作流程\n\n### 1. 检测模式\n\n选择一条路径：\n\n* **新演示文稿**：用户有主题、笔记或完整草稿\n* **PPT 转换**：用户有 `.ppt` 或 `.pptx`\n* **增强**：用户已有 HTML 幻灯片并希望改进\n\n### 2. 发现内容\n\n只询问最低限度的必要信息：\n\n* 目的：推介、教学、会议演讲、内部更新\n* 长度：短 (5-10张)、中 (10-20张)、长 (20+张)\n* 内容状态：已完成文案、粗略笔记、仅主题\n\n如果用户有内容，请他们在进行样式设计前粘贴内容。\n\n### 3. 发现风格\n\n默认采用视觉探索方式。\n\n如果用户已经知道所需的预设，则跳过预览并直接使用。\n\n否则：\n\n1. 询问文稿应营造何种感觉：印象深刻、充满活力、专注、激发灵感。\n2. 在 `.ecc-design\u002Fslide-previews\u002F` 中生成 **3 个单幻灯片预览文件**。\n3. 每个预览必须是自包含的，清晰地展示排版\u002F色彩\u002F动效，并且幻灯片内容大约保持在 100 行以内。\n4. 询问用户保留哪个预览或混合哪些元素。\n\n在将情绪映射到风格时，请使用 `STYLE_PRESETS.md` 中的预设指南。\n\n### 4. 构建演示文稿\n\n输出以下之一：\n\n* `presentation.html`\n* `[presentation-name].html`\n\n仅当文稿包含提取的或用户提供的图像时，才使用 `assets\u002F` 文件夹。\n\n必需的结构：\n\n* 语义化的幻灯片部分\n* 来自 `STYLE_PRESETS.md` 的视口安全的 CSS 基础\n* 用于主题值的 CSS 自定义属性\n* 用于键盘、滚轮和触摸导航的演示文稿控制器类\n* 用于揭示动画的 Intersection Observer\n* 支持减少动效\n\n### 5. 强制执行视口适配\n\n将此视为硬性规定。\n\n规则：\n\n* 每个 `.slide` 必须使用 `height: 100vh; height: 100dvh; overflow: hidden;`\n* 所有字体和间距必须随 `clamp()` 缩放\n* 当内容无法适配时，将其拆分为多张幻灯片\n* 切勿通过将文本缩小到可读尺寸以下来解决溢出问题\n* 绝不允许幻灯片内部出现滚动条\n\n使用 `STYLE_PRESETS.md` 中的密度限制和强制性 CSS 代码块。\n\n### 6. 验证\n\n在这些尺寸下检查完成的文稿：\n\n* 1920x1080\n* 1280x720\n* 768x1024\n* 375x667\n* 667x375\n\n如果可以使用浏览器自动化，请使用它来验证没有幻灯片溢出且键盘导航正常工作。\n\n### 7. 交付\n\n在交付时：\n\n* 除非用户希望保留，否则删除临时预览文件\n* 在有用时使用适合当前平台的开源工具打开文稿\n* 总结文件路径、使用的预设、幻灯片数量以及简单的主题自定义点\n\n为当前操作系统使用正确的开源工具：\n\n* macOS: `open file.html`\n* Linux: `xdg-open file.html`\n* Windows: `start \"\" file.html`\n\n## PPT \u002F PPTX 转换\n\n对于 PowerPoint 转换：\n\n1. 优先使用 `python3` 和 `python-pptx` 来提取文本、图像和备注。\n2. 如果 `python-pptx` 不可用，询问是安装它还是回退到基于手动\u002F导出的工作流程。\n3. 保留幻灯片顺序、演讲者备注和提取的资源。\n4. 提取后，运行与新演示文稿相同的风格选择工作流程。\n\n保持转换跨平台。当 Python 可以完成任务时，不要依赖仅限 macOS 的工具。\n\n## 实现要求\n\n### HTML \u002F CSS\n\n* 除非用户明确希望使用多文件项目，否则使用内联 CSS 和 JS。\n* 字体可以来自 Google Fonts 或 Fontshare。\n* 优先使用氛围背景、强烈的字体层次结构和清晰的视觉方向。\n* 使用抽象形状、渐变、网格、噪点和几何图形，而非插图。\n\n### JavaScript\n\n包含：\n\n* 键盘导航\n* 触摸\u002F滑动导航\n* 鼠标滚轮导航\n* 进度指示器或幻灯片索引\n* 进入时触发的揭示动画\n\n### 可访问性\n\n* 使用语义化结构 (`main`, `section`, `nav`)\n* 保持对比度可读\n* 支持仅键盘导航\n* 尊重 `prefers-reduced-motion`\n\n## 内容密度限制\n\n除非用户明确要求更密集的幻灯片且可读性仍然保持，否则使用以下最大值：\n\n| 幻灯片类型 | 限制 |\n|------------|-------|\n| 标题 | 1 个标题 + 1 个副标题 + 可选标语 |\n| 内容 | 1 个标题 + 4-6 个要点或 2 个短段落 |\n| 功能网格 | 最多 6 张卡片 |\n| 代码 | 最多 8-10 行 |\n| 引用 | 1 条引用 + 出处 |\n| 图像 | 1 张受视口约束的图像 |\n\n## 反模式\n\n* 没有视觉标识的通用初创公司渐变\n* 除非是特意采用编辑风格，否则避免系统字体文稿\n* 冗长的要点列表\n* 需要滚动的代码块\n* 在短屏幕上会损坏的固定高度内容框\n* 无效的否定 CSS 函数，如 `-clamp(...)`\n\n## 相关 ECC 技能\n\n* `frontend-patterns` 用于围绕文稿的组件和交互模式\n* `liquid-glass-design` 当演示文稿有意借鉴苹果玻璃美学时\n* `e2e-testing` 如果您需要为最终文稿进行自动化浏览器验证\n\n## 交付清单\n\n* 演示文稿可在浏览器中从本地文件运行\n* 每张幻灯片适配视口，无需滚动\n* 风格独特且有意图\n* 动画有意义，不喧闹\n* 尊重减少动效设置\n* 在交付时解释文件路径和自定义点\n","# 前端幻灯片\n\n创建零依赖、动画丰富的 HTML 演示文稿，完全在浏览器中运行。\n\n受 zarazhangrui（鸣谢：@zarazhangrui）作品中展示的视觉探索方法的启发。\n\n## 何时启用\n\n* 创建演讲文稿、推介文稿、研讨会文稿或内部演示文稿时\n* 将 `.ppt` 或 `.pptx` 幻灯片转换为 HTML 演示文稿时\n* 改进现有 HTML 演示文稿的布局、动效或排版时\n* 与尚不清楚其设计偏好的用户一起探索演示文稿风格时\n\n## 不可妥协的原则\n\n1. **零依赖**：默认使用一个包含内联 CSS 和 JS 的自包含 HTML 文件。\n2. **必须适配视口**：每张幻灯片必须适配一个视口，内部不允许滚动。\n3. **展示，而非描述**：使用视觉预览，而非抽象的风格问卷。\n4. **独特设计**：避免通用的紫色渐变、白色背景加 Inter 字体、模板化的文稿外观。\n5. **生产质量**：保持代码注释清晰、可访问、响应式且性能良好。\n\n在生成之前，请阅读 `STYLE_PRESETS.md` 以了解视口安全的 CSS 基础、密度限制、预设目录和 CSS 陷阱。\n\n## 工作流程\n\n### 1. 检测模式\n\n选择一条路径：\n\n* **新演示文稿**：用户有主题、笔记或完整草稿\n* **PPT 转换**：用户有 `.ppt` 或 `.pptx`\n* **增强**：用户已有 HTML 幻灯片并希望改进\n\n### 2. 发现内容\n\n只询问最低限度的必要信息：\n\n* 目的：推介、教学、会议演讲、内部更新\n* 长度：短 (5-10张)、中 (10-20张)、长 (20+张)\n* 内容状态：已完成文案、粗略笔记、仅主题\n\n如果用户有内容，请他们在进行样式设计前粘贴内容。\n\n### 3. 发现风格\n\n默认采用视觉探索方式。\n\n如果用户已经知道所需的预设，则跳过预览并直接使用。\n\n否则：\n\n1. 询问文稿应营造何种感觉：印象深刻、充满活力、专注、激发灵感。\n2. 在 `.ecc-design\u002Fslide-previews\u002F` 中生成 **3 个单幻灯片预览文件**。\n3. 每个预览必须是自包含的，清晰地展示排版\u002F色彩\u002F动效，并且幻灯片内容大约保持在 100 行以内。\n4. 询问用户保留哪个预览或混合哪些元素。\n\n在将情绪映射到风格时，请使用 `STYLE_PRESETS.md` 中的预设指南。\n\n### 4. 构建演示文稿\n\n输出以下之一：\n\n* `presentation.html`\n* `[presentation-name].html`\n\n仅当文稿包含提取的或用户提供的图像时，才使用 `assets\u002F` 文件夹。\n\n必需的结构：\n\n* 语义化的幻灯片部分\n* 来自 `STYLE_PRESETS.md` 的视口安全的 CSS 基础\n* 用于主题值的 CSS 自定义属性\n* 用于键盘、滚轮和触摸导航的演示文稿控制器类\n* 用于揭示动画的 Intersection Observer\n* 支持减少动效\n\n### 5. 强制执行视口适配\n\n将此视为硬性规定。\n\n规则：\n\n* 每个 `.slide` 必须使用 `height: 100vh; height: 100dvh; overflow: hidden;`\n* 所有字体和间距必须随 `clamp()` 缩放\n* 当内容无法适配时，将其拆分为多张幻灯片\n* 切勿通过将文本缩小到可读尺寸以下来解决溢出问题\n* 绝不允许幻灯片内部出现滚动条\n\n使用 `STYLE_PRESETS.md` 中的密度限制和强制性 CSS 代码块。\n\n### 6. 验证\n\n在这些尺寸下检查完成的文稿：\n\n* 1920x1080\n* 1280x720\n* 768x1024\n* 375x667\n* 667x375\n\n如果可以使用浏览器自动化，请使用它来验证没有幻灯片溢出且键盘导航正常工作。\n\n### 7. 交付\n\n在交付时：\n\n* 除非用户希望保留，否则删除临时预览文件\n* 在有用时使用适合当前平台的开源工具打开文稿\n* 总结文件路径、使用的预设、幻灯片数量以及简单的主题自定义点\n\n为当前操作系统使用正确的开源工具：\n\n* macOS: `open file.html`\n* Linux: `xdg-open file.html`\n* Windows: `start \"\" file.html`\n\n## PPT \u002F PPTX 转换\n\n对于 PowerPoint 转换：\n\n1. 优先使用 `python3` 和 `python-pptx` 来提取文本、图像和备注。\n2. 如果 `python-pptx` 不可用，询问是安装它还是回退到基于手动\u002F导出的工作流程。\n3. 保留幻灯片顺序、演讲者备注和提取的资源。\n4. 提取后，运行与新演示文稿相同的风格选择工作流程。\n\n保持转换跨平台。当 Python 可以完成任务时，不要依赖仅限 macOS 的工具。\n\n## 实现要求\n\n### HTML \u002F CSS\n\n* 除非用户明确希望使用多文件项目，否则使用内联 CSS 和 JS。\n* 字体可以来自 Google Fonts 或 Fontshare。\n* 优先使用氛围背景、强烈的字体层次结构和清晰的视觉方向。\n* 使用抽象形状、渐变、网格、噪点和几何图形，而非插图。\n\n### JavaScript\n\n包含：\n\n* 键盘导航\n* 触摸\u002F滑动导航\n* 鼠标滚轮导航\n* 进度指示器或幻灯片索引\n* 进入时触发的揭示动画\n\n### 可访问性\n\n* 使用语义化结构 (`main`, `section`, `nav`)\n* 保持对比度可读\n* 支持仅键盘导航\n* 尊重 `prefers-reduced-motion`\n\n## 内容密度限制\n\n除非用户明确要求更密集的幻灯片且可读性仍然保持，否则使用以下最大值：\n\n| 幻灯片类型 | 限制 |\n|------------|-------|\n| 标题 | 1 个标题 + 1 个副标题 + 可选标语 |\n| 内容 | 1 个标题 + 4-6 个要点或 2 个短段落 |\n| 功能网格 | 最多 6 张卡片 |\n| 代码 | 最多 8-10 行 |\n| 引用 | 1 条引用 + 出处 |\n| 图像 | 1 张受视口约束的图像 |\n\n## 反模式\n\n* 没有视觉标识的通用初创公司渐变\n* 除非是特意采用编辑风格，否则避免系统字体文稿\n* 冗长的要点列表\n* 需要滚动的代码块\n* 在短屏幕上会损坏的固定高度内容框\n* 无效的否定 CSS 函数，如 `-clamp(...)`\n\n## 相关 ECC 技能\n\n* `frontend-patterns` 用于围绕文稿的组件和交互模式\n* `liquid-glass-design` 当演示文稿有意借鉴苹果玻璃美学时\n* `e2e-testing` 如果您需要为最终文稿进行自动化浏览器验证\n\n## 交付清单\n\n* 演示文稿可在浏览器中从本地文件运行\n* 每张幻灯片适配视口，无需滚动\n* 风格独特且有意图\n* 动画有意义，不喧闹\n* 尊重减少动效设置\n* 在交付时解释文件路径和自定义点\n",{"name":5,"origin":40,"description":7},"ECC","main","a318f48de3c5718e8ea2e9f6fae7790e8a759e85","upstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Ffrontend-slides",0,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fo-abdelmaksoud\u002F","Full-Stack Engineer | AI Systems Architect | Building autonomous multi-agent systems","2026-03-08 21:23:03",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add oabdelmaksoud\u002FAgention --skill frontend-slides",{"tool":56,"command":57},"bunx","bunx skills add oabdelmaksoud\u002FAgention --skill frontend-slides",{"tool":59,"command":60},"pnpm","pnpm dlx skills add oabdelmaksoud\u002FAgention --skill frontend-slides","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Ffrontend-slides\u002FSKILL.md",true,[64],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"STYLE_PRESETS.md","REFERENCE","参考文档",9401,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Ffrontend-slides\u002FSTYLE_PRESETS.md",[71,93,107,140,166,186],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":80,"publishedAt":35},"01M6G2QFCBNBYAJF2KTK85G9A6","visa-doc-translate","Translate visa application documents (images) to English and create a bilingual PDF with original and translation","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fvisa-doc-translate\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[81,82,83,84,85,86,87,88,89,90,91,92],"translate","doc","visa doc translate","bilingual","with","english","application","PDF","translation","documents","create","images",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":35},"01M6G2QB09TSK6BY4ME5X20EVQ","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[100,101,102,103,104,105,106],"verification","loop","verification loop","sessions","code","claude code sessions","system",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":124,"publishedAt":35},"01M6G2Q6V2F7G03VAAF27FXPJR","tdd-workflow","Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[113,116,119],{"categoryNo":114,"categoryName":115,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":117,"categoryName":118,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":120,"categoryName":121,"taxonomyType":122,"taxonomyTypeDesc":123},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[125,126,127,128,129,130,131,132,133,104,134,135,136,137,85,138,139],"workflow","tdd","tdd workflow","use","unit","coverage","refactoring","e2e","integration","development","e2e tests","tests","driven","test","writing",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":35},"01M6G2Q359YJRWAR2PFCEQAXF3","swiftui-patterns","SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS\u002FmacOS UI best practices.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswiftui-patterns\u002FSKILL.md",[],[147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,85],"patterns","swiftui","swiftui patterns","architecture","macos","performance","state management","best practices","state","ui","Optimization","ios","architecture patterns","Composition","performance optimization","view","management","swiftui architecture","navigation",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":173,"publishedAt":35},"01M6G2PY8B2FWZTWPZ84H83Y7C","swift-protocol-di-testing","Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-protocol-di-testing\u002FSKILL.md",[172],{"categoryNo":114,"categoryName":115,"taxonomyType":21,"taxonomyTypeDesc":22},[174,175,176,177,104,178,179,180,181,106,182,183,184,185],"swift protocol di testing","protocol","swift","testing","protocols","file","network","injection","dependency","swift testing","dependency injection","mock",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":192,"publishedAt":35},"01M6G2PSCN2GXV9FFZDRRRWVB6","swift-concurrency-6-2","Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-concurrency-6-2\u002FSKILL.md",[],[193,194,195,176,196,41,197],"concurrency","swift concurrency","swift concurrency 6 2","default","types"]