diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc index 1f962b8a8..5f370d7d1 100644 --- a/.markdownlint.jsonc +++ b/.markdownlint.jsonc @@ -28,7 +28,7 @@ // MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.32.1/doc/md033.md // Justification: VitePress pages use Vue script setup and custom components "MD033": { - "allowed_elements": ["script", "mission-meta", "missions", "breadcrumb", "products-index", "tags-index", "VPTeamMembers", "analytics-tag"] + "allowed_elements": ["script", "mission-meta", "missions", "breadcrumb", "products-index", "tags-index", "VPTeamMembers", "analytics-tag", "industries-index"] }, // MD012/no-multiple-blanks โ€” not enforced @@ -46,3 +46,4 @@ "MD060": false } + diff --git a/cspell.json b/cspell.json index be67f972f..02c45d3ee 100644 --- a/cspell.json +++ b/cspell.json @@ -65,6 +65,8 @@ "Novak", "Omnichannel", "onboardsupport", + "OneDrive", + "onedrive", "organisation", "opensource", "Olufsen", diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 67ff5087d..d625feabd 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -50,6 +50,15 @@ export default defineConfig({ { text: "YAML Specialist", link: "/special-ops/yaml-specialist/" }, ], }, + { + text: "Cowork Collective", + items: [ + { text: "Overview", link: "/cowork-collective/" }, + { text: "Badge Check", link: "/cowork-collective/badge-check/" }, + { text: "The Compliance Packet", link: "/cowork-collective/compliance-packet/" }, + { text: "Out of Office Vacation Handoff", link: "/cowork-collective/out-of-office-prep/" }, + ], + }, ], search: { provider: "local", @@ -193,6 +202,16 @@ export default defineConfig({ { text: "YAML Specialist", link: "/special-ops/yaml-specialist/" }, ], }, + { + text: "Cowork Collective", + link: "/cowork-collective/", + collapsed: true, + items: [ + { text: "Badge Check", link: "/cowork-collective/badge-check/" }, + { text: "The Compliance Packet", link: "/cowork-collective/compliance-packet/" }, + { text: "Out of Office Vacation Handoff", link: "/cowork-collective/out-of-office-prep/" }, + ], + }, ], socialLinks: [ { diff --git a/docs/.vitepress/data/icons.ts b/docs/.vitepress/data/icons.ts index f7193b695..baf5ab8a4 100644 --- a/docs/.vitepress/data/icons.ts +++ b/docs/.vitepress/data/icons.ts @@ -200,3 +200,35 @@ export const tagIcons: Record = { ``, }; + +export const industryIcons: Record = { + "facilities": + ` + + `, + + "financial-services": + ` + $`, + + "general": + ` + `, + + "hr": + ` + `, + + "it": + ` + + + `, + + "security": + ` + `, +}; diff --git a/docs/.vitepress/data/industries.json b/docs/.vitepress/data/industries.json new file mode 100644 index 000000000..762343bcd --- /dev/null +++ b/docs/.vitepress/data/industries.json @@ -0,0 +1,8 @@ +[ + { "slug": "facilities", "label": "Facilities" }, + { "slug": "financial-services", "label": "Financial Services" }, + { "slug": "general", "label": "General" }, + { "slug": "hr", "label": "HR" }, + { "slug": "it", "label": "IT" }, + { "slug": "security", "label": "Security" } +] diff --git a/docs/.vitepress/data/products.json b/docs/.vitepress/data/products.json index 1edd551d0..6b8ccf33b 100644 --- a/docs/.vitepress/data/products.json +++ b/docs/.vitepress/data/products.json @@ -1,15 +1,19 @@ [ { "slug": "azure", "label": "Microsoft Azure" }, + { "slug": "copilot-cowork", "label": "Copilot Cowork" }, { "slug": "copilot-studio", "label": "Microsoft Copilot Studio" }, { "slug": "dataverse", "label": "Microsoft Dataverse" }, + { "slug": "excel", "label": "Microsoft Excel" }, { "slug": "github-copilot", "label": "GitHub Copilot" }, { "slug": "microsoft-365", "label": "Microsoft 365" }, { "slug": "microsoft-365-copilot", "label": "Microsoft 365 Copilot" }, { "slug": "microsoft-learn", "label": "Microsoft Learn" }, + { "slug": "onedrive", "label": "Microsoft OneDrive" }, { "slug": "outlook", "label": "Microsoft Outlook" }, { "slug": "power-automate", "label": "Power Automate" }, { "slug": "power-platform", "label": "Microsoft Power Platform" }, { "slug": "sharepoint", "label": "SharePoint" }, { "slug": "teams", "label": "Microsoft Teams" }, - { "slug": "visual-studio-code", "label": "Visual Studio Code" } + { "slug": "visual-studio-code", "label": "Visual Studio Code" }, + { "slug": "word", "label": "Microsoft Word" } ] diff --git a/docs/.vitepress/plugins/breadcrumb/Breadcrumb.vue b/docs/.vitepress/plugins/breadcrumb/Breadcrumb.vue index 961a94719..c60d0a6ec 100644 --- a/docs/.vitepress/plugins/breadcrumb/Breadcrumb.vue +++ b/docs/.vitepress/plugins/breadcrumb/Breadcrumb.vue @@ -14,11 +14,16 @@ import { withBase } from "vitepress"; const props = defineProps<{ - section: "products" | "tags"; + section: "products" | "tags" | "industries"; label?: string; }>(); -const sectionLabel = props.section === "products" ? "Products" : "Tags"; +const SECTION_MAP: Record = { + products: "Products", + tags: "Tags", + industries: "Industries", +}; +const sectionLabel = SECTION_MAP[props.section] ?? props.section; const sectionHref = withBase(`/${props.section}/`); const crumbs = props.label diff --git a/docs/.vitepress/plugins/industries-index/IndustriesIndex.vue b/docs/.vitepress/plugins/industries-index/IndustriesIndex.vue new file mode 100644 index 000000000..bd7f77904 --- /dev/null +++ b/docs/.vitepress/plugins/industries-index/IndustriesIndex.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/docs/.vitepress/plugins/mission-meta/MissionMeta.vue b/docs/.vitepress/plugins/mission-meta/MissionMeta.vue index 20fc67c6a..4c53abe82 100644 --- a/docs/.vitepress/plugins/mission-meta/MissionMeta.vue +++ b/docs/.vitepress/plugins/mission-meta/MissionMeta.vue @@ -36,6 +36,12 @@ {{ t.label }} + + ๐Ÿญ Industries + + {{ i.label }} + + @@ -44,9 +50,11 @@ import { computed } from "vue"; import { useData, withBase } from "vitepress"; import productData from "../../data/products.json"; import tagData from "../../data/tags.json"; +import industryData from "../../data/industries.json"; const PRODUCT_LABELS = Object.fromEntries(productData.map((p) => [p.slug, p.label])); const TAG_LABELS = Object.fromEntries(tagData.map((t) => [t.slug, t.label])); +const INDUSTRY_LABELS = Object.fromEntries(industryData.map((i) => [i.slug, i.label])); const { frontmatter } = useData(); @@ -96,7 +104,15 @@ const tags = computed(() => })) ); -const hasAnything = computed(() => codename.value || difficulty.value || timeMinutes.value || products.value.length > 0 || tags.value.length > 0); +const industries = computed(() => + (frontmatter.value.industries ?? []).map((slug: string) => ({ + slug, + label: INDUSTRY_LABELS[slug] ?? slug, + href: withBase(`/industries/${slug}/`), + })) +); + +const hasAnything = computed(() => codename.value || difficulty.value || timeMinutes.value || products.value.length > 0 || tags.value.length > 0 || industries.value.length > 0);